Tag.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace addons\cms\controller;
  3. use addons\cms\library\Service;
  4. use addons\cms\model\Archives;
  5. use addons\cms\model\Tag as TagModel;
  6. use addons\cms\model\Taggable;
  7. use think\Config;
  8. /**
  9. * 标签控制器
  10. * Class Tag
  11. * @package addons\cms\controller
  12. */
  13. class Tag extends Base
  14. {
  15. public function index()
  16. {
  17. $config = get_addon_config('cms');
  18. $tag = null;
  19. $name = $this->request->param('name');
  20. $diyname = $this->request->param('diyname');
  21. $name = $name ? $name : $diyname;
  22. if ($name && !is_numeric($name)) {
  23. $tag = TagModel::getByName($name);
  24. } else {
  25. $id = $name ? $name : $this->request->param('id', '');
  26. $tag = TagModel::get($id);
  27. }
  28. if (!$tag) {
  29. $this->error(__('No specified tags found'));
  30. }
  31. $filterList = [];
  32. $orderList = [];
  33. $orderby = $this->request->get('orderby', '');
  34. $orderway = $this->request->get('orderway', '', 'strtolower');
  35. $params = [];
  36. if ($orderby) {
  37. $params['orderby'] = $orderby;
  38. }
  39. if ($orderway) {
  40. $params['orderway'] = $orderway;
  41. }
  42. //默认排序字段
  43. $orders = [
  44. ['name' => 'default', 'field' => 'weigh', 'title' => __('Default')],
  45. ['name' => 'views', 'field' => 'views', 'title' => __('Views')],
  46. ['name' => 'id', 'field' => 'id', 'title' => __('Post date')],
  47. ];
  48. //获取排序列表
  49. list($orderList, $orderby, $orderway) = Service::getOrderList($orderby, $orderway, $orders, $params);
  50. $pageList = Archives::with(['channel'])
  51. ->where('status', 'normal')
  52. ->where('id', 'in', function ($query) use ($tag) {
  53. return $query->name('cms_taggable')->where('tag_id', $tag['id'])->field('archives_id');
  54. })
  55. ->order($orderby, $orderway)
  56. ->paginate(10, $config['pagemode'] == 'simple', ['type' => '\\addons\\cms\\library\\Bootstrap']);
  57. $pageList->appends(array_filter($params));
  58. $this->view->assign("__FILTERLIST__", $filterList);
  59. $this->view->assign("__ORDERLIST__", $orderList);
  60. $this->view->assign("__TAG__", $tag);
  61. $this->view->assign("__TAGS__", $tag);
  62. $this->view->assign("__PAGELIST__", $pageList);
  63. //设置TKD
  64. Config::set('cms.title', isset($tag['seotitle']) && $tag['seotitle'] ? $tag['seotitle'] : $tag['name']);
  65. Config::set('cms.keywords', $tag['keywords']);
  66. Config::set('cms.description', $tag['description']);
  67. return $this->view->fetch('/tag');
  68. }
  69. }