| 
									
										
										
										
											2022-10-08 17:31:39 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace app\controller; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use app\model\Category; | 
					
						
							|  |  |  | use app\model\ConfigSetting; | 
					
						
							|  |  |  | use app\model\Link; | 
					
						
							|  |  |  | use app\model\System; | 
					
						
							|  |  |  | use app\model\VisitLogoModel; | 
					
						
							|  |  |  | use think\response\Redirect; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * 控制器基础类 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class Base extends BaseController | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     //需要向模板传递的值
 | 
					
						
							|  |  |  |     protected $data = []; | 
					
						
							|  |  |  |     //系统配置信息
 | 
					
						
							|  |  |  |     protected $system = []; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-11 10:23:21 +08:00
										 |  |  |     protected $isMobile = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-08 17:31:39 +08:00
										 |  |  |     // 初始化
 | 
					
						
							|  |  |  |     protected function initialize() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->system         = System::getSystem(); | 
					
						
							|  |  |  |         $this->data['system'] = $this->system; | 
					
						
							|  |  |  |         $this->data['links']  = Link::getList(); | 
					
						
							|  |  |  |         if (session('?__token__')) { | 
					
						
							|  |  |  |             $this->data['_token'] = session('__token__'); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->data['_token'] = $this->request->buildToken(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-11 10:23:21 +08:00
										 |  |  |         $this->isMobile = request()->isMobile(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->data['config']   = ConfigSetting::getConfigContentsByName('extraBase'); | 
					
						
							|  |  |  |         $this->data['isMobile'] = $this->isMobile; | 
					
						
							| 
									
										
										
										
											2022-10-08 17:31:39 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->nav(); | 
					
						
							|  |  |  |         $this->logVisit(); | 
					
						
							|  |  |  |         $this->setNofollowATagNames(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //设置SEO信息
 | 
					
						
							|  |  |  |     protected function setSeo($title, $keywords = '', $description = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->data['seoTitle']       = $title; | 
					
						
							|  |  |  |         $this->data['seoKeywords']    = $keywords; | 
					
						
							|  |  |  |         $this->data['seoDescription'] = $description; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //模板
 | 
					
						
							|  |  |  |     protected function view($template = '') | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return view($template)->assign($this->data); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function setExtraBaseConfig() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->data['extraBase'] = ConfigSetting::getConfigContentsByName('extraBase'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  |      * 重构异常提示页面 | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected function error($msg = '', string $url = null, $data = [], int $code = 404): Redirect | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         switch ($code) { | 
					
						
							|  |  |  |             case 500: | 
					
						
							|  |  |  |                 return $this->redirect('/500.html'); | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 return $this->redirect('/404.html'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 记录访问日志
 | 
					
						
							|  |  |  |     protected function logVisit() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $referer     = $_SERVER["HTTP_REFERER"] ?? ''; | 
					
						
							|  |  |  |         $domain      = $this->request->domain(); | 
					
						
							|  |  |  |         $checkDomain = substr($referer, 0, strlen($domain)); | 
					
						
							|  |  |  |         if (!empty($referer) && $domain !== $checkDomain) { | 
					
						
							|  |  |  |             //            session('first_landing_page', $this->request->url(true));
 | 
					
						
							|  |  |  |             VisitLogoModel::create([ | 
					
						
							|  |  |  |                 'ip'          => request()->ip(), | 
					
						
							|  |  |  |                 'referer'     => $referer, | 
					
						
							|  |  |  |                 'visit'       => $this->request->url(true), | 
					
						
							|  |  |  |                 'create_time' => time(), | 
					
						
							|  |  |  |             ]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // HTML a标签设置 rel="nofollow" 属性,禁止搜索引擎追踪
 | 
					
						
							|  |  |  |     protected function setNofollowATagNames() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->data['nofollowList']          = [ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         $this->data['footerAllowFollowList'] = [ | 
					
						
							|  |  |  |             '客户案例', '公司新闻', | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected function nav() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->data['menus'] = Category::navList()['menus']; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // 所有下级栏目ID
 | 
					
						
							|  |  |  |     private function getAllSubordinateIds($items, $curId = 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $list = []; | 
					
						
							|  |  |  |         foreach ($items as $k => $item) { | 
					
						
							|  |  |  |             if ($item['parent_id'] == $curId) { | 
					
						
							|  |  |  |                 $list[] = $item['id']; | 
					
						
							|  |  |  |                 unset($items[$k]); | 
					
						
							|  |  |  |                 $childrenIds = $this->getAllSubordinateIds($items, $item['id']); | 
					
						
							|  |  |  |                 if ($childrenIds) { | 
					
						
							|  |  |  |                     $list = array_merge($list, $childrenIds); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return $list; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-10-11 10:23:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // 获取所在一级栏目背景图
 | 
					
						
							|  |  |  |     protected function firstBanner($category): array | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // 一级栏目的banner
 | 
					
						
							|  |  |  |         $firstCategoryId = Category::firstGradeId($category['path'], $category['id']); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $bgImg = []; | 
					
						
							|  |  |  |         if ($firstCategoryId == $category['id']) { | 
					
						
							|  |  |  |             $bgImg['pc']     = ['src' => $category['src'] ?? '', 'title' => $category['title'] ?? '']; | 
					
						
							|  |  |  |             $bgImg['mobile'] = ['src' => $category['src_mobile'] ?? '', 'title' => $category['title'] ?? '']; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $firstCategory   = Category::where('id', $firstCategoryId)->field('id,title,src,src_mobile')->find(); | 
					
						
							|  |  |  |             $bgImg['pc']     = ['src' => $firstCategory['src'] ?? '', 'title' => $firstCategory['title'] ?? '']; | 
					
						
							|  |  |  |             $bgImg['mobile'] = ['src' => $firstCategory['src_mobile'] ?? '', 'title' => $firstCategory['title'] ?? '']; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $bgImg; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-10-08 17:31:39 +08:00
										 |  |  | } |