<?php namespace WebPlugin\DataProcess; use WebPlugin\Images; use WebPlugin\Helpers; use WebPlugin\Cache; use Configs\WebCacheConfig; use LibModels\Web\Product\SearchData; /** * web版通用处理器 */ class Process { /** * * @param array $data * @param string $type (boys, girls, kids, lifestyle) */ public static function getContent(array &$data, $type = '') { // 组合处理数据 $result = self::mergeProcess($data, $type); $build = array(); 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'] ); } $len = count($data['menuNav']['blocks']); foreach ($data['menuNav']['blocks'] as $key => $val) { if ($len <= 2 && $key == 0) { $val['img'] = Images::getImageUrl($val['img'], 185, 152, 1); } $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'], 'href' => $val['url'] ); } foreach ($data['imgs'] as $key => $val) { $val['url'] = Helpers::transUrl($val['url'], $type); if ($key == 0) { $val['img'] = Images::getImageUrl($val['img'], 377, 504, 1); // 大图 $temp['tplrecommend']['brands'][] = array( 'href' => $val['url'], 'name' => $val['title'], 'img' => $val['img'] ); } else { $val['img'] = Images::getImageUrl($val['img'], 185, 504, 1); // 小图 $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(); if ($data['focus_type'] == 1) { foreach ($data['data'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 1150, 450, 1); $val['url'] = Helpers::transUrl($val['url'], $type); $ret = array( 'href' => $val['url'], 'img' => $val['src'], ); if (!empty($val['bgColor'])) { $ret['bgColor'] = $val['bgColor']; } $temp[] = $ret; } $result['slide']['list'] = $temp; } return $result; } /** * boys焦点图处理 * * @param array $data * @param string $type * @return array */ public static function recommend_content_three(array $data, $type) { $result = array(); $temp = array(); if ($data['template_name'] == 'recommend_content_three') { foreach ($data['data']['big_image'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 1150, 450, 1); $val['url'] = Helpers::transUrl($val['url'], $type); $temp['list'][] = array( 'href' => $val['url'], 'img' => $val['src'], // 'bgColor'=> $val[] ); } foreach ($data['data']['list'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 138, 54, 1); $val['url'] = Helpers::transUrl($val['url'], $type); $temp['pagination'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } $result['slide'] = $temp; } return $result; } /** * 广告位 * * @param array $data * @param string $type * @return array */ public static function single_image(array $data, $type) { $result = array(); $temp = array(); if ($data['template_name'] == 'single_image') { $temp = array( 'href' => '', 'img' => '', 'name' => '' ); if (isset($data['data'][0])) { $val = $data['data'][0]; $temp['img'] = Images::getImageUrl($val['src'], 1150, 129, 1); $temp['href'] = $val['url']; $temp['name'] = $val['title']; $result['adbanner'] = $temp; } } return $result; } /** * 左右banner * * @param array $data * @param string $type */ public static function debrisSlider(array $data, $type) { $data = $data['data']; $result = array( 'debrisSlider' => array( 'left' => array(), 'center' => array(), 'right' => array() ) ); foreach ($data['left'] as $val) { $val['img'] = Images::getImageUrl($val['img'], 280, 265, 1); $result['debrisSlider']['left'][] = array( 'img' => $val['img'], 'href' => $val['url'], 'name' => $val['title'] ); } foreach ($data['center'] as $val) { $val['img'] = Images::getImageUrl($val['img'], 570, 633, 1); $result['debrisSlider']['center'][] = array( 'img' => $val['img'], 'href' => $val['url'], 'name' => $val['title'] ); } foreach ($data['right'] as $val) { $val['img'] = Images::getImageUrl($val['img'], 280, 449, 1); $result['debrisSlider']['right'][] = array( 'img' => $val['img'], 'href' => $val['url'], 'name' => $val['title'] ); } return $result; } /** * 组合数据处理 * * @param array $data * @param string $type * @return array */ public static function mergeProcess(array &$data, $type) { $result = array(); $mergeProcessList = array( 'mergeSinglehotData', 'mergePreferenceBrandsData', 'mergeAccordionData', 'mergeCategoryData', 'mergeNewReportData', 'mergeSinglehotData2', 'mergeHotCategoryData', 'mergeGirlkidsData', 'mergeHotBrandsData' ); $temp = array(); foreach ($data as $key => $val) { foreach ($mergeProcessList as $merge) { if (isset($data[$key])) { $temp = self::$merge($key, $data, $type); if (!empty($temp)) { $result[$key] = $temp; } } } } return $result; } /** * 组合人气单品 [ * template: text & textNav & goods & floor || * textNav & goods & floor || * text & textNav & goods & app_icon_list * ] * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergeSinglehotData($key, array &$data, $type) { $result = array(); if ((isset($data[$key]) && isset($data[$key + 2])) || (isset($data[$key]) && isset($data[$key + 3]))) { $title = ''; $source = $goods = $floor = array(); if ($data[$key]['template_name'] == 'textNav' && $data[$key + 1]['template_name'] == 'goods' && $data[$key + 2]['template_name'] == 'floor') { $title = '人气单品 TOP100'; $source = $data[$key]; $goods = $data[$key + 1]; $floor = $data[$key + 2]; unset($data[$key], $data[$key + 1], $data[$key + 2]); } else if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'textNav' && $data[$key + 2]['template_name'] == 'goods' && $data[$key + 3]['template_name'] == 'floor') { $title = $data[$key]['data']['text']; $source = $data[$key + 1]; $goods = $data[$key + 2]; $floor = $data[$key + 3]; unset($data[$key], $data[$key + 1], $data[$key + 2], $data[$key + 3]); } else if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'textNav' && $data[$key + 2]['template_name'] == 'goods' && $data[$key + 3]['template_name'] == 'app_icon_list') { $title = $data[$key]['data']['text']; $source = $data[$key + 1]; $goods = $data[$key + 2]; $floor = $data[$key + 3]; unset($data[$key], $data[$key + 1], $data[$key + 2], $data[$key + 3]); } if (!empty($source) && !empty($floor)) { $result = array( 'singlehot' => array( 'name' => '', 'imgHot' => array(), 'brands' => array(), 'navs' => array(), ) ); // text模版 $result['singlehot']['name'] = $title; //textNav模版 $result['singlehot']['navs'] = self::mergeNavProcess($source, $type); // goods模版 $result['singlehot']['imgHot'] = self::mergeGoodsProcess($goods, $type); // floor模版 foreach ($floor['data'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 185, 86, 1); $val['url'] = Helpers::transUrl($val['url'], $type); $result['singlehot']['brands'][] = array( 'href' => $val['url'], 'img' => $val['src'], 'name' => $val['title'] ); } } } return $result; } /** * 组合人气单品 [template: text & small_pic & floor ] * * @return array */ public static function mergeSinglehotData2($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 2])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'small_pic' && $data[$key + 2]['template_name'] == 'floor') { $result = array( 'singlehot' => array( 'name' => '', 'imgHot' => array() ) ); // text $result['singlehot']['name'] = $data[$key]['data']['text']; $len = 10; // small_pic foreach ($data[$key + 1]['data'] as &$val) { $val['src'] = Images::getImageUrl($val['src'], 378, 248, 1); } //floor foreach ($data[$key + 2]['data'] as &$val) { $val['src'] = Images::getImageUrl($val['src'], 185, 248, 1); } for ($i = 0; $i < $len; $i ++) { $pos = $i; if ($i == 1) { $val = $data[$key + 1]['data'][0]; // 第二个是大图 } else if ($i == $len - 1) { $val = $data[$key + 1]['data'][1]; // 最后一个是大图 } else { if ($pos > 1) { // 小图 $pos = $pos - 1; } $val = $data[$key + 2]['data'][$pos]; } $result['singlehot']['imgHot'][] = array( 'href' => $val['url'], 'img' => $val['src'], 'name' => $val['alt'] ); } unset($data[$key], $data[$key + 1], $data[$key + 2]); } } return $result; } /** * 组合优选品牌数据 [ template: text & focus & floor] * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergePreferenceBrandsData($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 2])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'focus' && ($data[$key + 2]['template_name'] == 'floor' || $data[$key + 2]['template_name'] == 'app_icon_list')) { //slider颜色 $sliderColor = array('girls' => '#8ae6e0', 'kids' => '#7AD3F8', 'lifestyle' => '#4e433d', 'boys' => ''); $result = array( 'preferenceBrands' => array( 'name' => '', 'sliderColor' => $sliderColor[$type], 'imgBrand' => array(), 'brandUrl' => '' ) ); // text模版 $result['preferenceBrands']['name'] = $data[$key]['data']['text']; // focus模版 $width = 0; $height = 0; foreach ($data[$key + 1]['data'] as $val) { if ($type == 'boys') { $width = 378; $height = 175; } else { $width = 320; $height = 430; } $val['src'] = Images::getImageUrl($val['src'], $width, $height, 1); $val['url'] = Helpers::transUrl($val['url'], $type); $result['preferenceBrands']['imgBrand'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } // floor模版 $floor = array( 'logoBrand' => '', 'moreBrand' => '' ); foreach ($data[$key + 2]['data'] as $val) { $width = 185; $height = 86; $val['src'] = Images::getImageUrl($val['src'], $width, $height, 2); $val['url'] = Helpers::transUrl($val['url'], $type); $floor['logoBrand'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } // textNav模版 if (isset($data[$key + 3]['data'][0]['url']) && $data[$key + 3]['template_name'] == 'textNav') { $floor['moreBrand'] = $data[$key + 3]['data'][0]['url']; unset($data[$key + 3]); } $typeKey = sprintf("%s_%s", $type, $key + 2); $cacheKey = sprintf("%s_%s", WebCacheConfig::KEY_WEB_INDEX_BRANDS_LIST_DATA, $typeKey); Cache::set($cacheKey, $floor, 86400); $result['preferenceBrands']['brandUrl'] = Helpers::url('/common/getIndexResourceBrand', array('type' => $typeKey)); unset($data[$key], $data[$key + 1], $data[$key + 2]); } } return $result; } /** * 组合girlkids数据 [ template: text & textNav & goods] * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergeGirlkidsData($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 2])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 2]['template_name'] == 'goods') { $result = array( 'girlkids' => array( 'name' => '', 'imgHot' => array() ) ); // text $result['girlkids']['name'] = $data[$key]['data']['text']; // goods $result['girlkids']['imgHot'] = self::mergeGoodsProcess($data[$key + 2], $type); unset($data[$key], $data[$key + 1], $data[$key + 2]); } } return $result; } /** * 组合accordion数据 [ template: text & textNav & focus ] * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergeAccordionData($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 2])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'textNav' && $data[$key + 2]['template_name'] == 'focus') { $result = array( 'accordion' => array( 'name' => '', 'navs' => array(), 'slide' => array() ) ); $result['accordion']['name'] = $data[$key]['data']['text']; // textNav模版 if (!empty($data[$key + 1]['data'])) { $result['accordion']['navs'] = self::mergeNavProcess($data[$key + 1], $type); } // focus模版 foreach ($data[$key + 2]['data'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 650, 400, 1); $result['accordion']['slide'][] = array( 'href' => $val['url'], 'img' => $val['src'], 'name' => $val['title'] ); } unset($data[$key], $data[$key + 1], $data[$key + 2]); } } return $result; } /** * 组合boys最新速报数据 [ template: text & single_image & floor & single_image] * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergeNewReportData($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 3])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'single_image' && $data[$key + 2]['template_name'] == 'floor' && $data[$key + 3]['template_name'] == 'single_image') { $result = array( 'newReport' => array( 'name' => '', 'list' => array() ) ); // text $result['newReport']['name'] = $data[$key]['data']['text']; // single_image & floor & single_image $list = array_merge($data[$key + 1]['data'], array_slice($data[$key + 2]['data'], 0, 6), $data[$key + 3]['data']); foreach ($list as $listKey => $val) { if ($listKey == 0 || $listKey == 7) { $val['src'] = Images::getImageUrl($val['src'], 377, 504, 1); $result['newReport']['list'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } else { $val['src'] = Images::getImageUrl($val['src'], 185, 248, 1); $result['newReport']['list'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } } unset($data[$key], $data[$key + 1], $data[$key + 2], $data[$key + 3]); } } return $result; } /** * 组合category数据 [template: text & textNav & floor ] * * @param array $data * @param string $type * @return array */ public static function mergeCategoryData($key, array &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 2])) { if ($data[$key]['template_name'] == 'text' && $data[$key + 1]['template_name'] == 'textNav' && $data[$key + 2]['template_name'] == 'floor') { $result = array( 'category' => array( 'name' => '', 'navs' => array(), 'list' => array() ) ); // text模版 $result['category']['name'] = $data[$key]['data']['text']; // textNav模版 if (!empty($data[$key + 1]['data'])) { $result['category']['navs'] = self::mergeNavProcess($data[$key + 1], $type); } // floor模版 $width = 0; $height = 0; foreach ($data[$key + 2]['data'] as $pos => $val) { $width = 185; $height = 510; if ($pos == 1) { $width = 377; $height = 504; } $val['src'] = Images::getImageUrl($val['src'], $width, $height, 2); $val['url'] = Helpers::transUrl($val['url'], $type); $result['category']['list'][] = array( 'href' => $val['url'], 'img' => $val['src'], 'name' => $val['title'] ); } unset($data[$key], $data[$key + 1], $data[$key + 2]); } } return $result; } /** * 组合HotCategory数据 [template: hotCategory & floor] 首页使用 * * @param string $key * @param array $data * @param string $type * @return array */ public static function mergeHotCategoryData($key, &$data, $type) { $result = array(); if (isset($data[$key]) && isset($data[$key + 1])) { if ($data[$key]['template_name'] == 'hotCategory' && $data[$key + 1]['template_name'] == 'floor') { $result = array( 'name' => '', 'navs' => array(), 'tplrecommend' => array( 'keyword' => array(), 'category' => array(), 'brands' => array(), 'types' => array(), 'products' => array() ) ); // hotCategory模版 $temp = self::hotCategory($data[$key], $type); $temp = $temp['recommend']; $result['name'] = $temp['name']; $result['navs'] = $temp['navs']; $result['tplrecommend']['keyword'] = $temp['tplrecommend']['keyword']; $result['tplrecommend']['category'] = $temp['tplrecommend']['category']; foreach ($data[$key]['data']['imgs'] as $key2 => $val) { $val['url'] = Helpers::transUrl($val['url'], $type); if ($key2 == 0 || $key2 == 4) { // 两个大图 $val['img'] = Images::getImageUrl($val['img'], 378, 248, 1); // 大图 $result['tplrecommend']['brands'][] = array( 'href' => $val['url'], 'name' => $val['title'], 'img' => $val['img'] ); } else { $val['img'] = Images::getImageUrl($val['img'], 185, 248, 1); // 小图 $result['tplrecommend']['types'][] = array( 'href' => $val['url'], 'name' => $val['title'], 'img' => $val['img'] ); } } // floor模版 foreach ($data[$key + 1]['data'] as $val) { $val['src'] = Images::getImageUrl($val['src'], 222, 298, 1); // 小图 $result['tplrecommend']['products'][] = array( 'href' => $val['url'], 'name' => $val['title'], 'img' => $val['src'] ); } unset($data[$key], $data[$key + 1]); $result = array( 'recommend' => $result ); } } return $result; } /** * 组合之nav处理 * * @param array $data * @param string $type * @return array */ public static function mergeNavProcess(array $data, $type) { $result = array(); foreach ($data['data'] as $val) { if (empty($val)) { continue; } $result[] = array( 'href' => $val['url'], 'name' => $val['name'] ); } return $result; } /** * 组合之商品处理 * * @param array $data * @param string $type * @return array */ public static function mergeGoodsProcess(array $data, $type) { $result = array(); $skns = ''; foreach ($data['data'] as $val) { $skns .= $val['id'] . ' '; } $params = array( 'query' => rtrim($skns), 'client_type' => 'web' ); $goodsList = SearchData::searchElasticByCondition($params, false); $goodsList = empty($goodsList) ? array() : $goodsList['data']['product_list']; $pos = 0; $url = ''; $oneGoods = array(); foreach ($goodsList as $goods) { $oneGoods = array(); $pos ++; if ($pos > 12) { break; } if (empty($goods)) { continue; } $url = Helpers::getUrlBySkc($goods['product_id'], $goods['goods_list'][0]['goods_id'], $goods['cn_alphabet']); $oneGoods['img'] = Images::getImageUrl($goods['goods_list'][0]['images_url'], 280, 373, 1); $oneGoods['name'] = $goods['product_name']; $oneGoods['price'] = $goods['sales_price']; $oneGoods['href'] = Helpers::transUrl($url, $type); $result[$goods['product_skn']] = $oneGoods; } // 排序 uksort($result, function ($a, $b) use($skns) { $skn_arr = explode(' ', $skns); return array_search($a, $skn_arr) > array_search($b, $skn_arr); }); $pos = 1; //添加TOP标示 foreach ($result as &$val) { if ($pos < 4) { $val['tip'] = 'TOP' . $pos; } else { break; } $pos ++; } return $result; } /** * 热门品牌数据处理 * * @param array $data * @param string $type */ public static function mergeHotBrandsData($key, array &$data, $type) { $result = array(); if ($data[$key]['template_name'] == 'custom_brands') { $result = array( 'hotBrands' => array( 'name' => '', 'brandUrl' => '' ) ); // text模版 $result['hotBrands']['name'] = '热门品牌'; //floor模板 $floor = array( 'logoBrand' => '', 'moreBrand' => '' ); $brands = $data[$key]['data']['list']; foreach ($brands as $val) { $val['src'] = Images::getImageUrl($val['src'], 185, 86, 2); $val['url'] = Helpers::transUrl($val['url'], $type); $floor['logoBrand'][] = array( 'href' => $val['url'], 'img' => $val['src'] ); } $floor['moreBrand'] = Helpers::url('/brands'); $typeKey = sprintf("%s_%s", $type, $key); $cacheKey = sprintf("%s_%s", WebCacheConfig::KEY_WEB_INDEX_BRANDS_LIST_DATA, $typeKey); Cache::set($cacheKey, $floor, 86400); $result['hotBrands']['brandUrl'] = Helpers::url('/common/getIndexResourceBrand', array('type' => $typeKey)); } return $result; } }