| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- <?php
- namespace App\Http\Controllers;
- /*
- * FavoritesController — страница и JSON-endpoint избранного.
- *
- * Избранное хранится в localStorage браузера.
- * index() — отдаёт пустую страницу (JS читает localStorage и вызывает load())
- * load() — принимает POST с массивом IDs, возвращает HTML карточек
- */
- use App\Models\Car;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\View\View;
- class FavoritesController extends Controller
- {
- public function index(): View
- {
- return view('pages.favorites');
- }
- // POST /favorites/load {ids: [1,2,3]} → HTML-фрагмент с карточками
- public function load(Request $request): JsonResponse
- {
- $ids = array_filter((array) $request->input('ids', []), 'is_numeric');
- $ids = array_map('intval', $ids);
- if (empty($ids)) {
- return response()->json(['html' => '', 'count' => 0]);
- }
- $cars = Car::whereIn('id', $ids)
- ->where('status', 'active')
- ->orderByRaw('FIELD(id, '.implode(',', $ids).')')
- ->get();
- $fuelLabels = ['petrol' => 'Бензин', 'diesel' => 'Дизель', 'hybrid' => 'Гибрид', 'electric' => 'Электро', 'gas' => 'Газ', 'other' => 'Другое'];
- $countryFlags = ['Германия' => '🇩🇪', 'Япония' => '🇯🇵', 'Корея' => '🇰🇷', 'США' => '🇺🇸', 'Китай' => '🇨🇳', 'ОАЭ' => '🇦🇪', 'Грузия' => '🇬🇪', 'Великобритания' => '🇬🇧', 'Франция' => '🇫🇷', 'Италия' => '🇮🇹'];
- $html = '';
- foreach ($cars as $car) {
- $html .= view('pages.partials._car_card', compact('car', 'fuelLabels', 'countryFlags'))->render();
- }
- return response()->json(['html' => $html, 'count' => $cars->count()]);
- }
- }
|