Files
orico-official-website-old/app/mobile/controller/TopsNas.php
2025-02-18 09:20:54 +08:00

435 lines
13 KiB
PHP
Executable File

<?php
namespace app\mobile\controller;
use think\Loader;
class TopsNas extends BaseController
{
public function _initialize()
{
parent::_initialize();
parent::nasNavigation();
}
private function getBanners($typeids)
{
$banners = Loader::model("Banner")->alias('b')->field([
'b.id',
'b.typeid',
'bt.name' => 'typename',
'bt.description' => 'typedesc',
'b.name',
'b.categoryid',
'b.url',
'b.picture',
'b.alt',
'b.style',
'b.description' => 'desc',
'b.descolor',
'b.btncolor',
'b.videourl',
])
->join('banner_type bt', 'bt.stat= 0 and bt.id=b.typeid')
->where('b.stat', '=', 0)
->where('b.typeid', 'in', $typeids)
->order(['sort' => 'asc', 'id' => 'asc'])
->select();
$chucks = [];
foreach ($banners as $val) {
if (empty($chucks['typeid_' . $val['typeid']])) {
$chucks['typeid_' . $val['typeid']]['id'] = $val['typeid'];
$chucks['typeid_' . $val['typeid']]['name'] = $val['typename'];
$chucks['typeid_' . $val['typeid']]['desc'] = $val['typedesc'];
$chucks['typeid_' . $val['typeid']]['banners'] = [];
}
$link = $val['url'];
if (empty($val['url']) && !empty($val['categoryid'])) {
$link = url_rewrite('productsub', ['id' => $val['categoryid']]);
}
$chucks['typeid_' . $val['typeid']]['banners'][] = [
'id' => $val['id'],
'name' => $val['name'],
'link' => $link,
'picture' => $val['picture'],
'alt' => $val['alt'],
'style' => $val['style'],
'desc' => $val['desc'],
'desc_color' => $val['descolor'],
'btn_color' => $val['btncolor'],
'video_url' => $val['videourl'],
];
}
return $chucks;
}
/**
* nas专题页首页
*/
public function index()
{
$chucks = $this->getBanners([113, 114, 115, 116, 117, 118]);
$data = [
'swiper' => $chucks['typeid_113'],
'product' => $chucks['typeid_114'],
'video' => $chucks['typeid_115'],
'plan' => $chucks['typeid_116'],
'weline' => $chucks['typeid_117'],
'download' => $chucks['typeid_118'],
];
$this->assign("data", $data);
return $this->fetch();
}
/**
* nas新品公测
*/
public function beta()
{
return $this->fetch();
}
public function download()
{
return $this->fetch();
}
public function download_cyber()
{
return $this->fetch();
}
/**
* nas 客户合作
*/
public function cooperation()
{
$chucks = $this->getBanners([123, 124, 125]);
$data = [
'image_text' => $chucks['typeid_123'],
'advantage' => $chucks['typeid_124'],
'expectation' => $chucks['typeid_125'],
];
$data['advantage']['banners'] = array_chunk($data['advantage']['banners'], 2);
$this->assign("data", $data);
return $this->fetch();
}
/**
* getProductSeries 获取产品系列
*/
private function getProductSeries()
{
return Loader::model('ProductSeries')
->field([
'id',
'name',
])
->where('stat', '=', 0)
->where('isshow', '=', 1)
->order(['id' => 'asc', 'sort' => 'asc'])
->select();
}
/**
* getCategoryTree 获取特定文章分类树
*/
private function getCategoryTree($cid = 36)
{
// 设备
$category = Loader::model('ArticleCategory')
->field([
'id',
'pid',
'name',
'picture',
])
->where('isshow', '=', 1)
->where('country_code', '=', $this->country_code)
->order(['sort' => 'asc'])
->select();
$category_array = collection($category)->toArray();
$category_tree = $this->buildTree($category_array, $cid);
return $category_tree;
}
/**
* getCategoryChildren 获取子孙分类id
*/
private function getCategoryChildren($category)
{
return \think\Db::query("
SELECT t2.id
FROM (
SELECT
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM cod_article_category WHERE FIND_IN_SET(pid, _id)) AS parent_id
FROM
(SELECT @r := $category) vars, cod_article_category h
WHERE @r <> 0) t1
JOIN cod_article_category t2
ON FIND_IN_SET(t2.pid, t1._id)
ORDER BY t2.id;
");
}
/**
* getProductSeriesIdMaps 获取文章系列型号
*/
private function getProductSeriesIdMaps($article)
{
$series = [];
$array_items = array_column($article, 'product_series');
array_walk($array_items, function ($val) use (&$series) {
$series = array_merge($series, explode(',', $val));
});
if (!empty($series)) {
$product_series = Loader::model('ProductSeries')
->where('id', 'in', array_unique($series))
->column('name', 'id');
foreach ($article as $key => $val) {
$p_series = explode(',', $val['product_series']);
$p_item = [];
foreach ($p_series as $k => $v) {
if (!empty($product_series[$v])) {
$p_item[] = $product_series[$v];
}
}
$article[$key]['product_series'] = $p_item;
}
}
return $article;
}
/**
* guide 使用教程
*/
public function guide()
{
$params = [
'keywords' => input('get.keywords'),
'series' => input('get.series'),
'device' => input('get.device', 38),
'category' => input('get.category'),
'page' => input('get.page', 1),
'size' => input('get.size', 10),
];
// 型号
$this->assign('series', $this->getProductSeries());
// 设备
$this->assign('category', $this->getCategoryTree(36));
// 文章列表
$article = Loader::model('Article')
->field([
'id',
'name',
'description',
'product_series',
'content',
])
->where('stat', '=', 0)
->where('country_code', '=', $this->country_code)
->where(function ($query) use ($params) {
if (!empty($params['keywords'])) {
$query->where(function ($q) use ($params) {
$q->where('name', 'like', '%' . $params['keywords'] . '%')
->whereOr(sprintf('MATCH(content) AGAINST("%s" IN BOOLEAN MODE)', $params['keywords']));
});
}
if (!empty($params['device']) && empty($params['category'])) {
$params['category'] = $params['device'];
}
$children = $this->getCategoryChildren($params['category']);
$categorys = array_merge([$params['category']], array_column($children, 'id'));
$query->where('cid', 'in', $categorys);
if (!empty($params['series'])) {
$query->where(sprintf('find_in_set(%s, `product_series`)', $params['series']));
}
})
->order(['id' => 'desc', 'sort' => 'desc'])
->paginate($params['size']);
$list = $this->getProductSeriesIdMaps($article->items());
$this->assign('list', $list);
$this->assign('page', $article->render());
return $this->fetch();
}
// 根据分类获取文章
private function getArticleByCategory($categorys, $limit = null)
{
if (!is_array($categorys)) {
throw new \Exception('请确认分类正确');
}
if (empty($categorys)) {
return [];
}
$sub_query = Loader::model('Article')
->field([
'id',
'cid',
'name',
'sort'
])
->where('stat', '=', 0)
->where('cid', '=', $categorys[0]['id'])
->where('country_code', '=', $this->country_code)
->order(['sort' => 'asc', 'id' => 'desc']);
if (!empty($limit)) {
$sub_query = $sub_query->limit($limit);
}
$sub_query = $sub_query->buildSql();
$model = \think\Db::table($sub_query . ' a');
foreach ($categorys as $key => $val) {
if ($key == 0) continue;
$model->union(function($query) use($val, $limit) {
$query->name('article')->field([
'id',
'cid',
'name',
'sort'
])
->where('stat', '=', 0)
->where('cid', '=', $val['id'])
->where('country_code', '=', $this->country_code)
->order(['sort' => 'asc', 'id' => 'desc']);
if (!empty($limit)) {
$query->limit($limit);
}
});
}
$map = [];
$data = $data = $model->select();
foreach ($data as $key => $val) {
$map['cid_' . $val['cid']][] = $val;
}
return $map;
}
/**
* 帮助中心
*/
public function helper()
{
// 获取分类
$categorys = $this->getCategoryTree(76);
// 获取文章
$articles = $this->getArticleByCategory($categorys, 3);
// 组装数据
foreach ($categorys as $key => &$val) {
if (!isset($val['articles'])) {
$val['articles'] = [];
}
if (isset($articles['cid_' . $val['id']])) {
$items = $articles['cid_' . $val['id']];
foreach ($items as $k => $v) {
$val['articles'][] = [
'id' => $v['id'],
'name' => $v['name']
];
}
}
}
unset($val);
$this->assign('categorys', $categorys);
$banners = $this->getBanners(127);
if (!empty($banners)) {
$banners = $banners['typeid_127']['banners'];
}
$this->assign('banners', $banners);
$this->assign('banners_size', count($banners));
return $this->fetch();
}
// 搜索帮助文章
public function helper_search()
{
$base_category = 76;
$keywords = request()->param('keywords');
$articles = Loader::model('Article')
->field([
'id',
'name',
'sort',
])
->where('stat', '=', 0)
->where('country_code', '=', $this->country_code)
->where('cid', 'in', function($query) use($base_category) {
$query->name('article_category')
->field(['id'])
->where('id', '=', $base_category)
->whereOr('pid', '=', $base_category);
})
->where(function($query) use($keywords) {
if (!empty($keywords)) {
$query->where('name', 'like', '%' . $keywords . '%');
}
})
->order(['sort' => 'asc', 'id' => 'desc'])
->select();
return json([
'code' => 0,
'message' => '获取成功',
'data' => $articles
]);
}
/**
* 帮助文章详情
*/
public function helper_detail()
{
$id = request()->param('id');
$article = Loader::model('Article')->where('id', '=', $id)->find();
if (request()->isAjax()) {
return json([
'code' => 0,
'message' => '获取成功',
'data' => $article
]);
} else {
// 获取分类
$categorys = $this->getCategoryTree(76);
// 获取文章
$articles = $this->getArticleByCategory($categorys, );
// 组装数据
foreach ($categorys as $key => &$val) {
if (!isset($val['articles'])) {
$val['articles'] = [];
}
if (isset($articles['cid_' . $val['id']])) {
$items = $articles['cid_' . $val['id']];
foreach ($items as $k => $v) {
$val['articles'][] = [
'id' => $v['id'],
'name' => $v['name']
];
}
}
}
unset($val);
$this->assign('categorys', $categorys);
$this->assign('article', $article);
$this->assign('cid', request()->param('cid'));
}
return $this->fetch();
}
}