Index.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <?php
  2. namespace app\home\controller;
  3. use think\facade\View;
  4. use think\facade\Lang;
  5. use think\facade\Db;
  6. /**
  7. * ============================================================================
  8. * DSMall多用户商城
  9. * ============================================================================
  10. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  11. * 网站地址: http://www.csdeshang.com
  12. * ----------------------------------------------------------------------------
  13. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  14. * 不允许对程序代码以任何形式任何目的的再发布。
  15. * ============================================================================
  16. * 控制器
  17. */
  18. class Index extends BaseMall {
  19. public function initialize() {
  20. parent::initialize();
  21. Lang::load(base_path() . 'home/lang/'.config('lang.default_lang').'/index.lang.php');
  22. Lang::load(base_path() . 'home/lang/'.config('lang.default_lang').'/sellergroupbuy.lang.php');
  23. }
  24. public function index() {
  25. View::assign('index_sign', 'index');
  26. $editable_page_model = model('editable_page');
  27. $editable_page = $editable_page_model->getOneEditablePage(array('editable_page_path' => 'index/index','editable_page_client'=>'pc'));
  28. if ($editable_page) {
  29. Lang::load(base_path() . 'admin/lang/'.config('lang.default_lang').'/editable_page.lang.php');
  30. $editable_page['if_edit']=0;
  31. $editable_page['editable_page_theme_config'] = json_decode($editable_page['editable_page_theme_config'], true);
  32. //获取可编辑模块
  33. $data = $editable_page_model->getEditablePageConfigByPageId($editable_page['editable_page_id']);
  34. View::assign('editable_page_config_list', $data['editable_page_config_list']);
  35. View::assign('editable_page', $editable_page);
  36. }else{
  37. $this->getIndexData();
  38. //楼层广告
  39. $result=false;
  40. $condition=array();
  41. $condition[]=['ap_id','=',1];
  42. $condition[]=['adv_enabled','=',1];
  43. $condition[]=['adv_startdate','<',strtotime(date('Y-m-d H:00:00'))];
  44. $condition[]=['adv_enddate','>',strtotime(date('Y-m-d H:00:00'))];
  45. $adv_list=model('adv')->getAdvList($condition,'',10,'adv_sort asc,adv_id asc');
  46. if(!empty($adv_list)){
  47. $result=$adv_list;
  48. }
  49. View::assign('adv_index_1', $result);
  50. $result=false;
  51. $condition=array();
  52. $condition[]=['ap_id','=',2];
  53. $condition[]=['adv_enabled','=',1];
  54. $condition[]=['adv_startdate','<',strtotime(date('Y-m-d H:00:00'))];
  55. $condition[]=['adv_enddate','>',strtotime(date('Y-m-d H:00:00'))];
  56. $adv_list=model('adv')->getAdvList($condition,'',10,'adv_sort asc,adv_id asc');
  57. if(!empty($adv_list)){
  58. $result=$adv_list;
  59. }
  60. View::assign('adv_index_2', $result);
  61. //楼层数据
  62. $floor_block=array();
  63. $goodsclass_list = Db::name('goodsclass')->where('gc_parent_id', 0)->where('gc_show', 1)->order('gc_sort asc')->select()->toArray();
  64. foreach ($goodsclass_list as $key => $goodsclass) {
  65. $floor_list = $this->getFloorList($goodsclass['gc_id']);
  66. $floor_block[$key] = $floor_list;
  67. $floor_block[$key]['gc_name'] = $goodsclass['gc_name'];
  68. if(!$floor_block[$key]['goods_list'][0]['gc_list']){
  69. unset($floor_block[$key]);
  70. continue;
  71. }
  72. $floor_block[$key]['adv_left']=false;
  73. $floor_block[$key]['adv_bottom']=false;
  74. if($key<5){
  75. $result=false;
  76. $condition=array();
  77. $condition_1=array();
  78. $condition_2=array();
  79. $condition[]=['adv_enabled','=',1];
  80. $condition[]=['adv_startdate','<',strtotime(date('Y-m-d H:00:00'))];
  81. $condition[]=['adv_enddate','>',strtotime(date('Y-m-d H:00:00'))];
  82. switch($key){
  83. case 0:
  84. $condition_1[]=['ap_id','=',8];
  85. $condition_2[]=['ap_id','=',3];
  86. break;
  87. case 1:
  88. $condition_1[]=['ap_id','=',9];
  89. $condition_2[]=['ap_id','=',4];
  90. break;
  91. case 2:
  92. $condition_1[]=['ap_id','=',10];
  93. $condition_2[]=['ap_id','=',5];
  94. break;
  95. case 3:
  96. $condition_1[]=['ap_id','=',11];
  97. $condition_2[]=['ap_id','=',6];
  98. break;
  99. case 4:
  100. $condition_1[]=['ap_id','=',12];
  101. $condition_2[]=['ap_id','=',7];
  102. break;
  103. }
  104. $adv_list=model('adv')->getAdvList(array_merge($condition,$condition_1),'',1,'adv_sort asc,adv_id asc');
  105. if(!empty($adv_list)){
  106. $result=$adv_list[0];
  107. $floor_block[$key]['adv_left']=$result;
  108. }
  109. $adv_list=model('adv')->getAdvList(array_merge($condition,$condition_2),'',1,'adv_sort asc,adv_id asc');
  110. if(!empty($adv_list)){
  111. $result=$adv_list[0];
  112. $floor_block[$key]['adv_bottom']=$result;
  113. }
  114. }
  115. }
  116. //楼层数据
  117. View::assign('floor_block', $floor_block);
  118. //显示订单信息
  119. if (session('is_login')) {
  120. //交易提醒 - 显示数量
  121. $order_model = model('order');
  122. $member_order_info['order_nopay_count'] = $order_model->getOrderCountByID('buyer', session('member_id'), 'NewCount');
  123. $member_order_info['order_noreceipt_count'] = $order_model->getOrderCountByID('buyer', session('member_id'), 'SendCount');
  124. $member_order_info['order_noeval_count'] = $order_model->getOrderCountByID('buyer', session('member_id'), 'EvalCount');
  125. View::assign('member_order_info', $member_order_info);
  126. }
  127. }
  128. //SEO 设置
  129. $seo = model('seo')->type('index')->show();
  130. $this->_assign_seo($seo);
  131. return View::fetch($this->template_dir . 'index');
  132. }
  133. private function getIndexData()
  134. {
  135. $index_data = rcache("index_data");
  136. if (empty($index_data)) {
  137. $index_data = array();
  138. $index_data['recommend_list'] = model('goods')->getGoodsUnionList(array(array('goodscommon.mall_goods_commend','=',1)), 'goods.goods_id,goodscommon.goods_name,goodscommon.goods_advword,goodscommon.goods_image,goodscommon.store_id,goods.goods_promotion_price,goodscommon.goods_price','goodscommon.mall_goods_sort asc','goodscommon.goods_commonid', 0,5);
  139. //限时折扣
  140. $index_data['promotion_list'] = model('pxianshigoods')->getXianshigoodsCommendList(5);
  141. $index_data['new_list'] = model('goods')->getGoodsOnlineList(array(), '', '', 'goods_addtime desc', 5,'goods_commonid');
  142. $index_data['groupbuy_list'] = model('groupbuy')->getGroupbuyCommendedList(5);
  143. //友情链接
  144. $index_data['link_list'] = model('link')->getLinkList();
  145. //获取第一文章分类的前三篇文章
  146. $index_data['index_articles'] = Db::name('article')->where('ac.ac_code', 'notice')->where('a.article_show', 1)->alias('a')->field('a.article_id,a.article_url,a.article_title')->order('a.article_sort asc,a.article_time desc')->limit(3)->join('articleclass ac', 'a.ac_id=ac.ac_id')->select()->toArray();
  147. wcache('index_data',$index_data);
  148. }
  149. View::assign('recommend_list', $index_data['recommend_list']);
  150. View::assign('promotion_list', $index_data['promotion_list']);
  151. View::assign('new_list', $index_data['new_list']);
  152. View::assign('groupbuy_list', $index_data['groupbuy_list']);
  153. View::assign('link_list', $index_data['link_list']);
  154. View::assign('index_articles', $index_data['index_articles']);
  155. }
  156. private function getFloorList($cate_id) {
  157. $prefix = 'home-index-floor-';
  158. $result = rcache($cate_id,$prefix);
  159. if (empty($result)) {
  160. //获取此楼层下的所有分类
  161. $goods_class_list = Db::name('goodsclass')->where('gc_parent_id=' . $cate_id)->select()->toArray();
  162. //获取每个分类下的商品
  163. $goods_list = array();
  164. $goods_list[0]['gc_name'] = lang('hot_recommended');
  165. $goods_list[0]['gc_id'] = $cate_id;
  166. $condition=model('goods')->_getRecursiveClass(array(array('goodscommon.mall_goods_commend','=',1)),$cate_id,'goodscommon');
  167. $goods_list[0]['gc_list'] = model('goods')->getGoodsUnionList($condition,'goods.goods_id,goodscommon.goods_marketprice,goodscommon.goods_name,goodscommon.goods_advword,goodscommon.goods_image,goodscommon.store_id,goods.goods_promotion_price,goodscommon.goods_price','goodscommon.mall_goods_commend desc,goodscommon.mall_goods_sort asc','goodscommon.goods_commonid', 0,10);
  168. $hot_goods_class_list = Db::name('goodsclass')->where('gc_parent_id=' . $cate_id)->order('gc_sort asc')->limit(5)->select()->toArray();
  169. foreach ($hot_goods_class_list as $key => $hot_goods_class) {
  170. $data = array();
  171. $data['gc_name'] = $hot_goods_class['gc_name'];
  172. $data['gc_id'] = $hot_goods_class['gc_id'];
  173. $condition=model('goods')->_getRecursiveClass(array(array('goodscommon.mall_goods_commend','=',1)),$data['gc_id'],'goodscommon');
  174. $data['gc_list'] = model('goods')->getGoodsUnionList($condition,'goods.goods_id,goodscommon.goods_marketprice,goodscommon.goods_name,goodscommon.goods_advword,goodscommon.goods_image,goodscommon.store_id,goods.goods_promotion_price,goodscommon.goods_price','goodscommon.mall_goods_commend desc,goodscommon.mall_goods_sort asc','goodscommon.goods_commonid', 0,10);
  175. $goods_list[] = $data;
  176. }
  177. $result['goods_list'] = $goods_list;
  178. $result['goods_class_list'] = $goods_class_list;
  179. wcache($cate_id, $result,$prefix, 3600);
  180. }
  181. return $result;
  182. }
  183. //json输出商品分类
  184. public function josn_class() {
  185. /**
  186. * 实例化商品分类模型
  187. */
  188. $goodsclass_model = model('goodsclass');
  189. $goods_class = $goodsclass_model->getGoodsclassListByParentId(intval(input('get.gc_id')));
  190. $array = array();
  191. if (is_array($goods_class) and count($goods_class) > 0) {
  192. foreach ($goods_class as $val) {
  193. $array[$val['gc_id']] = array(
  194. 'gc_id' => $val['gc_id'], 'gc_name' => htmlspecialchars($val['gc_name']),
  195. 'gc_parent_id' => $val['gc_parent_id'], 'commis_rate' => $val['commis_rate'],
  196. 'gc_sort' => $val['gc_sort']
  197. );
  198. }
  199. }
  200. echo $_GET['callback'] . '(' . json_encode($array) . ')';
  201. }
  202. //闲置物品地区json输出
  203. public function flea_area() {
  204. if (isset($_GET['check']) && intval($_GET['check']) > 0) {
  205. $_GET['area_id'] = $_GET['region_id'];
  206. }
  207. if (intval($_GET['area_id']) == 0) {
  208. return;
  209. }
  210. $fleaarea_model = model('fleaarea');
  211. $area_array = $fleaarea_model->getFleaareaList(array('fleaarea_parent_id' => intval($_GET['area_id'])));
  212. $array = array();
  213. if (is_array($area_array) and count($area_array) > 0) {
  214. foreach ($area_array as $val) {
  215. $array[$val['fleaarea_id']] = array(
  216. 'fleaarea_id' => $val['fleaarea_id'],
  217. 'fleaarea_name' => htmlspecialchars($val['fleaarea_name']),
  218. 'fleaarea_parent_id' => $val['fleaarea_parent_id'], 'fleaarea_sort' => $val['fleaarea_sort']
  219. );
  220. }
  221. }
  222. if (isset($_GET['check']) && intval($_GET['check']) > 0) {//判断当前地区是否为最后一级
  223. if (!empty($array) && is_array($array)) {
  224. echo 'false';
  225. } else {
  226. echo 'true';
  227. }
  228. } else {
  229. echo json_encode($array);
  230. }
  231. }
  232. //json输出闲置物品分类
  233. public function josn_flea_class() {
  234. /**
  235. * 实例化商品分类模型
  236. */
  237. $fleaclass_model = model('fleaclass');
  238. $goods_class = $fleaclass_model->getFleaclassList(array('fleaclass_parent_id' => intval(input('get.gc_id'))));
  239. $array = array();
  240. if (is_array($goods_class) and count($goods_class) > 0) {
  241. foreach ($goods_class as $val) {
  242. $array[$val['fleaclass_id']] = array(
  243. 'fleaclass_id' => $val['fleaclass_id'], 'fleaclass_name' => htmlspecialchars($val['fleaclass_name']),
  244. 'fleaclass_parent_id' => $val['fleaclass_parent_id'], 'fleaclass_sort' => $val['fleaclass_sort']
  245. );
  246. }
  247. }
  248. /**
  249. * 转码
  250. */
  251. echo json_encode($array);
  252. }
  253. /**
  254. * json输出地址数组 public/static/plugins/area_datas.js
  255. */
  256. public function json_area() {
  257. echo $_GET['callback'] . '(' . json_encode(model('area')->getAreaArrayForJson()) . ')';
  258. }
  259. /**
  260. * json输出地址数组
  261. */
  262. public function json_area_show() {
  263. $area_info['text'] = model('area')->getTopAreaName(intval(input('get.area_id')));
  264. echo $_GET['callback'] . '(' . json_encode($area_info) . ')';
  265. }
  266. //判断是否登录
  267. public function login() {
  268. echo (session('is_login') == '1') ? '1' : '0';
  269. }
  270. /**
  271. * 查询每月的周数组
  272. */
  273. public function getweekofmonth() {
  274. include_once root_path(). 'extend/mall/datehelper.php';
  275. $year = input('get.y');
  276. $month = input('get.m');
  277. $week_arr = getMonthWeekArr($year, $month);
  278. echo json_encode($week_arr);
  279. die;
  280. }
  281. /**
  282. * 头部最近浏览的商品
  283. */
  284. public function viewed_info() {
  285. $info = array();
  286. if (session('is_login') == '1') {
  287. $member_id = session('member_id');
  288. $info['m_id'] = $member_id;
  289. if (config('ds_config.voucher_allow') == 1) {
  290. $time_to = TIMESTAMP; //当前日期
  291. $info['voucher'] = Db::name('voucher')->where(
  292. array(
  293. array('voucher_owner_id' ,'=', $member_id), array('voucher_state' ,'=', 1),
  294. array('voucher_startdate','<=', $time_to),
  295. array('voucher_enddate','>=', $time_to)
  296. ))->count();
  297. }
  298. $time_to = strtotime(date('Y-m-d')); //当前日期
  299. $time_from = date('Y-m-d', ($time_to - 60 * 60 * 24 * 7)); //7天前
  300. $consult_mod=model('consult');
  301. $condition = array();
  302. $condition[] = array('member_id' ,'=', $member_id);
  303. $condition[] = array('consult_replytime' ,'between', array(strtotime($time_from), $time_to + 60 * 60 * 24));
  304. $info['consult'] = $consult_mod->getConsultCount($condition);
  305. }
  306. $goods_list = model('goodsbrowse')->getViewedGoodsList(session('member_id'), 5);
  307. if (is_array($goods_list) && !empty($goods_list)) {
  308. $viewed_goods = array();
  309. foreach ($goods_list as $key => $val) {
  310. $goods_id = $val['goods_id'];
  311. $val['url'] = (string)url('Goods/index', ['goods_id' => $goods_id]);
  312. $val['goods_image'] = goods_thumb($val, 60);
  313. $viewed_goods[$goods_id] = $val;
  314. }
  315. $info['viewed_goods'] = $viewed_goods;
  316. }
  317. echo json_encode($info);
  318. }
  319. }