search.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. <?php
  2. //use Shopnc\Tpl;
  3. defined('InShopNC') or exit('Access Invalid!');
  4. require_once (BASE_ROOT_PATH . '/helper/category_helper.php');
  5. require_once (BASE_ROOT_PATH . '/helper/history_helper.php');
  6. require_once (BASE_ROOT_PATH . '/helper/special_helper.php');
  7. require_once (BASE_ROOT_PATH . '/helper/goods_helper.php');
  8. require_once (BASE_ROOT_PATH . '/helper/search/tcp_client.php');
  9. require_once (BASE_ROOT_PATH . '/helper/search/util.php');
  10. define('MOBILE_SERVER',true);
  11. class search_param
  12. {
  13. private $mKeyWord;
  14. private $mBrandId;
  15. private $mHotId;
  16. public function __construct($param)
  17. {
  18. $this->mKeyWord = '';
  19. $this->mBrandId = 0;
  20. $this->mHotId = 0;
  21. if (!empty(trim($param['keyword'])))
  22. {
  23. $keywod = trim(urldecode($param['keyword']));
  24. if($this->check($keywod)) {
  25. $this->mKeyWord = trim(urldecode($param['keyword']));
  26. $helper = new history_helper();
  27. $helper->add_word($this->mKeyWord);
  28. }
  29. }
  30. if (intval($param['brand_id']) > 0) {
  31. $this->mBrandId = intval($param['brand_id']);
  32. }
  33. if (!empty(trim($param['hot_id']))) {
  34. $this->mHotId = intval($param['hot_id']);
  35. }
  36. }
  37. public function format()
  38. {
  39. if(empty($this->mKeyWord) && $this->mBrandId == 0 && $this->mHotId == 0) {
  40. return false;
  41. }
  42. else {
  43. $result = [];
  44. $result['keyword'] = $this->mKeyWord;
  45. $result['brand_id'] = $this->mBrandId;
  46. $result['hot_id'] = $this->mHotId;
  47. return $result;
  48. }
  49. }
  50. public function brand_id() {
  51. return $this->mBrandId;
  52. }
  53. private function mb_str_split( $string ) {
  54. return preg_split('/(?<!^)(?!$)/u', $string );
  55. }
  56. private function check($keyword)
  57. {
  58. $words = [];
  59. foreach ($this->mb_str_split($keyword) as $word)
  60. {
  61. if(search\filter::filter($word)) {
  62. $words[] = $word;
  63. }
  64. }
  65. if(empty($words)) {
  66. return false;
  67. } else {
  68. return true;
  69. }
  70. }
  71. }
  72. class searchControl extends mobileHomeControl
  73. {
  74. public function __construct()
  75. {
  76. parent::__construct();
  77. }
  78. public function indexOp()
  79. {
  80. $param = new search_param($_GET);
  81. $params = $param->format();
  82. if($params == false) {
  83. return self::outsuccess(array('special_list' => null,
  84. 'summary' => null,
  85. 'groupbuy' => null,
  86. 'limitime' => null,
  87. 'bundling' => null,
  88. 'mobile_page' => mobile_page(0)));
  89. } else {
  90. perfor_start();
  91. $result = search\tcp_client::instance()->get_result($params);
  92. perfor_end('search','tcp_client');
  93. }
  94. if(empty($result))
  95. {
  96. return self::outsuccess(array('special_list' => null,
  97. 'summary' => null,
  98. 'groupbuy' => null,
  99. 'limitime' => null,
  100. 'bundling' => null,
  101. 'mobile_page' => mobile_page(0)));
  102. }
  103. $cids = $result['cids'];
  104. $order = $this->order($_GET['sort'], $_GET['order']);
  105. $model_goods = Model('goods');
  106. $goods_list = $model_goods->getGoodsListByColorDistinct(array('goods_commonid' => array('in',$cids)),
  107. goods_helper::fieldstr, $order, $this->page_size());
  108. $page_count = $model_goods->gettotalpage();
  109. $model_goods->cls();
  110. if(empty($goods_list))
  111. {
  112. return self::outsuccess(array('special_list' => null,
  113. 'summary' => null,
  114. 'groupbuy' => null,
  115. 'limitime' => null,
  116. 'bundling' => null,
  117. 'mobile_page' => mobile_page($page_count)));
  118. }
  119. else
  120. {
  121. $blocks = [];
  122. if($this->page_no() == 1)
  123. {
  124. if($param->brand_id() != 0)
  125. {
  126. $block = special_helper::format_brand_sale($param->brand_id(),false);
  127. if(!empty($block)) {
  128. $blocks[] = $block;
  129. }
  130. } else {
  131. $block = special_helper::format_brand($result['brands']);
  132. if(!empty($block)) {
  133. $blocks[] = $block;
  134. }
  135. }
  136. $block = special_helper::format_category($result['hots']);
  137. if(!empty($block)) {
  138. $blocks[] = $block;
  139. }
  140. }
  141. foreach ($goods_list as $goods) {
  142. $goods_id = intval($goods['goods_id']);
  143. $goods_ids[] = $goods_id;
  144. }
  145. $block = special_helper::format_goods($goods_ids,"");
  146. $blocks[] = $block;
  147. $helper = new goods_helper();
  148. $ret = $helper->get_summaryex($goods_list,$related_goods);
  149. return self::outsuccess(array('special_list' => $blocks,
  150. 'summary' => $ret['summary'],
  151. 'groupbuy' => $ret['groupbuy'],
  152. 'limitime' => $ret['limitime'],
  153. 'bundling' => $ret['bundling'],
  154. 'mobile_page' => mobile_page($page_count)));
  155. }
  156. }
  157. private function order($field, $order)
  158. {
  159. if(empty($field)) {
  160. return 'is_own_shop desc,goods_click desc';
  161. }
  162. else
  163. {
  164. if(empty($order)) {
  165. $order = 'desc';
  166. } elseif($order == 'desc') {
  167. $order = 'desc';
  168. } else {
  169. $order = 'asc';
  170. }
  171. if ($field == 'salenum') {
  172. return 'goods_salenum desc';
  173. } elseif($field == 'price') {
  174. return 'goods_price ' . $order;
  175. } else {
  176. return 'goods_click desc';
  177. }
  178. }
  179. }
  180. public function suggest_wordsOp()
  181. {
  182. $keyword = $_GET['keyword'];
  183. if(empty($keyword)) {
  184. return self::outerr(errcode::ErrParamter);
  185. }
  186. else
  187. {
  188. $result = search\tcp_client::instance()->get_words($keyword);
  189. if($result == false) {
  190. $result = null;
  191. $pages = 0;
  192. } else {
  193. $result = $this->separate_page($result,$pages);
  194. }
  195. return self::outsuccess(array('words' => $result,'mobile_page' => mobile_page($pages)));
  196. }
  197. }
  198. public function historyOp()
  199. {
  200. $helper = new history_helper();
  201. $history = $helper->histories();
  202. $hot_search = @explode(',',C('hot_search'));
  203. $blocks = [];
  204. if(!empty($history)) {
  205. $blocks[] = special_helper::format_keyword($history,'历史搜索');
  206. }
  207. if(!empty($hot_search)) {
  208. $blocks[] = special_helper::format_keyword($hot_search,'热门搜索');
  209. }
  210. $guslike = $this->guesslike();
  211. if($guslike == false)
  212. {
  213. return self::outsuccess(array('special_list' => $blocks,
  214. 'mobile_page' => mobile_page(1)));
  215. }
  216. else
  217. {
  218. $gus_blocks = $guslike['special_list'];
  219. if(!empty($gus_blocks)) {
  220. $blocks[] = $gus_blocks[0];
  221. }
  222. $guslike['special_list'] = $blocks;
  223. $guslike['mobile_page'] = mobile_page(1);
  224. return self::outsuccess($guslike);
  225. }
  226. }
  227. public function guesslike()
  228. {
  229. // $goodslist = Model('goods_browse')->getGuessLikeGoods($_SESSION['member_id'],10);
  230. $goods_list = activity_helper::recomoned_goodsids();
  231. if(empty($goods_list)) {
  232. return false;
  233. }
  234. else
  235. {
  236. $goods_ids = [];
  237. $count = count($goods_list);
  238. $len = mt_rand(1,$count);
  239. for ($i = 0; $i < $len;)
  240. {
  241. $pos = intval(mt_rand(0,$count - 1));
  242. $gid = $goods_list[$pos];
  243. if(in_array($gid,$goods_ids)) {
  244. continue;
  245. } else {
  246. $goods_ids[] = $gid;
  247. }
  248. if($len == count($goods_ids)) {
  249. break;
  250. }
  251. }
  252. // foreach ($goodslist as $value)
  253. // {
  254. // if (intval($value) > 0) {
  255. // $goods_ids[] = intval($value);
  256. // }
  257. // }
  258. $model_goods = Model('goods');
  259. $goods_list = $model_goods->getGoodsListByColorDistinct(array('goods_id' => array('in',$goods_ids)), goods_helper::fieldstr);
  260. $block = special_helper::format_goods($goods_ids,"猜你喜欢");
  261. $helper = new goods_helper();
  262. $ret = $helper->get_summaryex($goods_list,$related_goods);
  263. return array('special_list' => array($block),
  264. 'summary' => $ret['summary'],
  265. 'groupbuy' => $ret['groupbuy'],
  266. 'limitime' => $ret['limitime'],
  267. 'bundling' => $ret['bundling']);
  268. }
  269. }
  270. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  271. /**
  272. * @return array
  273. */
  274. private function condition()
  275. {
  276. $condition = array();
  277. //分类查询
  278. if (!empty(trim($_GET['gc_id']))) {
  279. $condition['gc_id'] = intval($_GET['gc_id']);
  280. }
  281. // 关键字
  282. if (!empty(trim($_GET['keyword']))) {
  283. $word = trim(urldecode($_GET['keyword']));
  284. $helper = new history_helper();
  285. $helper->add_word($word);
  286. $condition['goods_name|goods_jingle'] = array('like', '%' . urldecode($_GET['keyword']) . '%');
  287. }
  288. // 品牌查询
  289. if (!empty(trim($_GET['brand_id']))) {
  290. $condition['brand_id'] = intval($_GET['brand_id']);
  291. }
  292. // 功效查询
  293. if (!empty(trim($_GET['efficacy_id']))) {
  294. $condition['efficacy_id'] = intval($_GET['efficacy_id']);
  295. }
  296. //重新组合后的分类查询
  297. if (!empty(trim($_GET['hot_id']))) {
  298. $id = intval($_GET['hot_id']);
  299. $cids = category_helper::instance()->cids($id);
  300. $condition['gc_id'] = array('in', $cids);
  301. }
  302. return $condition;
  303. }
  304. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  305. public function goods_listOp()
  306. {
  307. $model_goods = Model('goods');
  308. $condition = $this->condition();
  309. //排序方式
  310. $order = $this->get_order($_GET['key'], $_GET['order']);
  311. $goods_list = $model_goods->getGoodsListByColorDistinct($condition, goods_helper::fieldstr, $order, $this->page_size());
  312. $page_count = $model_goods->gettotalpage();
  313. $model_goods->cls();
  314. $goods_ids = array();
  315. foreach($goods_list as $val) {
  316. array_push($goods_ids,$val['goods_id']);
  317. }
  318. $helper = new goods_helper();
  319. $goods_list = $helper->get_infos($goods_ids);
  320. self::outsuccess(array('goods_list' => $goods_list, 'mobile_page' => mobile_page($page_count)));
  321. }
  322. /**
  323. * 商品列表排序方式
  324. */
  325. private function get_order($key, $order)
  326. {
  327. $result = 'is_own_shop desc,goods_commonid desc';
  328. if (!empty($key))
  329. {
  330. $sequence = 'desc';
  331. if ($order == 1) {
  332. $sequence = 'asc';
  333. }
  334. switch ($key)
  335. {
  336. case '1' : //销量
  337. $result = 'goods_salenum' . ' ' . $sequence;
  338. break;
  339. case '2' : //浏览量
  340. $result = 'goods_click' . ' ' . $sequence;
  341. break;
  342. case '3' : //价格
  343. $result = 'goods_price' . ' ' . $sequence;
  344. break;
  345. }
  346. }
  347. return $result;
  348. }
  349. /**
  350. * 商品详细页扩展
  351. *
  352. * 输入参数:
  353. * goods_id:商品id
  354. *
  355. */
  356. public function goods_commonOp()
  357. {
  358. $goods_id = intval($_GET ['goods_id']);
  359. if (empty($_GET ['goods_id']) || $goods_id < 0) {
  360. return joutput_error(errcode::ErrParamter, "goods_id = {$goods_id} must be > 0.");
  361. }
  362. // 商品详细信息
  363. $model_goods = Model('goods')->cls();
  364. $goods_detail = $model_goods->getGoodsSku($goods_id);
  365. if (empty($goods_detail)) {
  366. return joutput_error(errcode::ErrGoodsNotExist);
  367. }
  368. //推荐商品
  369. $model_store = Model('store')->cls();
  370. $store_info = $model_store->getStoreInfoByID($goods_detail['goods_info']['store_id']);
  371. $goods_detail['store_info']['store_id'] = $store_info['store_id'];
  372. $goods_detail['store_info']['store_name'] = $store_info['store_name'];
  373. $goods_detail['store_info']['member_id'] = $store_info['member_id'];
  374. //显示QQ及旺旺 好商城V3
  375. $goods_detail['store_info']['store_qq'] = $store_info['store_qq'];
  376. $goods_detail['store_info']['store_ww'] = $store_info['store_ww'];
  377. $goods_detail['store_info']['store_phone'] = $store_info['store_phone'];
  378. $goods_detail['store_info']['member_name'] = $store_info['member_name'];
  379. $goods_detail['store_info']['avatar'] = getMemberAvatarForID($store_info['member_id']);
  380. //商品详细信息处理
  381. $goods_detail = $this->_goods_common_extend($goods_detail);
  382. joutput_data($goods_detail);
  383. }
  384. /**
  385. * 商品详细信息处理
  386. */
  387. private function _goods_common_extend($goods_detail)
  388. {
  389. //商品链接
  390. $goods_detail['goods_info']['goods_url'] = urlShop('goods', 'index', array('goods_id' => $goods_detail['request_goods_id']));
  391. //整理数据
  392. unset($goods_detail['goods_info']['goods_commonid']);
  393. unset($goods_detail['goods_info']['gc_id']);
  394. unset($goods_detail['goods_info']['gc_name']);
  395. unset($goods_detail['goods_info']['store_name']);
  396. unset($goods_detail['goods_info']['brand_id']);
  397. unset($goods_detail['goods_info']['brand_name']);
  398. unset($goods_detail['goods_info']['type_id']);
  399. unset($goods_detail['goods_info']['goods_image']);
  400. //unset($goods_detail['goods_info']['goods_body']);
  401. unset($goods_detail['goods_info']['mobile_body']);
  402. unset($goods_detail['goods_info']['goods_state']);
  403. unset($goods_detail['goods_info']['goods_stateremark']);
  404. unset($goods_detail['goods_info']['goods_verify']);
  405. unset($goods_detail['goods_info']['goods_verifyremark']);
  406. unset($goods_detail['goods_info']['goods_lock']);
  407. unset($goods_detail['goods_info']['goods_addtime']);
  408. unset($goods_detail['goods_info']['goods_edittime']);
  409. unset($goods_detail['goods_info']['goods_selltime']);
  410. unset($goods_detail['goods_info']['goods_show']);
  411. unset($goods_detail['goods_info']['goods_commend']);
  412. unset($goods_detail['goods_info']['explain']);
  413. unset($goods_detail['goods_info']['cart']);
  414. unset($goods_detail['goods_info']['buynow_text']);
  415. unset($goods_detail['goods_info']['spec_value']);
  416. unset($goods_detail['goods_info']['spec_name']);
  417. unset($goods_detail['goods_info']['goods_spec']);
  418. //unset($goods_detail['goods_info']['goods_attr']);
  419. unset($goods_detail['groupbuy_info']);
  420. unset($goods_detail['xianshi_info']);
  421. return $goods_detail;
  422. }
  423. /**
  424. * 商品详细页
  425. *
  426. * 输入参数:
  427. * goods_id: 商品id
  428. * from:目前说明是来自app还是h5
  429. */
  430. public function goods_detailOp()
  431. {
  432. $goods_id = intval($_GET ['goods_id']);
  433. $from = $_GET['from'];
  434. // 商品详细信息
  435. $model_goods = Model('goods');
  436. $goods_detail = $model_goods->getGoodsDetail($goods_id);
  437. if (empty($goods_detail)) {
  438. return joutput_error(errcode::ErrGoodsNotExist);
  439. }
  440. // 推荐商品
  441. $model_store = Model('store');
  442. $hot_sales = $model_store->getHotSalesList($goods_detail['goods_info']['store_id'], 6);
  443. $goods_commend_list = array();
  444. foreach ($hot_sales as $value) {
  445. $goods_commend = array();
  446. $goods_commend['goods_id'] = $value['goods_id'];
  447. $goods_commend['goods_name'] = $value['goods_name'];
  448. $goods_commend['goods_price'] = $value['goods_price'];
  449. $goods_commend['goods_image_url'] = cthumb($value['goods_image'], 240);
  450. $goods_commend_list[] = $goods_commend;
  451. }
  452. $goods_detail['goods_commend_list'] = $goods_commend_list;
  453. $store_info = $model_store->getStoreInfoByID($goods_detail['goods_info']['store_id']);
  454. $goods_detail['store_info']['store_id'] = $store_info['store_id'];
  455. $goods_detail['store_info']['store_name'] = $store_info['store_name'];
  456. $goods_detail['store_info']['member_id'] = $store_info['member_id'];
  457. //显示QQ及旺旺 好商城V3
  458. $goods_detail['store_info']['store_qq'] = $store_info['store_qq'];
  459. $goods_detail['store_info']['store_ww'] = $store_info['store_ww'];
  460. $goods_detail['store_info']['store_phone'] = $store_info['store_phone'];
  461. $goods_detail['store_info']['member_name'] = $store_info['member_name'];
  462. $goods_detail['store_info']['avatar'] = getMemberAvatarForID($store_info['member_id']);
  463. //商品详细信息处理
  464. $goods_detail = $this->_goods_detail_extend($goods_detail);
  465. if ($from === 'app') {
  466. $goods_detail['goods_info']['spec'] = $this->_parse_spec($goods_detail['goods_info']['spec_name'], $goods_detail['goods_info']['spec_value'], $goods_detail['spec_image'], $goods_detail['spec_list']);
  467. $goods_detail['goods_info']['attributes'] = $this->_parse_attributes($goods_detail['goods_info']['goods_attr']);
  468. $goods_detail['goods_info']['goods_spec_obj'] = $this->_parse_goods_spec($goods_detail['goods_info']['goods_spec']);
  469. $goods_detail['UPLOAD_SITE_URL'] = $GLOBALS['setting_config']['upload_site_url'];
  470. }
  471. //v3-b11 抢购商品是否开始
  472. $goods_info = $goods_detail['goods_info'];
  473. //print_r($goods_info);
  474. $IsHaveBuy = 0;
  475. if (!empty($_COOKIE['username'])) {
  476. $model_member = Model('member');
  477. $member_info = $model_member->getMemberInfo(array('member_name' => $_COOKIE['username']));
  478. $buyer_id = $member_info['member_id'];
  479. $promotion_type = $goods_info["promotion_type"];
  480. if ($promotion_type == 'groupbuy') {
  481. //检测是否限购数量
  482. $upper_limit = $goods_info["upper_limit"];
  483. if ($upper_limit > 0) {
  484. //查询些会员的订单中,是否已买过了
  485. $model_order = Model('order');
  486. //取商品列表
  487. $order_goods_list = $model_order->getOrderGoodsList(array('goods_id' => $goods_id, 'buyer_id' => $buyer_id, 'goods_type' => 2));
  488. if ($order_goods_list) {
  489. //取得上次购买的活动编号(防一个商品参加多次团购活动的问题)
  490. $promotions_id = $order_goods_list[0]["promotions_id"];
  491. //用此编号取数据,检测是否这次活动的订单商品。
  492. $model_groupbuy = Model('groupbuy');
  493. $groupbuy_info = $model_groupbuy->getGroupbuyInfo(array('groupbuy_id' => $promotions_id));
  494. if ($groupbuy_info) {
  495. $IsHaveBuy = 1;
  496. } else {
  497. $IsHaveBuy = 0;
  498. }
  499. }
  500. }
  501. }
  502. }
  503. $goods_detail['IsHaveBuy'] = $IsHaveBuy;
  504. //v3-b11 end
  505. joutput_data($goods_detail);
  506. }
  507. /**
  508. * 商品详细信息处理
  509. */
  510. private function _goods_detail_extend($goods_detail)
  511. {
  512. //整理商品规格
  513. unset($goods_detail['spec_list']);
  514. $goods_detail['spec_list'] = $goods_detail['spec_list_mobile'];
  515. unset($goods_detail['spec_list_mobile']);
  516. //整理商品图片
  517. unset($goods_detail['goods_image']);
  518. $goods_detail['goods_image'] = implode(',', $goods_detail['goods_image_mobile']);
  519. unset($goods_detail['goods_image_mobile']);
  520. //商品链接
  521. $goods_detail['goods_info']['goods_url'] = urlShop('goods', 'index', array('goods_id' => $goods_detail['goods_info']['goods_id']));
  522. //整理数据
  523. unset($goods_detail['goods_info']['goods_commonid']);
  524. unset($goods_detail['goods_info']['gc_id']);
  525. unset($goods_detail['goods_info']['gc_name']);
  526. unset($goods_detail['goods_info']['store_name']);
  527. unset($goods_detail['goods_info']['brand_id']);
  528. unset($goods_detail['goods_info']['brand_name']);
  529. unset($goods_detail['goods_info']['type_id']);
  530. unset($goods_detail['goods_info']['goods_image']);
  531. unset($goods_detail['goods_info']['goods_body']);
  532. unset($goods_detail['goods_info']['mobile_body']);
  533. unset($goods_detail['goods_info']['goods_state']);
  534. unset($goods_detail['goods_info']['goods_stateremark']);
  535. unset($goods_detail['goods_info']['goods_verify']);
  536. unset($goods_detail['goods_info']['goods_verifyremark']);
  537. unset($goods_detail['goods_info']['goods_lock']);
  538. unset($goods_detail['goods_info']['goods_addtime']);
  539. unset($goods_detail['goods_info']['goods_edittime']);
  540. unset($goods_detail['goods_info']['goods_selltime']);
  541. unset($goods_detail['goods_info']['goods_show']);
  542. unset($goods_detail['goods_info']['goods_commend']);
  543. unset($goods_detail['goods_info']['explain']);
  544. unset($goods_detail['goods_info']['cart']);
  545. unset($goods_detail['goods_info']['buynow_text']);
  546. unset($goods_detail['groupbuy_info']);
  547. //unset($goods_detail['xianshi_info']);
  548. return $goods_detail;
  549. }
  550. /**
  551. * 解析spec字段
  552. *
  553. * @param $spec_name
  554. * @param $spec_value
  555. * @param array $spec_image
  556. * @param array $spec_list
  557. * @return array
  558. */
  559. private function _parse_spec($spec_name, $spec_value, $spec_image = [], $spec_list = [])
  560. {
  561. $spec = [];
  562. foreach ($spec_name as $key => $value) {
  563. $spec_item = [];
  564. $spec_item['spec_id'] = $key;
  565. $spec_item['spec_name'] = $value;
  566. if (!empty($spec_value[$key])) {
  567. $spec_item['value_list'] = [];
  568. foreach ($spec_value[$key] as $v_key => $v) {
  569. $value_item = [];
  570. $value_item['value_id'] = $v_key;
  571. $value_item['value_name'] = $v;
  572. $value_item['value_image'] = empty($spec_image[$v_key]) ? '' : $spec_image[$v_key];
  573. $value_item['value'] = empty($spec_list[$v_key]) ? '' : $spec_list[$v_key];
  574. array_push($spec_item['value_list'], $value_item);
  575. }
  576. }
  577. array_push($spec, $spec_item);
  578. }
  579. return $spec;
  580. }
  581. /**
  582. * 解析商品属性字段
  583. *
  584. * @param $goods_attr
  585. * @return array
  586. */
  587. private function _parse_attributes($goods_attr)
  588. {
  589. $attributes = [];
  590. foreach ($goods_attr as $key => $value) {
  591. $attribute_item = [];
  592. $attribute_item['goods_attr_id'] = $key;
  593. $attribute_item['goods_attr_value'] = [];
  594. if (!empty($value)) {
  595. foreach ($value as $v_key => $v) {
  596. $attribute_attr = [];
  597. if ($v_key === 'name') {
  598. $attribute_item['goods_attr_name'] = $v;
  599. } else {
  600. $attribute_attr['value_id'] = $v_key;
  601. $attribute_attr['value_name'] = $v;
  602. array_push($attribute_item['goods_attr_value'], $attribute_attr);
  603. }
  604. }
  605. }
  606. array_push($attributes, $attribute_item);
  607. }
  608. return $attributes;
  609. }
  610. /**
  611. * 解析功效
  612. *
  613. * @param $goods_attr
  614. * @return mixed
  615. */
  616. private function _parse_for_efficacy($goods_attr)
  617. {
  618. foreach ($goods_attr as $key => $val) {
  619. $attr_item['goods_attr_id'] = intval($key);
  620. $attr_item['goods_attr_name'] = $val['name'];
  621. if ($attr_item['goods_attr_name'] === '功效') {
  622. $goods_attr_value = array();
  623. foreach ($val as $id => $name) {
  624. if ($id !== 'name') {
  625. $val_item['value_id'] = intval($id);
  626. $val_item['value_name'] = $name;
  627. array_push($goods_attr_value, $val_item);
  628. }
  629. }
  630. $attr_item['goods_attr_value'] = $goods_attr_value;
  631. break;
  632. }
  633. }
  634. return $attr_item;
  635. }
  636. /**
  637. * 商品规格序列化解析
  638. *
  639. * @param $goods_spec
  640. * @return array
  641. */
  642. private function _parse_goods_spec($goods_spec)
  643. {
  644. $goods_spec_obj = [];
  645. foreach ($goods_spec as $key => $value) {
  646. $spec_item = [];
  647. $spec_item['spec_value'] = $key;
  648. $spec_item['spec_name'] = $value;
  649. array_push($goods_spec_obj, $spec_item);
  650. }
  651. return $goods_spec_obj;
  652. }
  653. /**
  654. * 商品详细页(未启用)
  655. */
  656. public function goods_bodyOp()
  657. {
  658. return joutput_error(errcode::ErrProtocolDisabled);
  659. $goods_id = intval($_GET ['goods_id']);
  660. $out_type = $_GET ['type'];
  661. $model_goods = Model('goods');
  662. if (empty($_GET ['goods_commonid'])) {
  663. $goods_info = $model_goods->getGoodsInfoByID($goods_id, 'goods_commonid');
  664. } else {
  665. $goods_info['goods_commonid'] = intval($_GET ['goods_commonid']);
  666. }
  667. $goods_common_info = $model_goods->getGoodeCommonInfoByID($goods_info['goods_commonid']);
  668. if ($out_type === 'json') {
  669. $goods_common_info['goods_attr'] = $this->_parse_attributes(unserialize($goods_common_info['goods_attr']));
  670. $goods_common_info['spec_name'] = unserialize($goods_common_info['spec_name']);
  671. $goods_common_info['spec_value'] = unserialize($goods_common_info['spec_value']);
  672. $goods_common_info['spec'] = $this->_parse_spec($goods_common_info['spec_name'], $goods_common_info['spec_value']);
  673. $goods_common_info['goods_body'] = ''; //base64_encode($goods_common_info['goods_body']);
  674. $goods_common_info['mobile_body'] = '';//base64_encode($goods_common_info['mobile_body']);
  675. joutput_data($goods_common_info);
  676. } else {
  677. Tpl::output('goods_common_info', $goods_common_info);
  678. Tpl::showpage('goods_body');
  679. }
  680. }
  681. /**
  682. * 获取detail(未启用)
  683. */
  684. public function detailOp()
  685. {
  686. $goods_id = intval($_GET['goods_id']);
  687. if (empty($_GET['goods_id']) || $goods_id <= 0) {
  688. if (!empty($_GET['goods_commonid'])) {
  689. $commonid = intval($_GET['goods_commonid']);
  690. }
  691. } else {
  692. $items = Model()->table('goods')->field('goods_commonid')->where(array('goods_id' => $goods_id))->limit(1)->select();
  693. if (!empty($items) && count($items) > 0) {
  694. $commonid = intval($items[0]['goods_commonid']);
  695. }
  696. }
  697. if (isset($commonid) && $commonid > 0) {
  698. $items = Model()->table('goods_common')->field('goods_body')->where(array('goods_commonid' => $commonid))->select();
  699. if (!empty($items) && count($items) > 0) {
  700. Tpl::output('goods_body', $items[0]['goods_body']);
  701. }
  702. }
  703. Tpl::showpage('goods_detail');
  704. }
  705. }