CategoryController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Storage;
  5. class CategoryController extends Controller
  6. {
  7. public function index()
  8. {
  9. $categories = $this->loadCategories();
  10. $books = $this->loadBooks();
  11. // 获取一级分类和对应的书籍
  12. $categoryData = [];
  13. foreach ($categories as $category) {
  14. if ($category['level'] == 1) {
  15. $categoryBooks = array_filter($books, function ($book) use ($category) {
  16. return $book['category_id'] == $category['id'];
  17. });
  18. $categoryData[] = [
  19. 'category' => $category,
  20. 'books' => array_slice(array_values($categoryBooks), 0, 3)
  21. ];
  22. }
  23. }
  24. return view('library.index', compact('categoryData', 'categories'));
  25. }
  26. public function show($id)
  27. {
  28. $categories = $this->loadCategories();
  29. $books = $this->loadBooks();
  30. $currentCategory = collect($categories)->firstWhere('id', $id);
  31. if (!$currentCategory) {
  32. abort(404);
  33. }
  34. // 获取子分类
  35. $subCategories = array_filter($categories, function ($cat) use ($id) {
  36. return $cat['parent_id'] == $id;
  37. });
  38. // 获取该分类下的书籍
  39. $categoryBooks = array_filter($books, function ($book) use ($id) {
  40. return $book['category_id'] == $id;
  41. });
  42. // 获取面包屑
  43. $breadcrumbs = $this->getBreadcrumbs($currentCategory, $categories);
  44. return view('library.category', compact('currentCategory', 'subCategories', 'categoryBooks', 'breadcrumbs'));
  45. }
  46. private function loadCategories()
  47. {
  48. $json = Storage::disk('public')->get('data/categories.json');
  49. return json_decode($json, true);
  50. }
  51. private function loadBooks()
  52. {
  53. $json = Storage::disk('public')->get('data/books.json');
  54. return json_decode($json, true);
  55. }
  56. private function getBreadcrumbs($category, $categories)
  57. {
  58. $breadcrumbs = [];
  59. $current = $category;
  60. while ($current) {
  61. array_unshift($breadcrumbs, $current);
  62. $current = collect($categories)->firstWhere('id', $current['parent_id']);
  63. }
  64. return $breadcrumbs;
  65. }
  66. }