215 lines
7.8 KiB
PHP
Executable File
215 lines
7.8 KiB
PHP
Executable File
<?php
|
||
|
||
namespace app\controller;
|
||
|
||
use app\model\{Article as MArticle,
|
||
Category,
|
||
Model
|
||
};
|
||
use page\DxtcPageA;
|
||
use think\Collection;
|
||
use think\Paginator;
|
||
|
||
class Article extends Base
|
||
{
|
||
|
||
//详情
|
||
public function detail($id = 0)
|
||
{
|
||
if ($id <= 0) {
|
||
return $this->error('错误页面');
|
||
}
|
||
$article = MArticle::getById($id);
|
||
if (empty($article)) {
|
||
return $this->error('无此文章');
|
||
}
|
||
|
||
MArticle::updateById($id, ['views' => $article['views'] + 1]);
|
||
$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($this->isMobile ? $article['imgs_mobile'] :$article['imgs'], true);
|
||
$this->data['resource'] = json_decode($this->isMobile ? $article['other_text2'] :$article['other_text1'], true);
|
||
|
||
$this->setSeo($title, $keywords, $description);
|
||
$this->data['firstBg'] = $this->firstBanner($category);
|
||
$this->data['item'] = MArticle::parseInfo($article);
|
||
$this->data['category'] = $category;
|
||
// $this->data['secondInfo'] = $secondCategory;
|
||
$this->data['categoryId'] = $category['id'];
|
||
$this->data['categoryPath'] = Category::categoryPath($category['path']);
|
||
$this->data['topCategoryId'] = Category::firstGradeId($category['path'], $category['id']);
|
||
$this->detailPrevAndNext($article);
|
||
$this->detailRecommendList($article, $category['recommend_num']);
|
||
return $this->view($category['template_detail'] ?? 'news_detail');
|
||
}
|
||
|
||
// 上下篇
|
||
private function detailPrevAndNext($article)
|
||
{
|
||
$prev = [];
|
||
$next = [];
|
||
|
||
if ($article) {
|
||
$sortCategoryIds = [];
|
||
|
||
/*
|
||
$caseCategoryIds = Category::getCategoryWithChildrenIds(Category::CATEGORY_COMMUNITY);
|
||
if(in_array($article['category_id'], $caseCategoryIds)) {
|
||
$sortCategoryIds = $caseCategoryIds;
|
||
}
|
||
*/
|
||
|
||
if (!empty($sortCategoryIds)) {
|
||
$prevWhere = [
|
||
['sort', '>', $article['sort']],
|
||
['category_id', 'in', $sortCategoryIds]
|
||
];
|
||
$prevOrder = ['a.sort' => 'asc'];
|
||
$prev = MArticle::getPrevArticleByTimeAndCategoryIds($prevWhere, $prevOrder);
|
||
$nextWhere = [
|
||
['sort', '<', $article['sort']],
|
||
['category_id', 'in', $sortCategoryIds]
|
||
];
|
||
$nextOrder = ['sort' => 'desc'];
|
||
$next = MArticle::getNextArticleByTimeAndCategoryIds($nextWhere, $nextOrder);
|
||
} else {
|
||
$prev = MArticle::getPrevArticleBySortAndCategoryId($article['sort'], $article['category_id']);
|
||
|
||
$next = MArticle::getNextArticleBySortAndCategoryId($article['sort'], $article['category_id']);
|
||
|
||
}
|
||
}
|
||
|
||
$this->data['prev'] = $prev;
|
||
$this->data['next'] = $next;
|
||
}
|
||
|
||
// 相关推荐
|
||
private function detailRecommendList($article, $num = 8)
|
||
{
|
||
// 目前规则为:除当前以外的同栏目下最新8个
|
||
$orderList = ['top' => 'desc', 'recommend' => 'desc', 'id' => 'desc'];
|
||
$list = MArticle::getLastTopList($article['category_id'], $num, [$article['id']], $orderList);
|
||
|
||
$this->data['recommendList'] = $list;
|
||
}
|
||
|
||
//列表页
|
||
public function index($categoryId = 0)
|
||
{
|
||
$categoryId = empty($categoryId) ? $this->request->param("category_id") : $categoryId;
|
||
$category = Category::getById($categoryId);
|
||
if (!$category || $category['model_id'] != Model::MODEL_ARTICLE) {
|
||
return $this->error('错误页面');
|
||
}
|
||
|
||
$description = $category['seo_description'] ?: $this->system['seo_description'];
|
||
$keywords = $category['seo_keywords'] ?: $this->system['seo_keywords'];
|
||
$title = $category['seo_title'] ?: $category['title'].' | '.$this->system['seo_title'];
|
||
$this->setSeo($title, $keywords, $description);
|
||
|
||
// 自定义分页驱动
|
||
app('think\App')->bind(Paginator::class, DxtcPageA::class);
|
||
|
||
$this->data['categoryPath'] = Category::categoryPath($category['path']);
|
||
$this->data['topCategoryId'] = Category::firstGradeId($category['path'], $categoryId);
|
||
|
||
$items = MArticle::getList($categoryId, $category['number'] ?? 10);
|
||
foreach ($items as $item) {
|
||
$item['uri'] = archiveGetUri($item);
|
||
$item['create_date_d'] = date('d', $item['create_time']);
|
||
$item['create_date_y_m'] = date('Y.m', $item['create_time']);
|
||
}
|
||
$this->data['items'] = $items;
|
||
$this->data['category'] = $category;
|
||
|
||
$this->data['categoryId'] = $categoryId;
|
||
$this->data['topCategoryId'] = Category::firstGradeId($category['path'], $categoryId);
|
||
$this->data['bodyClass'] = 'main';
|
||
|
||
return $this->view($category['template_list'] ?? '/news_list');
|
||
}
|
||
|
||
//文章列表接口,获取栏目下文章列表
|
||
public function ajaxList()
|
||
{
|
||
$categoryId = input('category_id/d', 0);
|
||
$keyword = input('keyword/s', '');
|
||
$page = input('page/s', 1);
|
||
|
||
if ($categoryId <= 0) {
|
||
return $this->json(1, '参数错误');
|
||
}
|
||
$category = Category::getById($categoryId);
|
||
if (empty($category)) {
|
||
return $this->json(2, '栏目不存在');
|
||
}
|
||
|
||
$items = MArticle::findListByWhere(["category_id" => $categoryId], $page, $category['number']);
|
||
|
||
foreach ($items as $item) {
|
||
$item['uri'] = archiveGetUri($item);
|
||
$item['create_date_d'] = date('d', $item['create_time']);
|
||
$item['create_date_y_m'] = date('Y-m', $item['create_time']);
|
||
}
|
||
|
||
return $this->json(0, 'ok', $items);
|
||
}
|
||
|
||
//文章列表接口,获取栏目下文章列表
|
||
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, '栏目不存在');
|
||
}
|
||
|
||
$items = MArticle::findListByWhere(["category_id" => $categoryId], $page, $size);
|
||
|
||
foreach ($items as $item) {
|
||
$item['uri'] = archiveGetUri($item);
|
||
$item['create_date_d'] = date('d', $item['create_time']);
|
||
$item['create_date_y_m'] = date('Y-m', $item['create_time']);
|
||
$item['src'] = $this->isMobile ? $item['src_mobile'] : $item['src'];
|
||
}
|
||
|
||
return $this->json(0, 'ok', $items);
|
||
}
|
||
|
||
//获取活动列表
|
||
public function getActivity()
|
||
{
|
||
$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, '栏目不存在');
|
||
}
|
||
|
||
$items = MArticle::findListByWhere(["category_id" => $categoryId, 'is_prev' => 0], $page, $size);
|
||
|
||
foreach ($items as $item) {
|
||
$item['uri'] = archiveGetUri($item);
|
||
$item['src'] = $this->isMobile ? $item['src_mobile'] : $item['src'];
|
||
}
|
||
|
||
return $this->json(0, 'ok', $items);
|
||
}
|
||
} |