|
|
<?php
|
|
|
namespace Product;
|
|
|
|
|
|
use Api\Yohobuy;
|
|
|
use Configs\WebCacheConfig;
|
|
|
use WebPlugin\Helpers;
|
|
|
use WebPlugin\HelperSearch;
|
|
|
use WebPlugin\Images;
|
|
|
use WebPlugin\Cache;
|
|
|
use LibModels\Web\Product\SearchData;
|
|
|
use Index\HomeModel;
|
|
|
|
|
|
/**
|
|
|
* sale首页模板数据模型
|
|
|
*
|
|
|
* @name SaleModel
|
|
|
* @package models
|
|
|
* @copyright yoho.inc
|
|
|
* @version 1.0 (2015-12-17 13:54:56)
|
|
|
* @author sefon
|
|
|
*/
|
|
|
class SearchModel
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
* 搜索相关页面公共条件处理
|
|
|
*
|
|
|
* @param $param array(
|
|
|
* 'brand' => int (品牌页必传)
|
|
|
* 'promotion' => int (sale页必传)
|
|
|
* 'new' => string (new页必传)
|
|
|
* 'folder_id' => string (搜索品牌系列参数,品牌页选传)
|
|
|
* ...(用户输入的参数,如没有可不传)
|
|
|
* )
|
|
|
* @param $option array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ...(其他一些排序参数,如没有可不传)
|
|
|
* )
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchCondition($param = array(), $option = array())
|
|
|
{
|
|
|
$data = array();
|
|
|
/* 过滤请求参数 */
|
|
|
$condition = filter_input_array(INPUT_GET, array(
|
|
|
'query' => FILTER_FLAG_NO_ENCODE_QUOTES ,
|
|
|
'keyword' => FILTER_FLAG_NO_ENCODE_QUOTES ,
|
|
|
'brand' => FILTER_SANITIZE_STRING,
|
|
|
'sort' => FILTER_VALIDATE_INT,
|
|
|
'category' => FILTER_VALIDATE_INT,
|
|
|
'channel' => FILTER_VALIDATE_INT,
|
|
|
'msort' => FILTER_SANITIZE_STRING,
|
|
|
'misort' => FILTER_SANITIZE_STRING,
|
|
|
'color' => FILTER_VALIDATE_INT,
|
|
|
'size' => FILTER_DEFAULT,
|
|
|
'style' => FILTER_DEFAULT,
|
|
|
'price' => FILTER_DEFAULT,
|
|
|
'gender' => FILTER_SANITIZE_STRING,
|
|
|
'p_d' => FILTER_DEFAULT,
|
|
|
'shelve_time' => FILTER_DEFAULT,
|
|
|
'new' => FILTER_DEFAULT,
|
|
|
'specialoffer' => FILTER_DEFAULT,
|
|
|
'limited' => FILTER_DEFAULT,
|
|
|
'order' => FILTER_DEFAULT,
|
|
|
'viewNum' => FILTER_VALIDATE_INT,
|
|
|
'rowNum' => FILTER_VALIDATE_INT,
|
|
|
'specialsale_id' => FILTER_VALIDATE_INT,
|
|
|
'new' => FILTER_SANITIZE_STRING,
|
|
|
'series_id' => FILTER_VALIDATE_INT,
|
|
|
'series' => FILTER_VALIDATE_INT,
|
|
|
'folder_id' => FILTER_VALIDATE_INT,
|
|
|
'page' => FILTER_VALIDATE_INT), false);
|
|
|
//接收高级选项
|
|
|
foreach ($_GET as $key =>$val) {
|
|
|
if (strpos($key, 'parameter_') !== false) {
|
|
|
$condition[$key] = (int) $val;
|
|
|
}
|
|
|
}
|
|
|
//keyword=>query关键字
|
|
|
if (isset($condition['keyword']) && !empty($condition['keyword'])) {
|
|
|
$condition['query'] = rawurldecode($condition['keyword']);
|
|
|
}
|
|
|
//关键字
|
|
|
if (isset($condition['query']) && !empty($condition['query'])) {
|
|
|
$condition['query'] = rawurldecode($condition['query']);
|
|
|
$condition['query'] = HelperSearch::stripTags($condition['query']);
|
|
|
}
|
|
|
$data['userInput'] = $condition;
|
|
|
//品牌
|
|
|
if (isset($condition['brand']) && !empty($condition['brand'])) {
|
|
|
$condition['brand'] = rawurldecode($condition['brand']);
|
|
|
}
|
|
|
|
|
|
//性别
|
|
|
if (isset($condition['gender']) && !empty($condition['gender'])) {
|
|
|
$condition['gender'] = rawurldecode($condition['gender']);
|
|
|
} else {
|
|
|
$condition['gender'] = '';
|
|
|
}
|
|
|
//每页显示商品数
|
|
|
$viewNumArray = array(60, 100, 200);
|
|
|
if(!isset($condition['viewNum']) || empty($condition['viewNum'])){
|
|
|
$condition['viewNum'] =60;
|
|
|
}
|
|
|
if (!in_array($condition['viewNum'], $viewNumArray)) {
|
|
|
$condition['viewNum'] = 60;
|
|
|
}
|
|
|
//每行显示的商品数量
|
|
|
if(!isset($condition['rowNum']) || empty($condition['rowNum'])){
|
|
|
$condition['rowNum'] =5;
|
|
|
}
|
|
|
if ($condition['rowNum'] == 6) {
|
|
|
$imgSize = array(195, 260);
|
|
|
$minImgSize = array(50, 67);
|
|
|
}
|
|
|
else {
|
|
|
$condition['rowNum'] = 5;
|
|
|
$imgSize = array(235, 314);
|
|
|
$minImgSize = array(60, 80);
|
|
|
}
|
|
|
//自定义搜索价格
|
|
|
if (isset($condition['price']) && !empty($condition['price'])) {
|
|
|
$price = explode(',', $condition['price']);
|
|
|
if (!$price[0]) {
|
|
|
$price[0] = 0;
|
|
|
}
|
|
|
if (!isset($price[1]) || empty($price[1])) {
|
|
|
$price[1] = 99999;
|
|
|
}
|
|
|
$condition['price'] = implode(',', $price);
|
|
|
}
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 1;
|
|
|
//过滤赠品
|
|
|
$condition['attribute_not'] = 2;
|
|
|
//默认排序
|
|
|
if (!isset($condition['order']) || empty($condition['order'])) {
|
|
|
//如果新品到着没传排序方式,默认按s_t_desc(新品)顺序排序
|
|
|
if ($option['controller'] == 'List' && $option['action'] == 'new') {
|
|
|
$condition['order'] = 's_t_desc';
|
|
|
}else{
|
|
|
$condition['order'] = 's_n_desc';
|
|
|
}
|
|
|
}
|
|
|
$options = array(
|
|
|
'imgSize' => $imgSize,
|
|
|
'minImgSize' => $minImgSize,
|
|
|
'rowNum' =>$condition['rowNum'],
|
|
|
'viewNum' =>$condition['viewNum'],
|
|
|
);
|
|
|
|
|
|
//每页记录数减1,下一页占位
|
|
|
$condition['viewNum'] = $condition['viewNum'] - 1;
|
|
|
$condition = array_merge($condition, $param);
|
|
|
|
|
|
$data['condition'] = $condition;
|
|
|
$data['options'] = array_merge($options, $option);
|
|
|
//调用商品分类的参数
|
|
|
if (isset($condition['msort'])) {
|
|
|
unset($condition['msort']);
|
|
|
}
|
|
|
if (isset($condition['misort'])) {
|
|
|
unset($condition['misort']);
|
|
|
}
|
|
|
$data['sortCondition'] = $condition;
|
|
|
|
|
|
// 清空不再使用的变更
|
|
|
$condition = array();
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 搜索list-sale页数据
|
|
|
* @param $customCondition array(
|
|
|
* 'p_d' => string (如果没有传入折扣,则默认展示0.01~0.99折商品)
|
|
|
* )
|
|
|
* @param $customOptions array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ) 排序条件
|
|
|
* @return array() (处理后的list首页数据)
|
|
|
*/
|
|
|
public static function getListData($customCondition = array(), $customOptions = array())
|
|
|
{
|
|
|
$searchCondition = self::searchCondition($customCondition, $customOptions);
|
|
|
// 组合搜索商品url
|
|
|
$urlList['product'] = SearchData::getProductUrl($searchCondition['condition']);
|
|
|
// 组合搜索分类url
|
|
|
$sortCondition = array();
|
|
|
if (isset($searchCondition['condition']['misort']) && !empty($searchCondition['condition']['misort'])) {
|
|
|
$sortCondition['needSmallSort'] = 1;
|
|
|
}
|
|
|
$urlList['sort'] = SearchData::getClassesUrl($sortCondition);
|
|
|
// 组合搜索折扣区间url
|
|
|
$urlList['discount'] = SearchData::getDiscountUrl();
|
|
|
$data = Yohobuy::getMulti($urlList);
|
|
|
// 组织模板数据
|
|
|
$result = HelperSearch::getList($data, $searchCondition['options'], $searchCondition['userInput']);
|
|
|
|
|
|
// 清空不使用的变量
|
|
|
$searchCondition = array();
|
|
|
$data = array();
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 搜索页面获取搜索数据
|
|
|
*
|
|
|
* @param $customCondition array() 搜索条件
|
|
|
* @param $customOptions array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ) 排序条件
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchData($customCondition, $customOptions)
|
|
|
{
|
|
|
$searchCondition = self::searchCondition($customCondition, $customOptions);
|
|
|
$urlList = array();
|
|
|
// 组合搜索商品url
|
|
|
$urlList['product'] = SearchData::getProductUrl($searchCondition['condition']);
|
|
|
// 组合搜索分类url
|
|
|
$urlList['sort'] = SearchData::getClassesUrl(array_merge($searchCondition['sortCondition'],array('needSmallSort'=>1)));
|
|
|
// 组合搜索店铺url
|
|
|
if (isset($searchCondition['condition']['query'])) {
|
|
|
$param['keyword'] = $searchCondition['condition']['query'];
|
|
|
$urlList['shop'] = SearchData::getShopUrl($param);
|
|
|
}
|
|
|
$data = Yohobuy::getMulti($urlList);
|
|
|
//获取品牌商品分类
|
|
|
if (isset($data['shop']) && !empty($data['shop'])) {
|
|
|
$shopSortParam['brand'] = $data['shop']['id'];
|
|
|
$shopSort = SearchData::getClassesData($shopSortParam);
|
|
|
if (isset($shopSort['code']) && $shopSort['code'] == 200) {
|
|
|
$data['shopSort'] = $shopSort['data']['sort'];
|
|
|
}
|
|
|
}
|
|
|
// 组织模板数据
|
|
|
$result = HelperSearch::getList($data, $searchCondition['options'], $searchCondition['userInput']);
|
|
|
|
|
|
// 清空不使用的变量
|
|
|
$searchCondition = array();
|
|
|
$data = array();
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
/**
|
|
|
* 根据product_sn查询产品图片信息
|
|
|
*
|
|
|
* @param $productSkn
|
|
|
* @param $options array()
|
|
|
* @param $goodsId 封面图对应的goodsId
|
|
|
* @author sefon 2015-12-28 18:09:28
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function getProductPic($productSkn, $options, $goodsId)
|
|
|
{
|
|
|
$condition = array();
|
|
|
$condition['query'] = $productSkn;
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 0;
|
|
|
//获取产品数据
|
|
|
$data = SearchData::searchElasticByCondition($condition);
|
|
|
if (isset($data['code']) && $data['code'] === 200 && !empty($data['data']['product_list'])) {
|
|
|
//组织数据结构
|
|
|
$data = HelperSearch::getProductPic($data['data']['product_list'], $options, $goodsId);
|
|
|
}
|
|
|
else {
|
|
|
$data = array();
|
|
|
}
|
|
|
$res = array('pics' => $data);
|
|
|
|
|
|
return $res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询搜索提示
|
|
|
*
|
|
|
* @param $query
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function getSuggest($query)
|
|
|
{
|
|
|
$data = '';
|
|
|
$result = SearchData::getSuggest($query);
|
|
|
if (isset($result['code']) && $result['code'] == 200 && !empty($result['suggest']['items'])) {
|
|
|
$data = array();
|
|
|
$link = '';
|
|
|
foreach ($result['suggest']['items'] as $v) {
|
|
|
$link = Helpers::url('', array('query' => $v['item']), 'search');
|
|
|
$data[] = '<li><a style="display: block;" href="' . $link . '" class="clearfix clear search-item" title="'.$v['item'].'" act="' . $link . '"><span class="searchvalue" >'.$v['item'].'</span><span class="valuenum">约'.$v['frequency'].'个商品</span></a></li>';
|
|
|
}
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取分类的尺码
|
|
|
*/
|
|
|
public static function getSortSize($condition)
|
|
|
{
|
|
|
//当前页面的搜索条件
|
|
|
$old = array();
|
|
|
$url = explode('?', $_SERVER['HTTP_REFERER']);
|
|
|
if (isset($url[1])) {
|
|
|
$old = explode('&', $url[1]);
|
|
|
}
|
|
|
if (!empty($old)) {
|
|
|
foreach ($old as $val) {
|
|
|
$con = explode('=', $val);
|
|
|
if ($con[0] == 'channel' && in_array($con[1], array(1,2))) {
|
|
|
$condition['gender'] = urldecode($con[1]);
|
|
|
} else {
|
|
|
$condition[$con[0]] = urldecode($con[1]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//分类,把销售分类转为物理分类
|
|
|
if (isset($condition['msort']) && !empty($condition['msort'])) {
|
|
|
$category = self::getRelateSort();
|
|
|
$condition['sort'] = $category[$condition['msort']]['sort'];
|
|
|
}
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 1;
|
|
|
$condition['viewNum'] = 1;
|
|
|
unset($condition['msort']);
|
|
|
$result = SearchData::searchElasticByCondition($condition);
|
|
|
if (isset($result['code']) && $result['code'] == 200 && isset($result['data']['filter']) && !empty($result['data']['filter'])) {
|
|
|
return HelperSearch::size($result['data']['filter'], true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $keyword
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchError($keyword)
|
|
|
{
|
|
|
$keyword = HelperSearch::stripTags($keyword);
|
|
|
$keyword = HelperSearch::mbSubstr($keyword, 300);
|
|
|
$data = array(
|
|
|
//初始化js
|
|
|
'searchListPage' => true,
|
|
|
'search' => array(
|
|
|
'keyWord' => $keyword,
|
|
|
'searchActionUrl' => 'http://search.yohobuy.com',
|
|
|
'latestWalk' => 7,
|
|
|
'pathNav' => Array(
|
|
|
'0'=>array(
|
|
|
'href' => '/',
|
|
|
'name' => '首页'
|
|
|
),
|
|
|
'1'=>array(
|
|
|
'name' => '搜索“<span id="nav_keyword">'.$keyword.'</span>”共<span id="nav_keyword_count">0</span>个结果'
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
);
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 浏览记录(根据skn查询浏览记录商品信息)
|
|
|
* @param string $skn (多个skn,','号隔开)
|
|
|
* @return array
|
|
|
* @return int $limit
|
|
|
* @autor sefon 2016-4-18 16:06:06
|
|
|
*/
|
|
|
public static function historyProduct($skn, $limit)
|
|
|
{
|
|
|
$result = array();
|
|
|
$param['query'] = implode(',', $skn);
|
|
|
$skn = array_flip($skn);
|
|
|
$param['viewNum'] = $limit;
|
|
|
$data = SearchData::searchElasticByCondition($param);
|
|
|
if (!isset($data['code']) || $data['code'] != 200 || !isset($data['data']['product_list']) || empty($data['data']['product_list'])) {
|
|
|
return $result;
|
|
|
}
|
|
|
foreach ($data['data']['product_list'] as $key => $productVal) {
|
|
|
$product = array();
|
|
|
$backUp = array();
|
|
|
foreach ($productVal['goods_list'] as $goodsVal) {
|
|
|
if ($goodsVal['is_default'] == 'Y') {
|
|
|
$product['default_goods'] = $goodsVal['goods_id'];
|
|
|
$product['default_image'] = $goodsVal['images_url'];
|
|
|
break;
|
|
|
}
|
|
|
$backUp['default_goods'] = $goodsVal['goods_id'];
|
|
|
$backUp['default_image'] = $goodsVal['images_url'];
|
|
|
}
|
|
|
if (empty($product['default_goods'])) {
|
|
|
$product = $backUp;
|
|
|
}
|
|
|
$product['url'] = Helpers::getUrlBySkc($productVal['product_id'], $product['default_goods'], $productVal['cn_alphabet']);
|
|
|
$product['pic_url'] = Images::getImageUrl($product['default_image'], 150, 200);
|
|
|
$product['market_price'] = $productVal['market_price'] != $productVal['sales_price'] ? $productVal['market_price'] : '';
|
|
|
$product['price'] = $productVal['sales_price'];
|
|
|
$product['product_name'] = $productVal['product_name'];
|
|
|
unset($product['default_goods']);
|
|
|
unset($product['default_image']);
|
|
|
$result[$skn[$productVal['product_skn']]] = $product;
|
|
|
}
|
|
|
ksort($result);
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
<?php
|
|
|
namespace Product;
|
|
|
|
|
|
use Api\Yohobuy;
|
|
|
use Configs\WebCacheConfig;
|
|
|
use WebPlugin\Helpers;
|
|
|
use WebPlugin\HelperSearch;
|
|
|
use WebPlugin\Images;
|
|
|
use WebPlugin\Cache;
|
|
|
use LibModels\Web\Product\SearchData;
|
|
|
use Index\HomeModel;
|
|
|
|
|
|
/**
|
|
|
* sale首页模板数据模型
|
|
|
*
|
|
|
* @name SaleModel
|
|
|
* @package models
|
|
|
* @copyright yoho.inc
|
|
|
* @version 1.0 (2015-12-17 13:54:56)
|
|
|
* @author sefon
|
|
|
*/
|
|
|
class SearchModel
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
* 搜索相关页面公共条件处理
|
|
|
*
|
|
|
* @param $param array(
|
|
|
* 'brand' => int (品牌页必传)
|
|
|
* 'promotion' => int (sale页必传)
|
|
|
* 'new' => string (new页必传)
|
|
|
* 'folder_id' => string (搜索品牌系列参数,品牌页选传)
|
|
|
* ...(用户输入的参数,如没有可不传)
|
|
|
* )
|
|
|
* @param $option array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ...(其他一些排序参数,如没有可不传)
|
|
|
* )
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchCondition($param = array(), $option = array())
|
|
|
{
|
|
|
$data = array();
|
|
|
/* 过滤请求参数 */
|
|
|
$condition = filter_input_array(INPUT_GET, array(
|
|
|
'query' => FILTER_FLAG_NO_ENCODE_QUOTES ,
|
|
|
'keyword' => FILTER_FLAG_NO_ENCODE_QUOTES ,
|
|
|
'brand' => FILTER_SANITIZE_STRING,
|
|
|
'sort' => FILTER_VALIDATE_INT,
|
|
|
'category' => FILTER_VALIDATE_INT,
|
|
|
'channel' => FILTER_VALIDATE_INT,
|
|
|
'msort' => FILTER_SANITIZE_STRING,
|
|
|
'misort' => FILTER_SANITIZE_STRING,
|
|
|
'color' => FILTER_VALIDATE_INT,
|
|
|
'size' => FILTER_DEFAULT,
|
|
|
'style' => FILTER_DEFAULT,
|
|
|
'price' => FILTER_DEFAULT,
|
|
|
'gender' => FILTER_SANITIZE_STRING,
|
|
|
'p_d' => FILTER_DEFAULT,
|
|
|
'shelve_time' => FILTER_DEFAULT,
|
|
|
'new' => FILTER_DEFAULT,
|
|
|
'specialoffer' => FILTER_DEFAULT,
|
|
|
'limited' => FILTER_DEFAULT,
|
|
|
'order' => FILTER_DEFAULT,
|
|
|
'viewNum' => FILTER_VALIDATE_INT,
|
|
|
'rowNum' => FILTER_VALIDATE_INT,
|
|
|
'specialsale_id' => FILTER_VALIDATE_INT,
|
|
|
'new' => FILTER_SANITIZE_STRING,
|
|
|
'series_id' => FILTER_VALIDATE_INT,
|
|
|
'series' => FILTER_VALIDATE_INT,
|
|
|
'folder_id' => FILTER_VALIDATE_INT,
|
|
|
'page' => FILTER_VALIDATE_INT), false);
|
|
|
//接收高级选项
|
|
|
foreach ($_GET as $key =>$val) {
|
|
|
if (strpos($key, 'parameter_') !== false) {
|
|
|
$condition[$key] = (int) $val;
|
|
|
}
|
|
|
}
|
|
|
//keyword=>query关键字
|
|
|
if (isset($condition['keyword']) && !empty($condition['keyword'])) {
|
|
|
$condition['query'] = rawurldecode($condition['keyword']);
|
|
|
}
|
|
|
//关键字
|
|
|
if (isset($condition['query']) && !empty($condition['query'])) {
|
|
|
$condition['query'] = rawurldecode($condition['query']);
|
|
|
$condition['query'] = HelperSearch::stripTags($condition['query']);
|
|
|
}
|
|
|
$data['userInput'] = $condition;
|
|
|
//品牌
|
|
|
if (isset($condition['brand']) && !empty($condition['brand'])) {
|
|
|
$condition['brand'] = rawurldecode($condition['brand']);
|
|
|
}
|
|
|
|
|
|
//性别
|
|
|
if (isset($condition['gender']) && !empty($condition['gender'])) {
|
|
|
$condition['gender'] = rawurldecode($condition['gender']);
|
|
|
} else {
|
|
|
$condition['gender'] = '';
|
|
|
}
|
|
|
//每页显示商品数
|
|
|
$viewNumArray = array(60, 100, 200);
|
|
|
if(!isset($condition['viewNum']) || empty($condition['viewNum'])){
|
|
|
$condition['viewNum'] =60;
|
|
|
}
|
|
|
if (!in_array($condition['viewNum'], $viewNumArray)) {
|
|
|
$condition['viewNum'] = 60;
|
|
|
}
|
|
|
//每行显示的商品数量
|
|
|
if(!isset($condition['rowNum']) || empty($condition['rowNum'])){
|
|
|
$condition['rowNum'] =5;
|
|
|
}
|
|
|
if ($condition['rowNum'] == 6) {
|
|
|
$imgSize = array(195, 260);
|
|
|
$minImgSize = array(50, 67);
|
|
|
}
|
|
|
else {
|
|
|
$condition['rowNum'] = 5;
|
|
|
$imgSize = array(235, 314);
|
|
|
$minImgSize = array(60, 80);
|
|
|
}
|
|
|
//自定义搜索价格
|
|
|
if (isset($condition['price']) && !empty($condition['price'])) {
|
|
|
$price = explode(',', $condition['price']);
|
|
|
if (!$price[0]) {
|
|
|
$price[0] = 0;
|
|
|
}
|
|
|
if (!isset($price[1]) || empty($price[1])) {
|
|
|
$price[1] = 99999;
|
|
|
}
|
|
|
$condition['price'] = implode(',', $price);
|
|
|
}
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 1;
|
|
|
//过滤赠品
|
|
|
$condition['attribute_not'] = 2;
|
|
|
//默认排序
|
|
|
if (!isset($condition['order']) || empty($condition['order'])) {
|
|
|
//如果新品到着没传排序方式,默认按s_t_desc(新品)顺序排序
|
|
|
if ($option['controller'] == 'List' && $option['action'] == 'new') {
|
|
|
$condition['order'] = 's_t_desc';
|
|
|
}else{
|
|
|
$condition['order'] = 's_n_desc';
|
|
|
}
|
|
|
}
|
|
|
$options = array(
|
|
|
'imgSize' => $imgSize,
|
|
|
'minImgSize' => $minImgSize,
|
|
|
'rowNum' =>$condition['rowNum'],
|
|
|
'viewNum' =>$condition['viewNum'],
|
|
|
);
|
|
|
|
|
|
//每页记录数减1,下一页占位
|
|
|
$condition['viewNum'] = $condition['viewNum'] - 1;
|
|
|
$condition = array_merge($condition, $param);
|
|
|
|
|
|
$data['condition'] = $condition;
|
|
|
$data['options'] = array_merge($options, $option);
|
|
|
//调用商品分类的参数
|
|
|
if (isset($condition['msort'])) {
|
|
|
unset($condition['msort']);
|
|
|
}
|
|
|
if (isset($condition['misort'])) {
|
|
|
unset($condition['misort']);
|
|
|
}
|
|
|
$data['sortCondition'] = $condition;
|
|
|
|
|
|
// 清空不再使用的变更
|
|
|
$condition = array();
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 搜索list-sale页数据
|
|
|
* @param $customCondition array(
|
|
|
* 'p_d' => string (如果没有传入折扣,则默认展示0.01~0.99折商品)
|
|
|
* )
|
|
|
* @param $customOptions array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ) 排序条件
|
|
|
* @return array() (处理后的list首页数据)
|
|
|
*/
|
|
|
public static function getListData($customCondition = array(), $customOptions = array())
|
|
|
{
|
|
|
$searchCondition = self::searchCondition($customCondition, $customOptions);
|
|
|
// 组合搜索商品url
|
|
|
$urlList['product'] = SearchData::getProductUrl($searchCondition['condition']);
|
|
|
// 组合搜索分类url
|
|
|
$sortCondition = array();
|
|
|
if (isset($searchCondition['condition']['misort']) && !empty($searchCondition['condition']['misort'])) {
|
|
|
$sortCondition['needSmallSort'] = 1;
|
|
|
}
|
|
|
$urlList['sort'] = SearchData::getClassesUrl($sortCondition);
|
|
|
// 组合搜索折扣区间url
|
|
|
$urlList['discount'] = SearchData::getDiscountUrl();
|
|
|
$data = Yohobuy::getMulti($urlList);
|
|
|
// 组织模板数据
|
|
|
$result = HelperSearch::getList($data, $searchCondition['options'], $searchCondition['userInput']);
|
|
|
|
|
|
// 清空不使用的变量
|
|
|
$searchCondition = array();
|
|
|
$data = array();
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 搜索页面获取搜索数据
|
|
|
*
|
|
|
* @param $customCondition array() 搜索条件
|
|
|
* @param $customOptions array(
|
|
|
* 'reviewNum' => int (底部浏览记录显示个数)
|
|
|
* 'controller' => string (说明当前控制器名)
|
|
|
* 'action' => string (说明当前方法名)
|
|
|
* ) 排序条件
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchData($customCondition, $customOptions)
|
|
|
{
|
|
|
$searchCondition = self::searchCondition($customCondition, $customOptions);
|
|
|
$urlList = array();
|
|
|
// 组合搜索商品url
|
|
|
$urlList['product'] = SearchData::getProductUrl($searchCondition['condition']);
|
|
|
// 组合搜索分类url
|
|
|
$urlList['sort'] = SearchData::getClassesUrl(array_merge($searchCondition['sortCondition'],array('needSmallSort'=>1)));
|
|
|
// 组合搜索店铺url
|
|
|
if (isset($searchCondition['condition']['query'])) {
|
|
|
$param['keyword'] = $searchCondition['condition']['query'];
|
|
|
$urlList['shop'] = SearchData::getShopUrl($param);
|
|
|
}
|
|
|
$data = Yohobuy::getMulti($urlList);
|
|
|
//获取品牌商品分类
|
|
|
if (isset($data['shop']) && !empty($data['shop'])) {
|
|
|
$shopSortParam['brand'] = $data['shop']['id'];
|
|
|
$shopSort = SearchData::getClassesData($shopSortParam);
|
|
|
if (isset($shopSort['code']) && $shopSort['code'] == 200) {
|
|
|
$data['shopSort'] = $shopSort['data']['sort'];
|
|
|
}
|
|
|
}
|
|
|
// 组织模板数据
|
|
|
$result = HelperSearch::getList($data, $searchCondition['options'], $searchCondition['userInput']);
|
|
|
|
|
|
// 清空不使用的变量
|
|
|
$searchCondition = array();
|
|
|
$data = array();
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
/**
|
|
|
* 根据product_sn查询产品图片信息
|
|
|
*
|
|
|
* @param $productSkn
|
|
|
* @param $options array()
|
|
|
* @author sefon 2015-12-28 18:09:28
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function getProductPic($productSkn, $options)
|
|
|
{
|
|
|
$condition = array();
|
|
|
$condition['query'] = $productSkn;
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 0;
|
|
|
//获取产品数据
|
|
|
$data = SearchData::searchElasticByCondition($condition);
|
|
|
if (isset($data['code']) && $data['code'] === 200 && !empty($data['data']['product_list'])) {
|
|
|
//组织数据结构
|
|
|
$data = HelperSearch::getProductPic($data['data']['product_list'], $options);
|
|
|
}
|
|
|
else {
|
|
|
$data = array();
|
|
|
}
|
|
|
$res = array('pics' => $data);
|
|
|
|
|
|
return $res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询搜索提示
|
|
|
*
|
|
|
* @param $query
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function getSuggest($query)
|
|
|
{
|
|
|
$data = '';
|
|
|
$result = SearchData::getSuggest($query);
|
|
|
if (isset($result['code']) && $result['code'] == 200 && !empty($result['suggest']['items'])) {
|
|
|
$data = array();
|
|
|
$link = '';
|
|
|
foreach ($result['suggest']['items'] as $v) {
|
|
|
$link = Helpers::url('', array('query' => $v['item']), 'search');
|
|
|
$data[] = '<li><a style="display: block;" href="' . $link . '" class="clearfix clear search-item" title="'.$v['item'].'" act="' . $link . '"><span class="searchvalue" >'.$v['item'].'</span><span class="valuenum">约'.$v['frequency'].'个商品</span></a></li>';
|
|
|
}
|
|
|
}
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取分类的尺码
|
|
|
*/
|
|
|
public static function getSortSize($condition)
|
|
|
{
|
|
|
//当前页面的搜索条件
|
|
|
$old = array();
|
|
|
$url = explode('?', $_SERVER['HTTP_REFERER']);
|
|
|
if (isset($url[1])) {
|
|
|
$old = explode('&', $url[1]);
|
|
|
}
|
|
|
if (!empty($old)) {
|
|
|
foreach ($old as $val) {
|
|
|
$con = explode('=', $val);
|
|
|
if ($con[0] == 'channel' && in_array($con[1], array(1,2))) {
|
|
|
$condition['gender'] = urldecode($con[1]);
|
|
|
} else {
|
|
|
$condition[$con[0]] = urldecode($con[1]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//分类,把销售分类转为物理分类
|
|
|
if (isset($condition['msort']) && !empty($condition['msort'])) {
|
|
|
$category = self::getRelateSort();
|
|
|
$condition['sort'] = $category[$condition['msort']]['sort'];
|
|
|
}
|
|
|
//返回搜索条件
|
|
|
$condition['needFilter'] = 1;
|
|
|
$condition['viewNum'] = 1;
|
|
|
unset($condition['msort']);
|
|
|
$result = SearchData::searchElasticByCondition($condition);
|
|
|
if (isset($result['code']) && $result['code'] == 200 && isset($result['data']['filter']) && !empty($result['data']['filter'])) {
|
|
|
return HelperSearch::size($result['data']['filter'], true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param $keyword
|
|
|
* @return array
|
|
|
*/
|
|
|
public static function searchError($keyword)
|
|
|
{
|
|
|
$keyword = HelperSearch::stripTags($keyword);
|
|
|
$keyword = HelperSearch::mbSubstr($keyword, 300);
|
|
|
$data = array(
|
|
|
//初始化js
|
|
|
'searchListPage' => true,
|
|
|
'search' => array(
|
|
|
'keyWord' => $keyword,
|
|
|
'searchActionUrl' => 'http://search.yohobuy.com',
|
|
|
'latestWalk' => 7,
|
|
|
'pathNav' => Array(
|
|
|
'0'=>array(
|
|
|
'href' => '/',
|
|
|
'name' => '首页'
|
|
|
),
|
|
|
'1'=>array(
|
|
|
'name' => '搜索“<span id="nav_keyword">'.$keyword.'</span>”共<span id="nav_keyword_count">0</span>个结果'
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
);
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 浏览记录(根据skn查询浏览记录商品信息)
|
|
|
* @param string $skn (多个skn,','号隔开)
|
|
|
* @return array
|
|
|
* @return int $limit
|
|
|
* @autor sefon 2016-4-18 16:06:06
|
|
|
*/
|
|
|
public static function historyProduct($skn, $limit)
|
|
|
{
|
|
|
$result = array();
|
|
|
$param['query'] = implode(',', $skn);
|
|
|
$skn = array_flip($skn);
|
|
|
$param['viewNum'] = $limit;
|
|
|
$data = SearchData::searchElasticByCondition($param);
|
|
|
if (!isset($data['code']) || $data['code'] != 200 || !isset($data['data']['product_list']) || empty($data['data']['product_list'])) {
|
|
|
return $result;
|
|
|
}
|
|
|
foreach ($data['data']['product_list'] as $key => $productVal) {
|
|
|
$product = array();
|
|
|
$backUp = array();
|
|
|
foreach ($productVal['goods_list'] as $goodsVal) {
|
|
|
if ($goodsVal['is_default'] == 'Y') {
|
|
|
$product['default_goods'] = $goodsVal['goods_id'];
|
|
|
$product['default_image'] = $goodsVal['images_url'];
|
|
|
break;
|
|
|
}
|
|
|
$backUp['default_goods'] = $goodsVal['goods_id'];
|
|
|
$backUp['default_image'] = $goodsVal['images_url'];
|
|
|
}
|
|
|
if (empty($product['default_goods'])) {
|
|
|
$product = $backUp;
|
|
|
}
|
|
|
$product['url'] = Helpers::getUrlBySkc($productVal['product_id'], $product['default_goods'], $productVal['cn_alphabet']);
|
|
|
$product['pic_url'] = Images::getImageUrl($product['default_image'], 150, 200);
|
|
|
$product['market_price'] = $productVal['market_price'] != $productVal['sales_price'] ? $productVal['market_price'] : '';
|
|
|
$product['price'] = $productVal['sales_price'];
|
|
|
$product['product_name'] = $productVal['product_name'];
|
|
|
unset($product['default_goods']);
|
|
|
unset($product['default_image']);
|
|
|
$result[$skn[$productVal['product_skn']]] = $product;
|
|
|
}
|
|
|
ksort($result);
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
} |
|
|
\ No newline at end of file |
...
|
...
|
|