100 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?php
 | 
						|
 | 
						|
namespace app\controller;
 | 
						|
 | 
						|
use app\model\{CasesModel, Category};
 | 
						|
 | 
						|
class Cases extends Base
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * 详情
 | 
						|
     *
 | 
						|
     * @throws \think\db\exception\ModelNotFoundException
 | 
						|
     * @throws \think\db\exception\DbException
 | 
						|
     * @throws \think\db\exception\DataNotFoundException
 | 
						|
     */
 | 
						|
    public function detail($id = 0)
 | 
						|
    {
 | 
						|
        if ($id <= 0) {
 | 
						|
            return $this->error('错误页面');
 | 
						|
        }
 | 
						|
        $article = CasesModel::getById($id);
 | 
						|
        if (empty($article)) {
 | 
						|
            return $this->error('无此案例');
 | 
						|
        }
 | 
						|
 | 
						|
        $category = Category::getById($article['category_id']);
 | 
						|
 | 
						|
        $description = $article['seo_description'] ?: $this->system['seo_description'];
 | 
						|
        $keywords    = $article['seo_keywords'] ?: $this->system['seo_keywords'];
 | 
						|
        $title       = $article['seo_title'] ?: $article['title'].' | '.$this->system['seo_title'];
 | 
						|
 | 
						|
        $this->data['images'] = json_decode($article['images'], true);
 | 
						|
 | 
						|
        // 相关推荐
 | 
						|
        $recommendList = $this->recommendList($article, 6, $id);
 | 
						|
 | 
						|
        $this->data['recommendList'] = $recommendList;
 | 
						|
        $this->setSeo($title, $keywords, $description);
 | 
						|
        $this->data['item']          = $article;
 | 
						|
        $this->data['category']      = $category;
 | 
						|
        $this->data['categoryId']    = $category['id'];
 | 
						|
        $this->data['categoryPath']  = Category::categoryPath($category['path']);
 | 
						|
        $this->data['topCategoryId'] = Category::firstGradeId($category['path'], $category['id']);
 | 
						|
        return $this->view($category['template_detail'] ?? '');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 相关推荐
 | 
						|
     *
 | 
						|
     * @param $article
 | 
						|
     * @param  int  $num
 | 
						|
     * @param  int  $exceptId
 | 
						|
     * @return array
 | 
						|
     * @throws \think\db\exception\DataNotFoundException
 | 
						|
     * @throws \think\db\exception\DbException
 | 
						|
     * @throws \think\db\exception\ModelNotFoundException
 | 
						|
     */
 | 
						|
    private function recommendList($article, int $num = 0, int $exceptId = 0): array
 | 
						|
    {
 | 
						|
        return CasesModel::where('category_id', $article['category_id'])
 | 
						|
            ->where('visible', 1)
 | 
						|
            ->where('recommend', 1)
 | 
						|
            ->when($exceptId > 0, function ($q) use ($exceptId) {
 | 
						|
                $q->where('id', '<>', $exceptId);
 | 
						|
            })
 | 
						|
            ->order('sort', 'desc')
 | 
						|
            ->order('id', 'desc')
 | 
						|
            ->limit($num)
 | 
						|
            ->select()->toArray();
 | 
						|
    }
 | 
						|
 | 
						|
    //文章列表接口,获取栏目下文章列表
 | 
						|
    public function getList()
 | 
						|
    {
 | 
						|
        $categoryId = input('category_id/d', 0);
 | 
						|
        $page       = input('page/d', 1);
 | 
						|
        $size       = input('size/d', 10);
 | 
						|
 | 
						|
        if ($categoryId <= 0) {
 | 
						|
            return $this->json(1, '参数错误');
 | 
						|
        }
 | 
						|
        $category = Category::getById($categoryId);
 | 
						|
        if (empty($category)) {
 | 
						|
            return $this->json(2, '栏目不存在');
 | 
						|
        }
 | 
						|
 | 
						|
        $categoryIds = Category::where('parent_id', $categoryId)->column('id');
 | 
						|
        $items = CasesModel::whereIn('category_id', $categoryIds)
 | 
						|
                        ->where('visible', 1)
 | 
						|
                        ->page($page, $size)
 | 
						|
                        ->select()
 | 
						|
                        ->toArray();
 | 
						|
 | 
						|
        foreach ($items as $item) {
 | 
						|
            $item['image'] = $this->isMobile ? $item['image_mobile'] : $item['image'];
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->json(0, 'ok', $items);
 | 
						|
    }
 | 
						|
} |