Home.php 10.5 KB
<?php

namespace Index;

use LibModels\Wap\Home\IndexData;
use Plugin\Helpers;
use Plugin\Cache;
use Plugin\DataProcess\FloorProcess;
use Configs\CacheConfig;

/**
 * 首页相关的模板数据模型
 * 
 * @name HomeModel
 * @package models
 * @copyright yoho.inc
 * @version 1.0 (2015-10-21 11:08:21)
 * @author fei.hong <fei.hong@yoho.cn>
 */
class HomeModel
{
    /* 频道选择页取背景图片的位置码 */
    const CODE_BG = '7ba9118028f9b22090b57341487567eb';

    /* 男生楼层资源的位置码 */
    const CODE_FLOOR_BOYS = '8512bf0755cc549ac323f852c9fd945d';
    /* 女生楼层资源的位置码 */
    const CODE_FLOOR_GIRLS = '189b6686065dbd6755dd6906cf03c002';
    /* 潮童楼层资源的位置码 */
    const CODE_FLOOR_KIDS = 'b8c1bff53d4ea60f978926d538620636'; // '66cad79d93e055ad6fc5c8744086066d'; 
    /* 创意生活楼层资源的位置码 */
    const CODE_FLOOR_LIFESTYLE = '61cd852c6afcf60660196154f66a3a62';

    /* 男生底部广告的位置码 */
    const CODE_BANNER_BOTTOM_BOYS = 'a2ec977c027d0cd9cdccb356ddf16b08';
    /* 女生底部广告的位置码 */
    const CODE_BANNER_BOTTOM_GIRLS = '8c8bd1b89a22e5895f05882e0825b493';

    /* COOKIE标识访问的是男生频道 */
    const COOKIE_NAME_BOYS = 'boys';
    /* COOKIE标识访问的是女生频道 */
    const COOKIE_NAME_GIRLS = 'girls';
    /* COOKIE标识访问的是潮童频道 */
    const COOKIE_NAME_KIDS = 'kids';
    /* COOKIE标识访问的是创意生活频道 */
    const COOKIE_NAME_LIFESTYLE = 'lifestyle';

    /* COOKIE标识访问的是男生频道底部Banner */
    const CODE_NAME_BOYS_BOTTOM_BANNER = '8c48745a39373d621bf5fd80edf59b5e';
    /* COOKIE标识访问的是女生频道频道底部Banner */
    const CODE_NAME_GIRLS_BOTTOM_BANNER = 'c63939b2ad458e9cb51147940c1da2e5';

    /**
     * 选择频道
     * 
     * @return void
     */
    public static function goSwitchChannel()
    {
        // 通过COOKIE检查是否已设置过首页频道时,跳转到对应的频道页
        if (!empty($_COOKIE['_Channel'])) {
            headers_sent() || header('Location: /' . $_COOKIE['_Channel']);
            exit();
        }
        // 没有Cookie时, 设置默认访问的频道
        else {
            self::setSwitchToCookie(self::COOKIE_NAME_BOYS);
        }
    }

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

    /**
     * 获取频道选择页的背景图片
     * 
     * @return string | false
     */
    public static function getBgImage()
    {
        $result = false;

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

        // 调用接口获取数据
        $banner = IndexData::getBannerStart(self::CODE_BG);
        if (isset($banner['data'][0]['data']['list'][0]['src'])) {
            $result = Helpers::getImageUrl($banner['data'][0]['data']['list'][0]['src'], 640, 800, 2);
        }

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

        return $result;
    }

    /**
     * 获取男生,女生底部banner
     * 
     * @return string | false
     */
    public static function getBottomBanner($channel)
    {
        $result = false;
        if($channel == 2) {
            $resource = self::CODE_NAME_GIRLS_BOTTOM_BANNER;
            $cache = CacheConfig::KEY_ACTION_GRILS_BOTTOM_BANNER;
        } else {
            $resource = self::CODE_NAME_BOYS_BOTTOM_BANNER;
            $cache = CacheConfig::KEY_ACTION_BOYS_BOTTOM_BANNER;
        }

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

        // 调用接口获取数据
        $banner = IndexData::getBannerStart($resource);
        if (isset($banner['code']) && $banner['code'] == 200 && $banner['data']['total'] > 0) {
            $result = array();
            // 处理数据
            foreach ($banner['data']['list'] as $val) {
                foreach ($val['data'] as $single) {
                    $result['url'] = ($channel === 2) ? Helpers::url('/boys') : Helpers::url('/girls');
                    $result['img'] = Helpers::getImageUrl($single['src'], 640, 200);
                }
            }
        }

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

        return $result;
    }

    /**
     * 获取男生首页的楼层数据
     * 
     * @return array | false
     */
    public static function getBoysFloor()
    {
        $result = array();

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

        // 调用接口获取楼层数据, 并封装成模板渲染需要的数据格式
        $channelData = IndexData::getResourceData('1,3', self::CODE_FLOOR_BOYS);
        if (isset($channelData['code']) && $channelData['code'] == 200) {
            $result = FloorProcess::getContent($channelData['data']);
        }

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

    /**
     * 获取女生首页的楼层数据
     * 
     * @return array | false
     */
    public static function getGirlsFloor()
    {
        $result = array();

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

        // 调用接口获取楼层数据, 并封装成模板渲染需要的数据格式
        $channelData = IndexData::getResourceData('2,3', self::CODE_FLOOR_GIRLS);
        if (isset($channelData['code']) && $channelData['code'] == 200) {
            $result = FloorProcess::getContent($channelData['data'], 2);
        }

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

        return $result;
    }

    /**
     * 获取潮童首页的楼层数据
     * 
     * @return array | false
     */
    public static function getKidsFloor()
    {
        $result = false;

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

        // 调用接口获取楼层数据, 并封装成模板渲染需要的数据格式
        $channelData = IndexData::getResourceData('', self::CODE_FLOOR_KIDS);
        if (isset($channelData['code']) && $channelData['code'] == 200) {
            $result = FloorProcess::getContent($channelData['data'], 3);
        }

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

        return $result;
    }

    /**
     * 获取创意生活首页的楼层数据
     * 
     * @return array | false
     */
    public static function getLifestyleFloor()
    {
        $result = false;

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

        // 调用接口获取楼层数据, 并封装成模板渲染需要的数据格式
        $channelData = IndexData::getResourceData('', self::CODE_FLOOR_LIFESTYLE);
        if (isset($channelData['code']) && $channelData['code'] == 200) {
            $result = FloorProcess::getContent($channelData['data'], 4);
        }

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

        return $result;
    }

}