Authored by unknown

Merge branch 'web' of http://git.dev.yoho.cn/web/yohobuy into feature/hotrank

<?php
namespace Plugin\DataProcess\WebChannel;
class Channel
{
public static $formatChannel = array(
'boys' => '\Plugin\DataProcess\WebChannel\Channel\Kids',
'girls' => '\Plugin\DataProcess\WebChannel\Channel\Girls',
'kids' => '\Plugin\DataProcess\WebChannel\Channel\Kids'
);
public static function getFormat($channel, $data)
{
//通用处理器
$result = Process::getContent($data, $channel);
$channelResult = array();
if(isset(self::$formatChannel[$channel]))
{
$class = self::$formatChannel[$channel];
$channelResult = $class::format($data);
}
//组合数据
$result = $result + $channelResult;
ksort($result);
return array_values($result);
}
}
... ...
<?php
namespace Plugin\DataProcess\WebChannel\Channel;
abstract class AbstractChannel
{
/***
* 处理数据
* @param array $resource
* @return array[以key方式存储数据]
*/
public static function format($resource){}
}
\ No newline at end of file
... ...
<?php
namespace Plugin\DataProcess\WebChannel\Channel;
class Kids extends AbstractChannel
{
/**
* {@inheritDoc}
* @see \Plugin\DataProcess\WebChannel\Channel\AbstractChannel::format()
*/
public static function format($resource)
{
$data = array();
foreach($resource as $key => $val)
{
}
return $data;
}
}
\ No newline at end of file
... ...
<?php
namespace Plugin\DataProcess\WebChannel;
use Plugin\Images;
use Plugin\Helpers;
/**
* web版通用处理器
*/
class Process
{
public static function getContent(array &$data, $type = 1)
{
//组合处理数据
$result = self::mergeProcess($data, $type);
foreach($data as $key => $val)
{
$fun = $val['template_name'];
if (empty($val['data']) || !is_callable("self::$fun")) {
continue;
}
//单个处理数据
$build = self::$fun($val, $type);
if(!empty($build))
{
$result[$key] = $build;
}
unset($data[$key]);
}
return $result;
}
/**
* 热门分类处理
*
* @param array $data
* @param string $type
* @return array
*/
public static function hotCategory(array $data, $type)
{
$data = $data['data'];
$result = $temp = array();
$temp = array('name' => $data['name'],
'navs' => array(),'tplrecommend'=> array());
foreach($data['navs']['list'] as $val) {
$temp['navs'][] = array(
'id'=>'', 'href'=> $val['url'],
'name' => $val['name']
);
}
foreach($data['menuNav']['blocks'] as $val) {
$val['img'] = Images::getImageUrl($val['img'], 185, 76, 1);
$val['url'] = Helpers::transUrl($val['url'], $type);
$temp['tplrecommend']['keyword'][] = array('href'=> $val['url'],'name'=> $val['title'], 'img'=>$val['img']);
}
foreach($data['menuNav']['list'] as $val) {
if(empty($val['name']) && empty($val['url']))
{
continue;
}
$val['url'] = Helpers::transUrl($val['url'], $type);
$temp['tplrecommend']['category'][] = array('name'=> $val['name'],'url'=> $val['url']);
}
foreach($data['imgs'] as $key => $val) {
$w = 185; $h = 248;
if($key == 0)
{
$w = 377;
$h = 504;
}
$val['img'] = Images::getImageUrl($val['img'], $w, $h, 1);
$val['url'] = Helpers::transUrl($val['url'], $type);
if($key == 0)
{
$temp['tplrecommend']['brands'][] = array('href'=> $val['url'],'name'=> $val['title'],'img'=> $val['img']);
}
else
{
$temp['tplrecommend']['types'][] = array('href'=> $val['url'],'name'=> $val['title'],'img'=> $val['img']);
}
}
$result['recommend'] = $temp;
return $result;
}
/**
* banner处理
*
* @param array $data
* @param string $type
* @return array
*/
public static function focus(array $data, $type)
{
$result = array();
$temp = array();
$width = 1150;
$height = 450;
if($data['focus_type'] == 1) {
foreach($data['data'] as $val) {
$val['src'] = Images::getImageUrl($val['src'], $width, $height, 1);
$val['url'] = Helpers::transUrl($val['url'], $type);
$temp[] = array('href'=> $val['url'],'img' => $val['src']);
}
$result['slide']['list'] = $temp;
}
return $result;
}
/**
* 组合数据处理
*
* @param array $data
* @param string $type
* @return array
*/
public static function mergeProcess(array &$data, $type)
{
$result = array();
foreach($data as $key => $val)
{
if(isset($data[$key]) && isset($data[$key+3])) //人气单品[template: text & textNav & goods & floor]
{
$temp = array('singlehot' => array('name'=>'','imgHot'=> array(),'brands'=> array()));
if($data[$key]['template_name'] == 'text' && $data[$key+1]['template_name'] == 'textNav'
&& $data[$key+2]['template_name'] == 'goods' && $data[$key+3]['template_name'] == 'floor')
{
//text模版
$temp['singlehot']['name']= $val['data']['text'];
//goods模版
foreach($data[$key+2]['data'] as $val)//TODO
{
$temp['singlehot']['imgHot'][] = array('href'=> '',//$val['url'],
'name' => '','price'=> '');
}
//floor模版
foreach($data[$key+3]['data'] as $val)
{
$val['src'] = Images::getImageUrl($val['src'], 185, 86, 1);
$val['url'] = Helpers::transUrl($val['url'], $type);
$temp['singlehot']['brands'][] = array('href' => $val['url'],
'img' => $val['src'],'name'=>$val['title']);
}
$result[$key] = $temp;
unset($data[$key], $data[$key+1], $data[$key+2], $data[$key+3]);
}
}
if(isset($data[$key]) && isset($data[$key+1])) //优选品牌 [ template: text & focus ]
{
$temp = array('preferenceBrands'=> array('name'=>'', 'slider'=> array()));
if($data[$key]['template_name'] =='text' && $data[$key+1]['template_name'] =='focus')
{
$temp['preferenceBrands']['name'] = $val['data']['text'];
//focus 分类
foreach($data[$key+1]['data'] as $val)
{
$width = 320;
$height = 430;
$val['src'] = Images::getImageUrl($val['src'], $width, $height, 1);
$val['url'] = Helpers::transUrl($val['url'], $type);
$temp['preferenceBrands']['slider'][] = array('href'=> $val['url'],'img'=> $val['src']);
}
$result[$key] = $temp;
unset($data[$key], $data[$key+1]);
}
}
if(isset($data[$key]) && isset($data[$key+2])) //girlkids[ template: text & textNav & goods]
{
$temp = array('girlkids'=> array('name'=>'', 'imgHot'=> array()));
if($data[$key]['template_name'] =='text' && $data[$key+2]['template_name'] =='goods')
{
$temp['girlkids']['name'] = $val['data']['text'];
foreach($data[$key+2]['data'] as $val)//TODO
{
$temp['girlkids']['imgHot'][] = array('href'=> '',//$val['url'],
'name' => '','price'=>'');
}
$result[$key] = $temp;
unset($data[$key], $data[$key+1], $data[$key+2]);
}
}
}
return $result;
}
}
\ No newline at end of file
... ...
... ... @@ -437,6 +437,26 @@ class Helpers
}
/**
* 根据url获取拼接之后的地址,用于用户清理缓存
* @param string $url url地址
* @param string $channel 频道,默认为woman
*
* @return string 处理之后的地址
*/
public static function transUrl($url, $channel='woman') {
$extra = '';
if(!empty($url) && stripos($url, '?') === false) {
$extra = '?channel='.$channel;
}
if(!empty($url) && stripos($url, '?') !== false){
$extra = '&channel='.$channel;
}
return $url . $extra;
}
/**
* 各国手机号规则
*/
private static function areaMobielVerify($mobile, $area = 86)
... ...
... ... @@ -6,6 +6,7 @@ use Plugin\Helpers;
use Plugin\Cache;
use LibModels\Web\Home\IndexData;
use LibModels\Web\Product\SearchData;
use Plugin\DataProcess\WebChannel\Channel as ChannelProcess;
/**
* web首页模板数据模型
*
... ... @@ -131,13 +132,16 @@ class HomeModel
/**
* 获取频道资源
*
* @param string $channel
* @param string $content_code
* @return array
*/
public static function getChannelResource($content_code)
{
$data = IndexData::getResourceData($content_code);
$resource = IndexData::getResourceData($content_code);
//格式化数据
$data = ChannelProcess::getFormat('kids', $resource['data']);
return $data;
}
/**
... ...