List.php 9.4 KB
<?php

namespace Product;

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

/**
 * 商品列表相关的模板数据模型
 * 
 * @name ListModel
 * @package models/Product
 * @copyright yoho.inc
 * @version 1.0 (2015-10-27 16:27:54)
 * @author fei.hong <fei.hong@yoho.cn>
 */
class ListModel
{

    /**
     * 获取品类商品列表数据
     * 
     * @param array $condition 条件
     * @return array | false
     */
    public static function getClassData($condition)
    {
        $result = array();

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

        // 调用接口查询数据
        $listData = ClassData::filterClassData($condition);
        // 处理返回的数据
        if (isset($listData['code']) && $listData['code'] === 200) {
            $result = ListProcess::getListData($listData['data'], false);
        }

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

        return $result;
    }

    /**
     * 获取品牌信息
     * 
     * @param int $id 唯一的ID
     * @param int $uid 用户ID
     * @param string $title 网站标题
     * @return array
     */
    public static function getBrandIntro($id, $uid, &$title)
    {
        $result = array();

        // 获取品牌介绍信息, 有缓存1小时
        $introData = BrandData::getBrandIntro($id, $uid);
        if (isset($introData['data']['brand_intro'])) {
            $result['id'] = $id;
            $result['intro'] = $introData['data']['brand_intro'];
            $result['collected'] = (isset($introData['data']['is_favorite']) && $introData['data']['is_favorite'] == 'Y') ? true : false;
            // 顶部导航的标题
            $title = isset($introData['data']['brand_name']) ? $introData['data']['brand_name'] : '';
        }

        // 获取品牌banner的数据, 有缓存1小时
        $bannerData = BrandData::getBrandBanner($id);
        if (isset($bannerData['data']['banner'])) {
            $result['banner'] = Helpers::getImageUrl($bannerData['data']['banner'], 640, 75);
        }

        return $result;
    }

    /**
     * 获取品牌商品列表数据
     * 
     * @param array $condition 条件参数
     * @param string $title 网站标题
     * @return array
     */
    public static function getBrandData($condition, &$title)
    {
        $result = array();

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

        // 调用接口查询数据
        $listData = BrandData::filterBrandData($condition);
        // 处理返回的数据
        if (isset($listData['code']) && $listData['code'] === 200) {
            $result = ListProcess::getListData($listData['data'], false);
            if (!empty($listData['data']['brand'])) {
                $result['brandWay'] = array(
                    'url' => 'http://' . $listData['data']['brand']['brand_domain'] . SUB_DOMAIN,
                    'thumb' => Helpers::getImageUrl($listData['data']['brand']['brand_ico'], 75, 40),
                    'name' => $listData['data']['brand']['brand_name']
                );
                $title = $listData['data']['brand']['brand_name'];
            }
        }

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

        return $result;
    }

    /**
     * 根据品牌ID获取品牌LOGO
     * 
     * @param int $id 品牌ID
     * @param string $title 品牌标题
     * @return array | false
     */
    public static function getBrandLogoByIds($id, &$title)
    {
        $result = false;

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

        // 调用接口查询数据
        $brandLogo = BrandData::getBrandLogo($id);
        // 处理返回的数据
        if (isset($brandLogo['data'][0])) {
            $result = array(
                'url' => Helpers::url('', null, $brandLogo['data'][0]['brand_domain']),
                'thumb' => Helpers::getImageUrl($brandLogo['data'][0]['brand_ico'], 75, 40),
                'name' => $brandLogo['data'][0]['brand_name'],
            );
            $title = $result['name'];
        }

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

        return $result;
    }

    /**
     * 获取所有的品牌名称列表
     * 
     * @return array(
     *    品牌ID => 品牌域名(domain)
     * )
     */
    public static function getAllBrandDomains()
    {
        $result = array();

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

        $brand = BrandData::getBrandsData(null);
        /* 按字母'A-Z'分组的品牌列表 */
        if (!empty($brand['data']['brands'])) {
            foreach ($brand['data']['brands'] as $value) {
                foreach ($value as $row) {
                    $result[$row['id']] = $row['brand_domain'];
                }
            }
        }
        // 更多关联的品牌
        if (!empty($brand['data']['morebrands'])) {
            foreach ($brand['data']['morebrands'] as $row) {
                $result[$row['id']] = $row['brand_domain'];
            }
        }
        $brand = array();

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

        return $result;
    }

    /**
     * 获取所有的品牌名称列表
     * 
     * @return array(
     *    品牌域名(domain) => 品牌名称(name)
     * )
     */
    public static function getAllBrandNames()
    {
        $result = array();

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

        $brand = BrandData::getBrandsData(null);
        /* 按字母'A-Z'分组的品牌列表 */
        if (!empty($brand['data']['brands'])) {
            foreach ($brand['data']['brands'] as $value) {
                foreach ($value as $row) {
                    $result[$row['brand_domain']] = strtolower($row['brand_name']);
                }
            }
        }
        // 更多关联的品牌
        if (!empty($brand['data']['morebrands'])) {
            foreach ($brand['data']['morebrands'] as $row) {
                $result[$row['brand_domain']] = strtolower($row['brand_name']);
            }
        }
        $brand = array();

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

        return $result;
    }

}