PageAdminController.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. /*
  4. * PageAdminController — управление статическими страницами сайта в админке.
  5. *
  6. * Маршруты: GET/PUT /admin/pages (список + редактирование)
  7. * Страницы фиксированные (home, services, contacts) — создание/удаление не предусмотрено.
  8. * После сохранения сбрасывается кеш соответствующей публичной страницы.
  9. */
  10. use App\Http\Controllers\Controller;
  11. use App\Models\Block;
  12. use App\Models\Page;
  13. use App\Models\PageSection;
  14. use Illuminate\Http\RedirectResponse;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Cache;
  17. use Illuminate\View\View;
  18. class PageAdminController extends Controller
  19. {
  20. public function index(): View
  21. {
  22. $pages = Page::orderBy('id')->get();
  23. return view('admin.pages.index', compact('pages'));
  24. }
  25. public function edit(Page $page): View
  26. {
  27. // Текущие секции страницы с загруженным блоком
  28. $sections = PageSection::where('page_id', $page->id)
  29. ->orderBy('sort_order')
  30. ->with('block')
  31. ->get();
  32. // Блоки, которые ещё не добавлены на страницу (type=block секции)
  33. $usedBlockIds = $sections->where('type', 'block')->pluck('block_id')->filter()->all();
  34. $availableBlocks = Block::where('is_active', true)
  35. ->whereNotIn('id', $usedBlockIds)
  36. ->orderBy('title')
  37. ->get();
  38. return view('admin.pages.edit', compact('page', 'sections', 'availableBlocks'));
  39. }
  40. public function update(Request $request, Page $page): RedirectResponse
  41. {
  42. $data = $request->validate([
  43. 'title' => 'required|string|max:255',
  44. 'content' => 'nullable|string',
  45. 'meta_title' => 'nullable|string|max:255',
  46. 'meta_description' => 'nullable|string|max:500',
  47. 'is_active' => 'nullable|boolean',
  48. ]);
  49. $data['is_active'] = $request->boolean('is_active');
  50. $page->update($data);
  51. // Сбрасываем кеш публичной страницы после сохранения
  52. Cache::forget('page.'.$page->slug);
  53. return redirect()->route('admin.pages.index')
  54. ->with('success', 'Страница «'.$page->title.'» сохранена.');
  55. }
  56. }