163 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?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 = [];
 | |
| 
 | |
|     protected $isMobile = false;
 | |
| 
 | |
|     // 初始化
 | |
|     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();
 | |
|         }
 | |
| 
 | |
|         $this->isMobile = request()->isMobile();
 | |
| 
 | |
|         $this->data['config']   = ConfigSetting::getConfigContentsByName('extraBase');
 | |
|         $this->data['isMobile'] = $this->isMobile;
 | |
| 
 | |
|         $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;
 | |
|     }
 | |
| 
 | |
|     // 获取所在一级栏目banner图
 | |
|     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;
 | |
|     }
 | |
| 
 | |
|     // 获取所在一级栏目背景图
 | |
|     protected function firstBg($category)
 | |
|     {
 | |
|         // 一级栏目的banner
 | |
|         $firstCategoryId = Category::firstGradeId($category['path'], $category['id']);
 | |
| 
 | |
|         if ($firstCategoryId == $category['id']) {
 | |
|             $this->data['bg_pc']     = $category['bg'];
 | |
|             $this->data['bg_mobile'] = $category['bg_mobile'];
 | |
|         } else {
 | |
|             $firstCategory   = Category::where('id', $firstCategoryId)->field('id,title,bg,bg_mobile')->find();
 | |
|             $this->data['bg_pc']    = $firstCategory['bg'];
 | |
|             $this->data['bg_mobile'] = $firstCategory['bg_mobile'];
 | |
|         }
 | |
|     }
 | |
| }
 |