| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- <?php
- namespace addons\cms\controller;
- use addons\cms\library\Service;
- use addons\cms\model\Cms as CmsModel;
- use addons\cms\model\Page as PageModel;
- use think\facade\Db;
- class Index extends Cmsbase
- {
- protected $noNeedLogin = ['*'];
- protected $noNeedRight = [];
- protected $cms_model = null;
- protected function initialize()
- {
- parent::initialize();
- $this->cms_model = new CmsModel;
- }
- public function index()
- {
- $page = $this->request->param('page/d', 1);
- $seo = seo();
- $this->assign([
- 'SEO' => $seo,
- 'page' => $page,
- ]);
- if ($this->request->isAjax()) {
- $this->success('', '', $this->fetch('/common/index_ajax'));
- }
- return $this->fetch('/index');
- }
- public function lists()
- {
- $cat = $this->request->param('catid/d', 0);
- if (empty($cat)) {
- $cat = $this->request->param('catdir/s', '');
- }
- $page = $this->request->param('page/d', 1);
- $category = getCategory($cat);
- if (empty($category)) {
- throw new \think\exception\HttpException(404, '栏目不存在!');
- }
- $catid = $category['id'];
- $setting = $category['setting'];
- if ($category['type'] == 2) {
- $template = $setting['category_template'] ?? 'category';
- $template_list = $setting['list_template'] ?? 'list';
- $template = $category['child'] ? $template : $template_list;
- $seo = seo($catid, '', $setting['meta_description'], $setting['meta_keywords']);
- } elseif ($category['type'] == 1) {
- $template = $setting['page_template'] ?? 'page';
- [$cacheKey, $cacheExpire] = Service::getCacheConfig('page-' . $catid . '-' . $this->siteLang);
- $info = PageModel::getPageWithLangByCatid($catid, $this->siteLang);
- if (empty($info)) {
- throw new \think\exception\HttpException(404, '单页不存在!');
- }
- PageModel::where('id', $info['id'])->inc('hits')->save();
- $keywords = $info['keywords'] ?? $setting['meta_keywords'];
- $description = $info['description'] ?? $setting['meta_description'];
- $seo = seo($catid, '', $description, $keywords);
- $this->assign($info);
- if ((int)$catid === 26 && $this->request->has('project', 'get')) {
- $projectId = $this->request->param('project/d', 0);
- $supportProject = [];
- if ($projectId > 0) {
- $supportCatIds = [5, 6, 7];
- foreach ($supportCatIds as $supportCatId) {
- $project = $this->cms_model->getContent(getCategory($supportCatId, 'modelid'), ['catid' => $supportCatId, 'id' => $projectId], true);
- if (!empty($project)) {
- $supportProject = $project;
- $supportProject['source_catid'] = $supportCatId;
- break;
- }
- }
- }
- if (empty($supportProject)) {
- throw new \think\exception\HttpException(404, '产品不存在!');
- }
- $supportSections = [
- 'video' => ['catid' => 34, 'field' => 'url', 'projectField' => 'project_id'],
- 'faq' => ['catid' => 25, 'field' => 'url', 'projectField' => 'project_id'],
- 'guide' => ['catid' => 35, 'field' => 'url', 'projectField' => 'project_id'],
- 'download' => ['catid' => 40, 'field' => 'fileaddress', 'projectField' => 'project_id'],
- ];
- foreach ($supportSections as $sectionKey => $sectionConfig) {
- $sectionCatid = (int) $sectionConfig['catid'];
- $sectionTabs = Db::name('cms_category')->where('parentid', $sectionCatid)->where('status', 1)->order('listorder ASC,id ASC')->select()->toArray();
- $sectionMap = [];
- $sectionDirect = [];
- $buildProjectWhere = function ($catIds) use ($sectionConfig, $projectId) {
- $catIds = array_values(array_filter(array_map('intval', (array)$catIds)));
- if (empty($catIds)) {
- return '';
- }
- $where = '`catid` in(' . implode(',', $catIds) . ') AND `status` = 1';
- if (!empty($sectionConfig['projectField'])) {
- $where .= " AND `{$sectionConfig['projectField']}` = {$projectId}";
- }
- return $where;
- };
- if (!empty($sectionTabs)) {
- foreach ($sectionTabs as $sectionTab) {
- $childTabs = Db::name('cms_category')->where('parentid', $sectionTab['id'])->where('status', 1)->order('listorder ASC,id ASC')->select()->toArray();
- $tabCatIds = [$sectionTab['id']];
- if (!empty($childTabs)) {
- foreach ($childTabs as $childTab) {
- $tabCatIds[] = (int)$childTab['id'];
- }
- }
- $where = $buildProjectWhere($tabCatIds);
- $sectionMap[$sectionTab['id']] = [];
- if ($where !== '') {
- $sectionMap[$sectionTab['id']] = $this->cms_model->getList(getCategory($sectionTab['id'], 'modelid'), $where, 1, '*', 'listorder ASC,id DESC', 24, false);
- }
- }
- }
- $directWhere = $buildProjectWhere([$sectionCatid]);
- if ($directWhere !== '') {
- $sectionDirect = $this->cms_model->getList(getCategory($sectionCatid, 'modelid'), $directWhere, 1, '*', 'listorder ASC,id DESC', 24, false);
- }
- $hasSectionContent = !empty($sectionDirect);
- if (!$hasSectionContent && !empty($sectionMap)) {
- foreach ($sectionMap as $sectionItems) {
- if (!empty($sectionItems)) {
- $hasSectionContent = true;
- break;
- }
- }
- }
- $assignPrefix = 'support' . ucfirst($sectionKey);
- $this->assign($assignPrefix . 'Tabs', $sectionTabs);
- $this->assign($assignPrefix . 'Map', $sectionMap);
- $this->assign($assignPrefix . 'Direct', $sectionDirect);
- $this->assign($assignPrefix . 'Field', $sectionConfig['field']);
- $this->assign($assignPrefix . 'HasContent', $hasSectionContent);
- }
- $this->assign('supportProject', $supportProject);
- $this->assign('supportProjectId', $projectId);
- }
- }
- $template = pathinfo($template, PATHINFO_FILENAME);
- $top_parentid = $category['arrparentid'][0] ?? $catid;
- unset($category['id']);
- $this->assign([
- 'category' => $category,
- 'top_parentid' => $top_parentid,
- 'SEO' => $seo,
- 'catid' => $catid,
- 'page' => $page,
- 'modelid' => $category['modelid'],
- ]);
- if ($this->request->isAjax()) {
- $this->success('', '', $this->fetch('/common/' . $template . '_ajax'));
- }
- return $this->fetch('/' . $template);
- }
- public function shows()
- {
- $id = $this->request->param('id/d', 0);
- $cat = $this->request->param('catid/d', 0);
- if (empty($cat)) {
- $cat = $this->request->param('catdir/s', '');
- }
- $page = $this->request->param('page/d', 1);
- $page = max(1, $page);
- $category = getCategory($cat);
- if (empty($category)) {
- throw new \think\exception\HttpException(404, '栏目不存在!');
- }
- $catid = $category['catid'] = $category['id'];
- unset($category['id']);
- $modelid = $category['modelid'];
- $modelInfo = cms_cache('Model')[$modelid] ?? '';
- if (empty($modelInfo)) {
- throw new \think\exception\HttpException(404, '模型不存在!');
- }
- Db::name($modelInfo['tablename'])->where('id', $id)->setInc('hits');
- [$cacheKey, $cacheExpire] = Service::getCacheConfig('show-' . $catid . '-' . $id . '-' . $this->siteLang);
- $info = $this->cms_model->getContent($modelid, ['catid' => $catid, 'id' => $id], true, '*', '', $cacheKey, $cacheExpire);
- if (!$info) {
- throw new \think\exception\HttpException(404, '内容不存在!');
- }
- if ($info['status'] !== 1 && !\app\admin\library\Auth::instance()->isLogin() && $info['user_id'] !== $this->auth->id) {
- throw new \think\exception\HttpException(403, '内容未审核或没有权限!');
- }
- $paginator = isset($info['content']) ? strpos($info['content'], '[page]') : false;
- if ($paginator !== false) {
- $contents = array_filter(explode('[page]', $info['content']));
- $total = count($contents);
- $pages = \addons\cms\paginator\Page::make([], 1, $page, $total, false, ['path' => $this->request->baseUrl()]);
- if ($paginator < 7) {
- $info['content'] = $contents[$page];
- } else {
- $info['content'] = $contents[$page - 1];
- }
- $this->assign('pages', $pages);
- } else {
- $this->assign('pages', '');
- }
- $setting = $category['setting'];
- $template = isset($setting['show_template']) ? pathinfo($setting['show_template'], PATHINFO_FILENAME) : 'show';
- $info['readpoint'] = $info['readpoint'] ?? 0;
- $info['paytype'] = $info['paytype'] ?? 1;
- $is_pay = 1;
- $is_part_content_pay = 0;
- if (isset($info['content'])) {
- $info['content'] = str_replace(['###paidstart###', '###paidend###'], ['<paid>', '</paid>'], $info['content']);
- }
- if ($info['readpoint'] > 0) {
- $is_pay = \addons\cms\model\Order::check_payment($info);
- if (!$is_pay) {
- if (isset($info['content'])) {
- $pattern = '/<paid>(.*?)<\/paid>/is';
- if (preg_match($pattern, $info['content'])) {
- $info['content'] = preg_replace($pattern, "<div class='allow_visitor'>此处内容需要付费后方可阅读</div>", $info['content']);
- $is_part_content_pay = 1;
- }
- }
- } else {
- $is_pay = 1;
- }
- }
- $title = $info['title'] ?? ($setting['meta_title'] ?? '');
- $keywords = $info['keywords'] ?? ($setting['meta_keywords'] ?? '');
- $description = $info['description'] ?? ($setting['meta_description'] ?? '');
- $seo = seo($catid, $title, $description, $keywords);
- $top_parentid = $category['arrparentid'][0] ?? $catid;
- if ($template === 'show_fqa') {
- $fqaProjectId = (int) ($info['project_id'] ?? 0);
- $fqaChannels = [25, 35];
- $fqaSidebar = [];
- foreach ($fqaChannels as $channelCatid) {
- $channel = getCategory($channelCatid);
- if (empty($channel)) {
- continue;
- }
- $children = Db::name('cms_category')->where('parentid', $channelCatid)->where('status', 1)->order('listorder ASC,id ASC')->select()->toArray();
- $groups = [];
- if (!empty($children)) {
- foreach ($children as $child) {
- $where = "`catid` = {$child['id']} AND `status` = 1";
- if ($fqaProjectId > 0) {
- $where .= " AND `project_id` = {$fqaProjectId}";
- }
- $items = $this->cms_model->getList(getCategory($child['id'], 'modelid'), $where, 1, '*', 'listorder ASC,id DESC', 100, false);
- if (!empty($items)) {
- $groups[] = [
- 'title' => $child['catname'],
- 'items' => $items,
- ];
- }
- }
- } else {
- $where = "`catid` = {$channelCatid} AND `status` = 1";
- if ($fqaProjectId > 0) {
- $where .= " AND `project_id` = {$fqaProjectId}";
- }
- $items = $this->cms_model->getList(getCategory($channelCatid, 'modelid'), $where, 1, '*', 'listorder ASC,id DESC', 100, false);
- if (!empty($items)) {
- $groups[] = [
- 'title' => $channel['catname'],
- 'items' => $items,
- ];
- }
- }
- $fqaSidebar[] = [
- 'title' => $channel['catname'],
- 'groups' => $groups,
- ];
- }
- $this->assign('fqaSidebar', $fqaSidebar);
- }
- $this->assign($info);
- $this->assign([
- 'category' => $category,
- 'is_part_content_pay' => $is_part_content_pay,
- 'is_pay' => $is_pay,
- 'top_parentid' => $top_parentid,
- 'SEO' => $seo,
- 'catid' => $catid,
- 'page' => $page,
- 'modelid' => $modelid,
- ]);
- return $this->fetch('/' . $template);
- }
- }
|