BaseHome.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. <?php
  2. namespace app\home\controller;
  3. use think\facade\View;
  4. use app\BaseController;
  5. /*
  6. * 基类
  7. */
  8. /**
  9. * ============================================================================
  10. * DSMall多用户商城
  11. * ============================================================================
  12. * 版权所有 2014-2028 长沙德尚网络科技有限公司,并保留所有权利。
  13. * 网站地址: http://www.csdeshang.com
  14. * ----------------------------------------------------------------------------
  15. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用 .
  16. * 不允许对程序代码以任何形式任何目的的再发布。
  17. * ============================================================================
  18. * 控制器
  19. */
  20. class BaseHome extends BaseController
  21. {
  22. public function initialize()
  23. {
  24. parent::initialize();
  25. //自动加入配置
  26. $config_list = rkcache('config', true);
  27. config($config_list,'ds_config');
  28. if(!config('ds_config.site_state')) {
  29. echo config('ds_config.closed_reason');
  30. exit;
  31. }
  32. $this->checkMessage(); //短消息检查
  33. $this->showArticle();
  34. $this->showCartCount();
  35. //顶部广告
  36. $prefix = 'home-adv';
  37. $result = rcache(21, $prefix);
  38. if (empty($result)) {
  39. $condition=array();
  40. $condition[]=['ap_id','=',21];
  41. $condition[]=['adv_enabled','=',1];
  42. $condition[]=['adv_startdate','<',strtotime(date('Y-m-d H:00:00'))];
  43. $condition[]=['adv_enddate','>',strtotime(date('Y-m-d H:00:00'))];
  44. $adv_list=model('adv')->getAdvList($condition,'',1,'adv_sort asc,adv_id asc');
  45. if(!empty($adv_list)){
  46. $result=$adv_list[0];
  47. }
  48. wcache(21, $result, $prefix, 3600);
  49. }
  50. View::assign('adv_top', $result);
  51. View::assign('hot_search', @explode(',', config('ds_config.hot_search'))); //热门搜索
  52. // 自定义导航
  53. View::assign('navs', $this->_get_navs());
  54. //获取所有分类
  55. View::assign('header_categories', $this->_get_header_categories());
  56. }
  57. //SEO 赋值
  58. function _assign_seo($seo)
  59. {
  60. View::assign('html_title', $seo['html_title']);
  61. View::assign('seo_keywords', $seo['seo_keywords']);
  62. View::assign('seo_description', $seo['seo_description']);
  63. }
  64. /**
  65. * 检查短消息数量
  66. *
  67. */
  68. protected function checkMessage()
  69. {
  70. if (session('member_id') == '')
  71. return;
  72. //判断cookie是否存在
  73. $cookie_name = 'msgnewnum' . session('member_id');
  74. if (cookie($cookie_name) != null) {
  75. $countnum = intval(cookie($cookie_name));
  76. }
  77. else {
  78. $message_model = model('message');
  79. $countnum = $message_model->getNewMessageCount(session('member_id'));
  80. cookie($cookie_name, $countnum, 2 * 3600); //保存2小时
  81. }
  82. View::assign('message_num', $countnum);
  83. }
  84. public function _get_navs()
  85. {
  86. $data = array(
  87. 'header' => array(), 'middle' => array(), 'footer' => array(),
  88. );
  89. $rows = rkcache('nav', true);
  90. foreach ($rows as $row) {
  91. $data[$row['nav_location']][] = $row;
  92. }
  93. return $data;
  94. }
  95. public function _get_header_categories()
  96. {
  97. $goodsclass_model = model('goodsclass');
  98. $goods_class = $goodsclass_model->get_all_category();
  99. return $goods_class;
  100. }
  101. /**
  102. * 显示购物车数量
  103. */
  104. protected function showCartCount()
  105. {
  106. if (cookie('cart_goods_num') != null) {
  107. $cart_num = intval(cookie('cart_goods_num'));
  108. }
  109. else {
  110. //已登录状态,存入数据库,未登录时,优先存入缓存,否则存入COOKIE
  111. if (session('member_id')) {
  112. $save_type = 'db';
  113. }
  114. else {
  115. $save_type = 'cookie';
  116. }
  117. $cart_num = model('cart')->getCartNum($save_type, array('buyer_id' => session('member_id'))); //查询购物车商品种类
  118. }
  119. View::assign('cart_goods_num', $cart_num);
  120. }
  121. /**
  122. * 输出会员等级
  123. * @param bool $is_return 是否返回会员信息,返回为true,输出会员信息为false
  124. */
  125. protected function getMemberAndGradeInfo($is_return = false)
  126. {
  127. $member_info = array();
  128. //会员详情及会员级别处理
  129. if (session('member_id')) {
  130. $member_model = model('member');
  131. $member_info = $member_model->getMemberInfoByID(session('member_id'));
  132. if ($member_info) {
  133. $member_gradeinfo = $member_model->getOneMemberGrade(intval($member_info['member_exppoints']));
  134. $member_info = array_merge($member_info, $member_gradeinfo);
  135. }
  136. }
  137. if ($is_return == true) {//返回会员信息
  138. return $member_info;
  139. }
  140. else {//输出会员信息
  141. View::assign('member_info', $member_info);
  142. }
  143. }
  144. /**
  145. * 验证会员是否登录
  146. *
  147. */
  148. protected function checkLogin()
  149. {
  150. if (session('is_login') !== '1') {
  151. if (trim(request()->action()) == 'favoritesgoods' || trim(request()->action()) == 'favoritesstore') {
  152. echo json_encode(array('done' => false, 'msg' => lang('no_login')));
  153. die;
  154. }
  155. $ref_url = request_uri();
  156. if (input('get.inajax')) {
  157. ds_show_dialog('', '', 'js', "login_dialog();", 200);
  158. }
  159. else {
  160. @header("location: " . HOME_SITE_URL . "/Login/logon.html?ref_url=" . urlencode($ref_url));
  161. }
  162. exit;
  163. }
  164. }
  165. /**
  166. * 添加到任务队列
  167. *
  168. * @param array $goods_array
  169. * @param boolean $ifdel 是否删除以原记录
  170. */
  171. protected function addcron($data = array(), $ifdel = false)
  172. {
  173. $cron_model = model('cron');
  174. if (isset($data[0])) { // 批量插入
  175. $where = array();
  176. foreach ($data as $k => $v) {
  177. if (isset($v['content'])) {
  178. $data[$k]['content'] = serialize($v['content']);
  179. }
  180. // 删除原纪录条件
  181. if ($ifdel) {
  182. $where[] = '(type = ' . $data['type'] . ' and exeid = ' . $data['exeid'] . ')';
  183. }
  184. }
  185. // 删除原纪录
  186. if ($ifdel) {
  187. $cron_model->delCron(implode(',', $where));
  188. }
  189. $cron_model->addCronAll($data);
  190. }
  191. else { // 单条插入
  192. if (isset($data['content'])) {
  193. $data['content'] = serialize($data['content']);
  194. }
  195. // 删除原纪录
  196. if ($ifdel) {
  197. $cron_model->delCron(array('type' => $data['type'], 'exeid' => $data['exeid']));
  198. }
  199. $cron_model->addCron($data);
  200. }
  201. }
  202. //文章输出
  203. public function showArticle()
  204. {
  205. $article = rcache("index_article");
  206. if (!empty($article)) {
  207. View::assign('show_article', $article['show_article']);
  208. View::assign('article_list', $article['article_list']);
  209. }
  210. else {
  211. $articleclass_model = model('articleclass');
  212. $article_model = model('article');
  213. $show_article = array(); //商城公告
  214. $article_list = array(); //下方文章
  215. $notice_class = array('notice');
  216. $code_array = array('member', 'store', 'payment', 'sold', 'service', 'about');
  217. $notice_limit = 5;
  218. $faq_limit = 5;
  219. $class_condition = array();
  220. $class_condition[]=array('ac_id','<=',7);
  221. $class_order = 'ac_sort asc';
  222. $article_class = $articleclass_model->getArticleclassList($class_condition,$class_order);
  223. $class_list = array();
  224. if (!empty($article_class) && is_array($article_class)) {
  225. foreach ($article_class as $key => $val) {
  226. $ac_code = $val['ac_code'];
  227. $ac_id = $val['ac_id'];
  228. $val['list'] = array(); //文章
  229. $class_list[$ac_id] = $val;
  230. }
  231. }
  232. //首页系统文章
  233. $article_where = "article.article_show = '1' and (article_class.ac_id <= 7 or (article_class.ac_parent_id > 0 and article_class.ac_parent_id <= 7))";
  234. $article_field = 'article.article_id,article.ac_id,article.article_url,article.article_title,article.article_time,article_class.ac_name,article_class.ac_parent_id';
  235. $article_order = 'article_sort asc,article_time desc';
  236. $article_array = $article_model->getJoinArticleList($article_where,300,$article_field,$article_order);
  237. if (!empty($article_array) && is_array($article_array)) {
  238. foreach ($article_array as $key => $val) {
  239. $ac_id = $val['ac_id'];
  240. $ac_parent_id = $val['ac_parent_id'];
  241. if ($ac_parent_id == 0) {//顶级分类
  242. $class_list[$ac_id]['list'][] = $val;
  243. }
  244. else {
  245. $class_list[$ac_parent_id]['list'][] = $val;
  246. }
  247. }
  248. }
  249. if (!empty($class_list) && is_array($class_list)) {
  250. foreach ($class_list as $key => $val) {
  251. $ac_code = @$val['ac_code'];
  252. if (in_array($ac_code, $notice_class)) {
  253. $list = $val['list'];
  254. array_splice($list, $notice_limit);
  255. $val['list'] = $list;
  256. $show_article[$ac_code] = $val;
  257. }
  258. if (in_array($ac_code, $code_array)) {
  259. $list = $val['list'];
  260. $val['class']['ac_name'] = $val['ac_name'];
  261. array_splice($list, $faq_limit);
  262. $val['list'] = $list;
  263. $article_list[] = $val;
  264. }
  265. }
  266. }
  267. wcache('index_article', array('show_article' => $show_article, 'article_list' => $article_list,));
  268. View::assign('show_article', $show_article);
  269. View::assign('article_list', $article_list);
  270. }
  271. }
  272. /**
  273. * 自动登录
  274. */
  275. protected function auto_login()
  276. {
  277. $data = cookie('auto_login');
  278. if (empty($data)) {
  279. return false;
  280. }
  281. $member_model = model('member');
  282. if (session('is_login')) {
  283. $member_model->auto_login();
  284. }
  285. $member_id = intval(ds_decrypt($data, MD5_KEY));
  286. if ($member_id <= 0) {
  287. return false;
  288. }
  289. $member_info = $member_model->getMemberInfoByID($member_id);
  290. if (!$member_info['member_state']) {
  291. return false;
  292. }
  293. $member_model->createSession($member_info);
  294. }
  295. }
  296. ?>