PageController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Services\LiquidRenderer;
  5. use App\Models\SitePage;
  6. class PageController extends Controller
  7. {
  8. protected $liquidRenderer;
  9. public function __construct(LiquidRenderer $liquidRenderer)
  10. {
  11. $this->liquidRenderer = $liquidRenderer;
  12. }
  13. /**
  14. * Display a listing of the pages.
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function list()
  19. {
  20. $cacheKey = "page_list_dist_" . getDistId() . "_page_" . request()->get('page', 1);
  21. $pages = SitePage::paginate(10)->where('dist_id', getDistId())->where('status', '1'); // 每页显示10个页面
  22. return $this->liquidRenderer->render('pages.list', ['pages' => $pages],$cacheKey);
  23. }
  24. /**
  25. * Display the specified page.
  26. *
  27. * @param string $slug
  28. * @return \Illuminate\Http\Response
  29. */
  30. public function detail($slug)
  31. {
  32. $recent_pages=null;
  33. $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('slug', $slug)->orWhere('id', $slug)->first();
  34. // 如果没有找到且是数字,通过 id 获取页面
  35. if (!$page) {
  36. if (is_numeric($slug))
  37. {
  38. $page = SitePage::where('status', '1')->where('dist_id', getDistId())->where('id', $slug)->firstOrFail();
  39. }
  40. else{
  41. abort(403);
  42. }
  43. }
  44. if($page->page_type==0) {
  45. $previousPage = SitePage::where('dist_id', getDistId())
  46. ->where('status', '1')
  47. ->where('id', '<', $page->id)
  48. ->where('page_type',0)
  49. ->orderBy('id', 'desc')
  50. ->first();
  51. $nextPage = SitePage::where('dist_id', getDistId())
  52. ->where('status', '1')
  53. ->where('id', '>', $page->id)
  54. ->where('page_type',0)
  55. ->orderBy('id', 'asc')
  56. ->first();
  57. // 创建分页数据结构
  58. $paginator = [
  59. 'previous_page' => $previousPage ? true : false, // 是否有上一页
  60. 'previous_page_url' => $previousPage ? "/pages/" . ($previousPage->slug ?: $previousPage->id) : null, // 上一页的 URL
  61. 'previous_page_title' => $previousPage ? $previousPage->title : null, // 上一页的标题
  62. 'next_page' => $nextPage ? true : false, // 是否有下一页
  63. 'next_page_url' => $nextPage ? "/pages/" . ($nextPage->slug ?: $nextPage->id) : null, // 下一页的 URL
  64. 'next_page_title' => $nextPage ? $nextPage->title : null, // 下一页的标题
  65. ];
  66. //Recent post
  67. //获取最近的文章 数量有限制,当前文章不要放进去
  68. $recent_pages_limit=10;
  69. $recent_pages = SitePage::where('dist_id', getDistId())
  70. ->where('status', '1')
  71. ->where('id', '!=', $page->id)
  72. ->where('page_type',0)
  73. ->orderBy('id', 'desc')
  74. ->limit($recent_pages_limit)
  75. ->get();
  76. }
  77. else{
  78. $paginator = [];
  79. }
  80. // 构建导航数据 开始
  81. $breadcrumbs = [
  82. [
  83. 'url' => '/',
  84. 'name' => 'Home',
  85. ]
  86. ];
  87. if ($page->tags->isNotEmpty()) {
  88. $tag = $page->tags->first();
  89. $breadcrumbs[] = [
  90. 'url' => $tag->slug ? "/collections/{$tag->slug}" : "/collections/{$tag->id}",
  91. 'name' => $tag->name,
  92. ];
  93. }
  94. $breadcrumbs[] = [
  95. 'url' => '#',
  96. 'name' => $page->title,
  97. ];
  98. // 构建导航数据 结束
  99. $template_file ='pages_detail.liquid';
  100. if(!empty($page->template_file ))
  101. {
  102. $template_file=$page->template_file;
  103. }
  104. return $this->liquidRenderer->render($template_file,
  105. [
  106. 'page' => $page,
  107. 'recent_pages' => $recent_pages,
  108. 'breadcrumbs' => $breadcrumbs,
  109. 'paginator' => $paginator,
  110. 'csrf_token' => csrf_token(),
  111. ]);
  112. }
  113. }