131 lines
4.5 KiB
PHP
Executable File
131 lines
4.5 KiB
PHP
Executable File
<?php
|
|
|
|
namespace app\controller;
|
|
|
|
use app\model\{ProductModel,
|
|
Category,
|
|
Model
|
|
};
|
|
use page\DxtcPageA;
|
|
use think\db\exception\DataNotFoundException;
|
|
use think\db\exception\DbException;
|
|
use think\db\exception\ModelNotFoundException;
|
|
use think\Paginator;
|
|
|
|
class Product extends Base
|
|
{
|
|
//详情
|
|
public function detail($id = 0)
|
|
{
|
|
if ($id <= 0) {
|
|
return $this->error('错误页面');
|
|
}
|
|
$article = ProductModel::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'];
|
|
|
|
$pathArr = explode(',', $category['path']);
|
|
$secondCategoryId = $pathArr[3] ?: $article['category_id'];
|
|
$secondCategory = Category::getById($secondCategoryId);
|
|
|
|
$this->data['images'] = json_decode($article['images'], true);
|
|
|
|
// 相关推荐
|
|
$recommendList = $this->recommendList($article, 3);
|
|
|
|
$this->data['recommendList'] = $recommendList;
|
|
$this->setSeo($title, $keywords, $description);
|
|
$this->data['item'] = $article;
|
|
$this->data['category'] = $category;
|
|
$this->data['secondInfo'] = $secondCategory;
|
|
$this->data['categoryId'] = $category['id'];
|
|
$this->data['topCategoryId'] = Category::firstGradeById($category['id']) ;
|
|
return $this->view($category['template_detail'] ?? '');
|
|
}
|
|
|
|
/**
|
|
* 相关推荐
|
|
*
|
|
* @param $article
|
|
* @param $num
|
|
* @return array
|
|
* @throws DataNotFoundException
|
|
* @throws DbException
|
|
* @throws ModelNotFoundException
|
|
*/
|
|
private function recommendList($article, $num)
|
|
{
|
|
return ProductModel::where('category_id', $article['category_id'])
|
|
->where('visible', 1)
|
|
->order('sort', 'desc')
|
|
->order('id', 'desc')
|
|
->limit($num)
|
|
->select()->toArray();
|
|
}
|
|
|
|
//列表页
|
|
public function index()
|
|
{
|
|
$second = input('second/d', 0);
|
|
$third = input('third/d', 0);
|
|
|
|
$first = Category::getByRuleAlias(Category::RULE_PRODUCT);//产品顶级分类
|
|
$categoryList = Category::getChildrenByParentId($first['id'], false);
|
|
$secondMenus = [];
|
|
$secondChildren = [];
|
|
foreach ($categoryList as $k => $cate) {
|
|
if ($cate['parent_id'] == $first['id']) {
|
|
$secondMenus[$cate['id']] = $cate;
|
|
unset($categoryList[$k]);
|
|
}
|
|
}
|
|
|
|
foreach ($categoryList as $thirdCate) {
|
|
foreach ($secondMenus as $secondCate) {
|
|
if (!isset($secondChildren[$secondCate['id']])) {
|
|
$secondChildren[$secondCate['id']] = [];
|
|
}
|
|
if ($thirdCate['parent_id'] == $secondCate['id']) {
|
|
$secondChildren[$secondCate['id']][] = $thirdCate;
|
|
}
|
|
}
|
|
}
|
|
|
|
$secondInfo = $second == 0 ? array_values($secondMenus)[0] : $secondMenus[$second];
|
|
$thirdMenus = $secondChildren[$secondInfo['id']];
|
|
|
|
$this->data['thirdId'] = $third;
|
|
|
|
|
|
$description = $first['seo_description'] ?: $this->system['seo_description'];
|
|
$keywords = $first['seo_keywords'] ?: $this->system['seo_keywords'];
|
|
$title = $first['seo_title'] ?: $first['title'].' | '.$this->system['seo_title'];
|
|
$this->setSeo($title, $keywords, $description);
|
|
$listSort = ['a.sort' => 'desc'];
|
|
|
|
$this->data['secondInfo'] = $secondInfo;
|
|
$this->data['secondMenus'] = $secondMenus;
|
|
$this->data['thirdMenus'] = $thirdMenus;
|
|
|
|
// 自定义分页驱动
|
|
app('think\App')->bind(Paginator::class, DxtcPageA::class);
|
|
|
|
$cateId = $third > 0 ? $third : $secondInfo['id'];
|
|
$queryParam = ['second' => $secondInfo['id'], 'third' => $third];
|
|
$items = ProductModel::getList($cateId, $first['number'], '', [], 1, $listSort, false, $queryParam);
|
|
|
|
$this->data['items'] = $items;
|
|
$this->data['category'] = $first;
|
|
$this->data['categoryId'] = $first['id'];
|
|
$this->data['bodyClass'] = 'main';
|
|
$this->data['topCategoryId'] = Category::firstGradeById($first['id']) ;
|
|
return $this->view();
|
|
}
|
|
} |