Class.php 4.64 KB
<?php

namespace Category;

use LibModels\Wap\Category\ClassData;
use Configs\CacheConfig;
use Plugin\Helpers;
use Plugin\Cache;

/**
 * 品牌相关的模板数据模型
 * 
 * @name BrandModel
 * @package Models/Category
 * @copyright yoho.inc
 * @version 1.0 (2015-10-21 13:52:44)
 * @author fei.hong <fei.hong@yoho.cn>
 */
class ClassModel
{
    
    /**
     * 根据频道获取品牌一览数据
     * 
     * @param int $channel 1表示男生频道, 2表示女生频道, 3表示潮童频道, 4表示创意生活频道
     * @return array
     */
    public static function getClassData()
    {
        $classes = array();

        if (USE_CACHE) {
            // 先尝试获取一级缓存(master), 有数据则直接返回.
            $result = Cache::get(CacheConfig::KEY_CATEGORY_CLASSES_DATA, 'master');
            if (!empty($result)) {
                return $result;
            }
        }

        do {
            $num = 1;
            $data = ClassData::getClassesData();

            if(!isset($data['code']) || $data['code'] !== 200)
            {
                break;
            }

            if(!isset($data['data']))
            {
                break;
            }

            foreach ($data['data'] as $k => $v){
                $oneClass = array('name'=>$k, 'ca'=>array());
                if($num === 1)
                {
                    $oneClass['focus'] = true;
                }

                foreach ($v as $val) {
                    $item = array();
                    $item['name'] = $val['category_name'];
                    $item['id'] = $val['relation_parameter']['sort'];
                    foreach ($val['sub'] as $value) {
                        $subitem = array();
                        $subitem['name'] = $value['category_name'];
                        $subitem['id'] = $value['relation_parameter']['sort'];
                        $subitem['url'] = '/product/list/class?sort='.$value['relation_parameter']['sort'];
                    
                        $item['sub'][] = $subitem;
                    }

                    $oneClass['ca'][] = $item;
                }

                $num++;
                $classes[] = $oneClass;
            }

            if (USE_CACHE) {
                // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
                if (empty($classes)) {
                    $classes = Cache::get(CacheConfig::KEY_CATEGORY_CLASSES_DATA, 'slave');
                }
                // 接口调用正常,数据封装完成, 则设置一级(master)和二级(slave)数据缓存
                else {
                    Cache::set(CacheConfig::KEY_CATEGORY_CLASSES_DATA, $classes);
                }
            }

        }while(false);

        return $classes;
    }


    /**
     * 返回品类构成的数组
     * 
     * @return array 键为品类查询sort参数,值为品类名称构成的数组
     */
    public static function getClassesArr()
    {
        $classes = array();
        $classesData = self::getClassData();

        foreach ($classesData as $val) {
            foreach ($val['ca'] as $single) {
                $classes[$single['id']] = $single['name'];
                $classes += self::array_column($single['sub'], 'name', 'id');
            }
        }

        return $classes;
    }


    /**
     * 自定义array_column函数
     * 
     * @return array  返回数组中指定的一列组成的数组
     */
    /**
     * 自定义array_column函数
     * @param  array  $input     需要取出数组咧的多维数组
     * @param  string $columnKey 需要返回的列
     * @param  mixed $indexKey  作为返回数组的索引值
     * @return array            从多维数组中返回单列数组 
     */
    private static function array_column(array $input, $columnKey, $indexKey = null)
    {
        $array = array();
        foreach ($input as $value) {
            if ( ! isset($value[$columnKey])) {
                trigger_error("Key \"$columnKey\" does not exist in array");
                return false;
            }
            if (is_null($indexKey)) {
                $array[] = $value[$columnKey];
            }
            else {
                if ( ! isset($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not exist in array");
                    return false;
                }
                if ( ! is_scalar($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not contain scalar value");
                    return false;
                }
                $array[$value[$indexKey]] = $value[$columnKey];
            }
        }
        return $array;
            
    }
    
}