Authored by whb

web首页相关

<?php
namespace Action;
use Index\HomeModel;
class WebAction extends AbstractAction
{
/**
* 设置头部
*
* @param string $channel (默认不设置)
* @return
*/
protected function setWebNavHeader($channel = '')
{
if(empty($channel)) {
$channel = \Index\HomeModel::getSwitchChannel();
}
else {//设置频道
\Index\HomeModel::setSwitchToCookie($channel);
}
$header = array(
'navbars'=>\Index\HomeModel::getNavBars($channel),
'gobytype'=> 'gobuy'.$channel,
'searchcate'=>'searchcate'.$channel,
'myyoho' => array(
'email'=>'hhh@126.com',
'viptype'=>'普通会员',
'currentscore' => 495,
'totalscore' => 600,
'cardtype' => '银卡',
'infolist' => array(
array(
'name' =>'待处理的订单',
'link' =>'',
'num' => '0'
),
array(
'name' =>'我的收藏',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的优惠券',
'link' =>'',
'num' => '2'
),
array(
'name' =>'我的YOHO币',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的退货换货',
'link' =>'',
'num' => '1'
)
),
'updlink' => ''
),
'gobuy'=> array(
'gobuynum' =>3
),
'breadcrumbnav'=> array(
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => 'BOYS首页'
)
),
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '上衣'
)
),
array(
'isend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '衬衫'
)
)
)
);
$this->_view->assign('headerdata', $header);
}
}
\ No newline at end of file
... ...
... ... @@ -41,6 +41,7 @@ class Yohobuy
'android' => 'fd4ad5fcfa0de589ef238c0e7331b585',
'iphone' => 'a85bb0674e08986c6b115d5e3a4884fa',
'ipad' => 'ad9fcda2e679cf9229e37feae2cdcf80',
'web' => '0ed29744ed318fd28d2c07985d3ba633',
);
/**
... ... @@ -55,10 +56,13 @@ class Yohobuy
// 苹果IPAD
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'iPad')) {
return 'ipad';
}
elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'android')) {
return 'android';
}
// 其它
else {
return 'android';
return 'web';
}
}
... ...
<?php
namespace Configs;
class ChannelConfig
{
/**
* 最新上架分类
*/
public static $newArrivalSortList = array(
//女首上架分类
'girls' => array(
array(
'misort' => 20,
'viewNum' => 4
),// 棉衣
array(
'misort' => 18,
'viewNum' => 4
),// 羽绒服
array(
'misort' => 22,
'viewNum' => 4
),// 风衣/大衣
array(
'misort' => 44,
'viewNum' => 4
),//休闲/运动鞋
array(
'misort' => 21,
'viewNum' => 4
),// 夹克
array(
'misort' => 16,
'viewNum' => 4
),// 卫衣
array(
'misort' => 26,
'viewNum' => 4
),// 休闲裤
array(
'misort' => 45,
'viewNum' => 4
),//靴子
array(
'misort' => 226,
'viewNum' => 4
),// 防风外套
array(
'misort' => 27,
'viewNum' => 4
),// 牛仔裤
array(
'misort' => 257,
'viewNum' => 4
),//毛衣/针织
array(
'misort' => 11,
'viewNum' => 4
),// T恤
array(
'misort' => 31,
'viewNum' => 4
),//连衣裙
array(
'misort' => 32,
'viewNum' => 4
),//半身裙
array(
'misort' => 50,
'viewNum' => 4
),//手拎包/单肩包
array(
'misort' => 60,
'viewNum' => 4
),//帽子
array(
'misort' => 49,
'viewNum' => 4
),//双肩包
array(
'misort' => 65,
'viewNum' => 4
),//首饰
array(
'misort' => 314,
'viewNum' => 4
),//围巾
array(
'misort' => 59,
'viewNum' => 4
),//手表
),
//潮童上架分类
'kids' => array(
array(
'misort' => 404,
'viewNum' => 4
),// 夹克
array(
'misort' => 396,
'viewNum' => 4
),// 卫衣
array(
'misort' => 369,
'viewNum' => 4
),// 休闲裤
array(
'misort' => 406,
'viewNum' => 4
),// 大衣/风衣
array(
'misort' => 368,
'viewNum' => 4
),// 休闲/运动鞋
array(
'misort' => 366,
'viewNum' => 4
),// T恤
array(
'misort' => 400,
'viewNum' => 4
),// 毛衣/针织
array(
'misort' => 367,
'viewNum' => 4
),// 衬衫
array(
'misort' => 388,
'viewNum' => 4
),// 牛仔裤
array(
'misort' => 392,
'viewNum' => 4
),// 双肩包
array(
'misort' => 384,
'viewNum' => 4
),// 打底裤/紧身裤
array(
'misort' => 371,
'viewNum' => 4
),// 连衣裙
array(
'misort' => 421,
'viewNum' => 4
),// 围巾
array(
'misort' => 425,
'viewNum' => 4
),// 围兜
),
//创意生活上架分类
'lifestyle' => array(
array(
'sort' => 171,
'viewNum' => 5
),//耳机
array(
'sort' => 398,
'viewNum' => 5
),//智能装备
array(
'sort' => 185,
'viewNum' => 5
),//相机
array(
'misort' => 259,
'viewNum' => 5
),//美妆
array(
'sort' => 267,
'viewNum' => 5
),//杯子/水壶
array(
'sort' => 313,
'viewNum' => 5
),//手机/ipad壳套
array(
'sort' => 211,
'viewNum' => 5
),//数码配件
array(
'sort' => 292,
'viewNum' => 5
),//玩偶
array(
'sort' => 272,
'viewNum' => 5
),//储物收纳
array(
'sort' => 183,
'viewNum' => 5
),//居家用品
array(
'sort' => 273,
'viewNum' => 5
),//厨具/餐具
array(
'sort' => 271,
'viewNum' => 5
),//靠枕/靠垫/抱枕
),
);
}
\ No newline at end of file
... ...
<?php
namespace LibModels\Web\Home;
use Api\Yohobuy;
use Api\Sign;
class IndexData
{
//分类服务
const URL_OPERATIONS_CATEGORY = 'operations/service/v1/category';
//资源位地址
const URL_OPERATIONS_RESOURCE_GET = 'operations/api/v5/resource/get';
/**
* 获取导航数据
*
* @param int $status (default)
* @param string $fields (default)
* @return array
*/
public static function getNavData($status = 1, $fields = 'id,sort_name,sort_name_en,parent_id,sort_url,sort_ico,content_code,is_new,is_hot,separative_sign')
{
$params = array('parent_id'=>'','platform'=>'web',
'status'=> $status,'fields'=> $fields
);
return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URL_OPERATIONS_CATEGORY,'getCategory', $params, false);
}
/**
* 获取资源数据
*
* @param string $content_code
* @param string $client_type
* @return array
*/
public static function getResourceData($content_code, $client_type = 'web')
{
// 构建必传参数
$params = Yohobuy::param();
$params['content_code'] = $content_code;
$params['client_type'] = $client_type;
$params['client_secret'] = Sign::getSign($params);
return Yohobuy::get(Yohobuy::SERVICE_URL . 'operations/api/v5/resource/get', $params);
}
}
\ No newline at end of file
... ...
<?php
namespace LibModels\Web\Product;
class SearchData extends \LibModels\Wap\Product\SearchData
{
/**
* 根据分类列表获取商品信息
*
* @param array $params
* @param array $sortList
* @return array
*/
public static function getSearchDataBySort(array $params, array $sortList)
{
$data = array();
foreach ($sortList as $v) {
if(empty($v['viewNum'])){
continue;
}
$params = array_merge($params, $v);
$list = self::searchElasticByCondition($params, true);
$productList = empty($list['data']['product_list']) ? array() : $list['data']['product_list'];
if(count($productList) < $v['viewNum']){
continue;
}
$data = array_merge($data, $productList);
}
return $data;
}
}
\ No newline at end of file
... ...
... ... @@ -94,7 +94,7 @@
<ul class="category-list">
{{#branditems}}
<li class="category-item thirdnavbar">
<a href="" hot={{hot}}>{{brandname}}</a>
<a href="{{link}}" hot={{hot}}>{{brandname}}</a>
</li>
{{/branditems}}
</ul>
... ...
<?php
use Action\AbstractAction;
use Action\WebAction;
use Index\HomeModel;
/**
* 男首
*/
class BoysController extends AbstractAction
class BoysController extends WebAction
{
public function indexAction()
{
$headerdata = array(
'gobytype' =>'gobuyboys',
'searchcate'=> 'searchcateboys',
'navbars' => array(
array(
'name_cn'=>'男生',
'name_en'=>'BOYS',
'link' => '',
'classname' => 'boys',
'index_main' => 0,
'subnav' => array(
array(
'name'=>'男首1',
'link'=>'',
'index_sub'=>0,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'男首2',
'link'=>'',
'index_sub'=>1,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'男首3',
'link'=>'',
'index_sub'=>2,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
)
)
),
array(
'name_cn'=>'女生',
'name_en'=>'GIRLS',
'link' => 'http=>//www.baidu.com',
'classname' => '',
'index_main' => 0,
'subnav' => array(
array(
'name'=>'女生1',
'link'=>'',
'index_sub'=>0,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'女生2',
'link'=>'',
'index_sub'=>1,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'女生3',
'link'=>'',
'index_sub'=>2,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
)
)
)
),
'myyoho' => array(
'email'=>'hhh@126.com',
'viptype'=>'普通会员',
'currentscore' => 495,
'totalscore' => 600,
'cardtype' => '银卡',
'infolist' => array(
array(
'name' =>'待处理的订单',
'link' =>'',
'num' => '0'
),
array(
'name' =>'我的收藏',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的优惠券',
'link' =>'',
'num' => '2'
),
array(
'name' =>'我的YOHO币',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的退货换货',
'link' =>'',
'num' => '1'
)
),
'updlink' => ''
),
'gobuy'=> array(
'gobuynum' =>3
),
'breadcrumbnav'=> array(
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => 'BOYS首页'
)
),
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '上衣'
)
),
array(
'isend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '衬衫'
)
)
)
);
$this->setWebNavHeader();
$imgsrc='http://img11.static.yhbimg.com/goodsimg/2015/10/19/10/01b312c3b7a7efebcd671e73495ff3e306.jpg';
$name_href=array('name'=>'衣服','url'=>'');
$name_href_img=array(
... ... @@ -248,7 +43,6 @@ class BoysController extends AbstractAction
$data = array(
'headerdata' => $headerdata,
'footerTop' => true,
'boysHomePage' => true,
'boys' => array(
... ...
<?php
/**
* 错误错误控制器
*
* @name ErrorController
* @desc 错误控制器, 在发生未捕获的异常时刻被调用
* @see http://www.php.net/manual/en/yaf-dispatcher.catchexception.php
*/
use Action\AbstractAction;
class ErrorController extends AbstractAction
{
public function indexAction()
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
$this->_view->display('index');
}
public function errorAction($exception)
{
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
// @todo debug
//echo $exception->getMessage();
// 设置网站标题
$this->setTitle('页面不存在');
$this->setNavHeader('抱歉,页面不存在!', true, SITE_MAIN);
// 生成HTML (error.html)
$this->_view->html('error');
// 渲染模板
$this->_view->display('index', array(
'pageFooter' => true,
'showDownloadApp' => true,
));
}
}
... ...
<?php
use Action\AbstractAction;
use Action\WebAction;
use Index\HomeModel;
/**
* 女首
*/
class GirlsController extends AbstractAction
class GirlsController extends WebAction
{
public function indexAction()
{
$headerdata = array(
'gobytype' =>'gobuyboys',
'searchcate'=> 'searchcateboys',
'navbars' => array(
array(
'name_cn'=>'男生',
'name_en'=>'BOYS',
'link' => '',
'classname' => 'boys',
'index_main' => 0,
'subnav' => array(
array(
'name'=>'男首1',
'link'=>'',
'index_sub'=>0,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'男首2',
'link'=>'',
'index_sub'=>1,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'男首3',
'link'=>'',
'index_sub'=>2,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
)
)
),
array(
'name_cn'=>'女生',
'name_en'=>'GIRLS',
'link' => 'http=>//www.baidu.com',
'classname' => '',
'index_main' => 0,
'subnav' => array(
array(
'name'=>'女生1',
'link'=>'',
'index_sub'=>0,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'女生2',
'link'=>'',
'index_sub'=>1,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
),
array(
'name'=>'女生3',
'link'=>'',
'index_sub'=>2,
'thirdnav' => array(
array(
'title' =>'上装',
'branditems'=> array(
array(
'brandname'=>'背心',
'link'=>''
),
array(
'brandname'=>'T恤',
'link'=>''
)
)
)
)
)
)
)
),
'myyoho' => array(
'email'=>'hhh@126.com',
'viptype'=>'普通会员',
'currentscore' => 495,
'totalscore' => 600,
'cardtype' => '银卡',
'infolist' => array(
array(
'name' =>'待处理的订单',
'link' =>'',
'num' => '0'
),
array(
'name' =>'我的收藏',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的优惠券',
'link' =>'',
'num' => '2'
),
array(
'name' =>'我的YOHO币',
'link' =>'',
'num' => '1'
),
array(
'name' =>'我的退货换货',
'link' =>'',
'num' => '1'
)
),
'updlink' => ''
),
'gobuy'=> array(
'gobuynum' =>3
),
'breadcrumbnav'=> array(
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => 'BOYS首页'
)
),
array(
'notend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '上衣'
)
),
array(
'isend'=>array(
'link' => 'http=>//www.baidu.com',
'name' => '衬衫'
)
)
)
);
$this->setWebNavHeader(HomeModel::COOKIE_NAME_GIRLS);
//数据变量
$imgsrc='http://img11.static.yhbimg.com/goodsimg/2015/10/19/10/01b312c3b7a7efebcd671e73495ff3e306.jpg';
$name_href=array('name'=>'衣服','url'=>'');
... ... @@ -253,7 +49,6 @@ class GirlsController extends AbstractAction
)
);
$data = array(
'headerdata' => $headerdata,
'boysHomePage' => true,
'girls' => array(
array(
... ...
<?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;
/**
* 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 = '';
//女首首页
const CODE_GIRLS_CHANNEL = 'a519ba44ef3a85cf3c05e405c6ba8e53';
//潮童首页
const CODE_KIDS_CHANNEL = 'a7741b94e8bb9d56d0d36e00c05956f7';
//创意生活
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'],
);
}
}
$subnav['thirdnav'][] = $thirdnav;
}
}
$item['subnav'][] = $subnav;
}
$menu[] = $item;
}
return $menu;
}
/**
* 设置选择的频道保存到浏览器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 $content_code
* @return array
*/
public static function getChannelResource($content_code)
{
$data = IndexData::getResourceData($content_code);
//格式化数据
}
/**
* 获取最新上架商品
*
* @param string $channel
* @return array
*/
public static function getNewArrival($channel)
{
$result = array();
$params = array(
'order' => 's_t_desc',
'shelve_time' => strtotime("-60 days").','.time()
);
//最新上架分类
if(isset(ChannelConfig::$newArrivalSortList[$channel])) {
$sortList = ChannelConfig::$newArrivalSortList[$channel];
//获取分类列表获取商品信息
$result = SearchData::getSearchDataBySort($params, $sortList);
//格式化数据
}
return $result;
}
}
\ No newline at end of file
... ...