Tag.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace addons\cms\controller\api;
  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. protected $noNeedLogin = ['index'];
  16. public function index()
  17. {
  18. $config = get_addon_config('cms');
  19. $tag = null;
  20. $name = $this->request->param('name');
  21. if ($name && !is_numeric($name)) {
  22. $tag = TagModel::getByName($name);
  23. } else {
  24. $id = $name ? $name : $this->request->param('id', '');
  25. $tag = TagModel::get($id);
  26. }
  27. if (!$tag) {
  28. $this->error(__('No specified tags found'));
  29. }
  30. $filterList = [];
  31. $orderList = [];
  32. $orderby = $this->request->get('orderby', '');
  33. $orderway = $this->request->get('orderway', '', 'strtolower');
  34. $params = [];
  35. if ($orderby) {
  36. $params['orderby'] = $orderby;
  37. }
  38. if ($orderway) {
  39. $params['orderway'] = $orderway;
  40. }
  41. //默认排序字段
  42. $orders = [
  43. ['name' => 'default', 'field' => 'weigh', 'title' => __('Default')],
  44. ['name' => 'views', 'field' => 'views', 'title' => __('Views')],
  45. ['name' => 'id', 'field' => 'id', 'title' => __('Post date')],
  46. ];
  47. //获取排序列表
  48. list($orderList, $orderby, $orderway) = Service::getOrderList($orderby, $orderway, $orders, $params);
  49. $pageList = Archives::with(['channel'])
  50. ->where('status', 'normal')
  51. ->where('id', 'in', function ($query) use ($tag) {
  52. return $query->name('cms_taggable')->where('tag_id', $tag['id'])->field('archives_id');
  53. })
  54. ->order($orderby, $orderway)
  55. ->paginate(10, $config['pagemode'] == 'simple', ['type' => '\\addons\\cms\\library\\Bootstrap']);
  56. $pageList->appends(array_filter($params));
  57. foreach($pageList as $item){
  58. $item->append(['images_list']);
  59. }
  60. $this->success('',[
  61. 'filterList' => $filterList,
  62. 'orderList' => $orderList,
  63. 'pageList' => $pageList
  64. ]);
  65. }
  66. }