search.php 34 KB

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