Home.php 8.65 KB
<?php
namespace Index;

use Configs\CacheConfig;
use Configs\ChannelConfig;
use Plugin\Helpers;
use Plugin\Cache;
use LibModels\Web\Home\IndexData;
use LibModels\Web\Product\SearchData;
use Plugin\DataProcess\WebChannel\Channel as ChannelProcess;

/**
 * web首页模板数据模型
 *
 * @name HomeModel
 * @package models
 * @copyright yoho.inc
 * @version 1.0 (2015-12-20 11:08:21)
 * @author whb <huanbao.wang@yoho.cn>
 */
class HomeModel
{

    /* COOKIE标识访问的是男生频道 */
    const COOKIE_NAME_BOYS = 'boys';

    /* COOKIE标识访问的是女生频道 */
    const COOKIE_NAME_GIRLS = 'girls';

    /* COOKIE标识访问的是潮童频道 */
    const COOKIE_NAME_KIDS = 'kids';

    /* COOKIE标识访问的是创意生活频道 */
    const COOKIE_NAME_LIFESTYLE = 'lifestyle';
    
    // 男首首页
    const CODE_BOYS_CHANNEL = 'c15bf0cbfbd4893fd70c869c991f6d3d';
    // 女首首页
    const CODE_GIRLS_CHANNEL = '4d897f3b8eec0c465db0125e5b1f9edf';
 // 'a519ba44ef3a85cf3c05e405c6ba8e53';
    // 潮童首页
    const CODE_KIDS_CHANNEL = '331994d6fa8dc87f92a26dd45c0aa071';
 // 'a7741b94e8bb9d56d0d36e00c05956f7';
                                                                  
    // 创意生活新
    const CODE_LIFESTYLE_CHANNEL = '1b053fd044834f5c86d5eb15fb237af9';
    
    // 创意生活
    const CODE_LIFESTYLE_CHANNEL_1 = '380c38155fd8beee10913a3f5b462da6';

    const CODE_LIFESTYLE_CHANNEL_2 = '665f7c2fb9d037ee820766953ee34bf7';

    /**
     * 获取导航
     *
     * @param string $channel            
     * @return array
     */
    public static function getNavBars($channel = 'boys')
    {
        $data = IndexData::getNavData();
        if (empty($data)) {
            return array();
        }
        $menu = array();
        $item = array();
        foreach ($data['data'] as $val) {
            $item = array(
                'name_cn' => $val['sort_name'], // 父级
                'name_en' => $val['sort_name_en'],
                'link' => $val['sort_url'],
                'icon' => $val['sort_ico'],
                'classname' => str_replace(' ', '', strtolower($val['sort_name_en'])) == $channel ? $channel : '',
                'index_main' => 0,
                'is_hot' => $val['is_hot'] == 'Y' ? true : false,
                'is_new' => $val['is_new'] == 'Y' ? true : false,
                'subnav' => array()
            );
            foreach ($val['sub'] as $sub) { // 二级
                $index_sub = 0;
                $subnav = array(
                    'name' => $sub['sort_name'],
                    'name_en' => $sub['sort_name_en'],
                    'link' => $sub['sort_url'],
                    'is_hot' => $sub['is_hot'] == 'Y' ? true : false,
                    'is_new' => $sub['is_new'] == 'Y' ? true : false,
                    'thirdnav' => array(),
                    'index_sub' => $index_sub ++
                );
                if (isset($sub['sub'])) {
                    foreach ($sub['sub'] as $thirdsub) { // 三级
                        $thirdnav = array(
                            'title' => $thirdsub['sort_name'],
                            'name_en' => $thirdsub['sort_name_en'],
                            'link' => $thirdsub['sort_url'],
                            'branditems' => array()
                        );
                        if (isset($thirdsub['sub'])) {
                            foreach ($thirdsub['sub'] as $fourthnav) { // 四级
                                $thirdnav['branditems'][] = array(
                                    'brandname' => $fourthnav['sort_name'],
                                    'link' => $fourthnav['sort_url'],
                                    'hot' => $fourthnav['is_hot'] == 'Y' ? 'hot' : ''
                                );
                            }
                        }
                        $subnav['thirdnav'][] = $thirdnav;
                    }
                }
                $item['subnav'][] = $subnav;
            }
            $menu[] = $item;
        }
        return $menu;
    }
    
        /**
     * 选择频道
     *
     * @return void
     */
    public static function goSwitchChannel()
    {
        // 通过COOKIE检查是否已设置过首页频道时,跳转到对应的频道页
        if (!empty($_COOKIE['_Channel'])) {
            headers_sent() || header('Location: /' . $_COOKIE['_Channel']);
            exit();
        }
    }

    /**
     * 设置选择的频道保存到浏览器COOKIE
     *
     * @param string $cookie            
     * @return void
     */
    public static function setSwitchToCookie($cookie)
    {
        setcookie('_Channel', $cookie, time() + 86400 * 300, '/', COOKIE_DOMAIN);
    }

    /**
     * 获取选择频道
     *
     * @return string
     */
    public static function getSwitchChannel()
    {
        $channel = self::COOKIE_NAME_BOYS;
        if (empty($_COOKIE['_Channel'])) {
            self::setSwitchToCookie(self::COOKIE_NAME_BOYS);
        } else {
            $channel = $_COOKIE['_Channel'];
        }
        return $channel;
    }

    /**
     * 获取频道资源
     *
     * @param string $channel            
     * @param string $content_code            
     * @return array
     */
    public static function getChannelResource($channel, $content_code)
    {
        $resource = IndexData::getResourceData($content_code);
        // 格式化数据
        $data = ChannelProcess::getFormat($channel, $resource['data']);
        return $data;
    }

    /**
     * 获取lifesytle频道资源
     *
     * @return array
     */
    public static function getLifestyleChannel()
    {
        $resouce1 = IndexData::getResourceData(self::CODE_LIFESTYLE_CHANNEL_1);
        $focus = $resouce1['data'];
        $resouce2 = IndexData::getResourceData(self::CODE_LIFESTYLE_CHANNEL_2);
        $floor = $resouce2['data'];
        $resource = array(
            0 => $focus[0],
            1 => array(
                'template_name' => 'text',
                'data' => array(
                    'text' => '优选品牌 BRAND'
                )
            ),
            2 => $focus[1],
            3 => $focus[2],
            4 => $focus[3]
        );
        foreach ($floor as $val) {
            $resource[] = $val;
        }
        foreach (array_slice($focus, 4, 20) as $val) {
            $resource[] = $val;
        }
        $data = ChannelProcess::getFormat('lifestyle', $resource);
        return $data;
    }

    /**
     * 获取最新上架商品
     *
     * @param string $channel            
     * @return array
     */
    public static function getNewArrival($channel)
    {
        $result = array();
        $params = array(
            'order' => 's_t_desc',
            'shelve_time' => strtotime("-60 days") . ',' . time()
        );
        //男首频道最新上架参数是gender=1,3
        if($channel == self::COOKIE_NAME_BOYS) {
            $params['gender'] = '1,3';
        }
        //女首频道最新上架参数是gender=2,3
        else if($channel == self::COOKIE_NAME_GIRLS) {
            $params['gender'] = '2,3';
        }
        // 最新上架分类
        if (isset(ChannelConfig::$newArrivalSortList[$channel])) {
            $sortList = ChannelConfig::$newArrivalSortList[$channel];
            // 获取分类列表获取商品信息
            $goodsList = SearchData::getSearchDataBySort($params, $sortList);
            foreach ($goodsList as $goods) {
                // 格式化数据
                $val = Helpers::formatProduct($goods, true, true, true, 280, 373);
                if ($val['price'] == false) {
                    $val['price'] = $val['salePrice'];
                }
                //TODO 字段要调整
                $val['tags']['isFew'] = $val['is_soon_sold_out'];
                $val['tags']['isLimit'] = $val['tags']['is_discount'];
                $val['tags']['is_discount'] = $val['is_soon_sold_out'];
                $val['tags']['isNew'] = $val['tags']['is_new'];
                $val['tags']['isYearMidPromotion'] = $val['tags']['midYear'];
                $val['tags']['isYearEndPromotion'] = $val['tags']['yearEnd'];
                unset($val['tags']['is_advance'], $val['tags']['is_discount'], $val['tags']['is_limited'], $val['tags']['is_new'], 
                   $val['tags']['is_yohood'], $val['tags']['midYear'], $val['tags']['yearEnd']);
                if (! empty($val)) {
                    $result[] = $val;
                }
            }
        }
        return $result;
    }
}