| 
									
										
										
										
											2022-10-14 14:00:42 +08:00
										 |  |  | <?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, '栏目不存在'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-14 14:21:53 +08:00
										 |  |  |         $categoryIds = Category::where('parent_id', $categoryId)->column('id'); | 
					
						
							|  |  |  |         $items = CasesModel::whereIn('category_id', $categoryIds) | 
					
						
							|  |  |  |                         ->where('visible', 1) | 
					
						
							|  |  |  |                         ->page($page, $size) | 
					
						
							|  |  |  |                         ->select() | 
					
						
							|  |  |  |                         ->toArray(); | 
					
						
							| 
									
										
										
										
											2022-10-14 14:00:42 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         foreach ($items as $item) { | 
					
						
							|  |  |  |             $item['image'] = $this->isMobile ? $item['image_mobile'] : $item['image']; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $this->json(0, 'ok', $items); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |