147 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.3 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;
 | 
						|
    }
 | 
						|
 | 
						|
    // 获取所在一级栏目背景图
 | 
						|
    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;
 | 
						|
    }
 | 
						|
}
 |