CollectionController.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Services\LiquidRenderer;
  4. use Illuminate\Http\Request;
  5. use App\Models\SitePage;
  6. use App\Models\SitePageTag;
  7. class CollectionController extends Controller
  8. {
  9. protected $liquidRenderer;
  10. public function __construct(LiquidRenderer $liquidRenderer)
  11. {
  12. $this->liquidRenderer = $liquidRenderer;
  13. }
  14. public function index()
  15. {
  16. //模板支持多级目录,需要目录符号
  17. $output = LiquidRenderer::render('collection_list.liquid', [
  18. ]);
  19. return response($output);
  20. }
  21. public function detail($slug)
  22. {
  23. // Find the tag by either slug or id
  24. $tag = SitePageTag::where('dist_id', getDistId())
  25. ->where(function ($query) use ($slug) {
  26. $query->where('slug', $slug)
  27. ->orWhere('id', $slug);
  28. })
  29. ->first();
  30. if (!$tag) {
  31. abort('404','tag not found.');
  32. }
  33. // 获取关联的 pages
  34. $perPage = 12;
  35. $pages = $tag->pages($perPage); // 使用分页
  36. // 创建分页数据结构
  37. $paginator = [
  38. 'previous_page' => $pages->previousPageUrl() ? true : false, // 是否有上一页
  39. 'previous_page_url' => $pages->previousPageUrl(), // 上一页的 URL
  40. 'next_page' => $pages->nextPageUrl() ? true : false, // 是否有下一页
  41. 'next_page_url' => $pages->nextPageUrl(), // 下一页的 URL
  42. 'current_page' => $pages->currentPage(), // 当前页
  43. 'total_pages' => $pages->lastPage(), // 总页数
  44. 'pages' => range(1, $pages->lastPage()), // 页码数组
  45. 'page_url' => array_combine(
  46. range(1, $pages->lastPage()),
  47. array_map(fn($page) => $pages->url($page), range(1, $pages->lastPage()))
  48. ), // 每页的 URL
  49. ];
  50. // 构建导航数据 开始
  51. $breadcrumbs = [
  52. [
  53. 'url' => '/',
  54. 'name' => 'Home',
  55. ]
  56. ];
  57. $breadcrumbs[] = [
  58. 'url' => '#',
  59. 'name' => $tag->name,
  60. ];
  61. // 构建导航数据 结束
  62. //模板支持多级目录,需要目录符号
  63. $output = LiquidRenderer::render('collection_list.liquid', [
  64. 'tag' => $tag,
  65. 'pages' => $pages,
  66. 'paginator' => $paginator, // 分页信息
  67. 'breadcrumbs' => $breadcrumbs,
  68. ]);
  69. return response($output);
  70. }
  71. }