@extends('layouts.app') {{-- Каталог (ТЗ §8.3, §8.5), разметка по макету `design/new design and ui`. --}} @php $heading = $seo->h1 ?? ($cuisine ? $cuisine->name.' кухня в '.$city->inCity() : 'Рестораны в '.$city->inCity()); $canonicalPath = $cuisine ? route('catalog.cuisine', [$city->slug, $cuisine->slug], false) : route('catalog.city', $city->slug, false); $sorts = [ 'recommended' => 'Сначала рекомендуемые', 'rating' => 'По рейтингу', 'free_tables' => 'По свободным столам', 'bill' => 'По среднему чеку', 'popular' => 'По популярности', ]; if ($filters->hasCoordinates()) { $sorts = ['nearest' => 'Сначала ближайшие'] + $sorts; } @endphp {{-- Метаданные собирает SeoResolver; свои значения из админки сильнее шаблона типа страницы (ТЗ §18.3, §18.9). --}} @section('title', $seo->title ?? $heading.' — забронировать столик онлайн') @section('description', $seo->description ?? 'Каталог заведений в '.$city->inCity().': свободные столики, средний чек, рейтинг и онлайн-бронирование.') @push('meta') {{-- Параметрические страницы фильтров не должны плодить дубли (ТЗ §18.4) --}} @if ($seo->noindex || $filters->hasActiveFilters() || $result->venues->currentPage() > 1) @endif @endpush @section('content')

{{ $heading }}

{{ trans_choice(':count заведение|:count заведения|:count заведений', $result->venues->total(), ['count' => $result->venues->total()]) }} @if ($result->availabilityCheckedAt) · доступность проверена в {{ $result->availabilityCheckedAt->setTimezone($city->timezone)->format('H:i') }} @endif

{{-- Переключатель списка и карты — сегмент-контрол из макета --}}
@foreach (['list' => 'Список', 'map' => 'Карта'] as $view => $label) $filters->view === $view, 'text-ink-60 hover:text-ink' => $filters->view !== $view, ])>{{ $label }} @endforeach
@php($activeChips = $filters->activeChips()) {{-- На узком экране фильтры занимают его целиком, и до выдачи приходится долго листать — там они свёрнуты, разворачивает кнопка. Ширину экрана определяет CSS, а не JavaScript: со слушателем resize состояние разъезжалось при повороте устройства и изменении окна. Без JavaScript фильтры открыты как раньше, а кнопка не показывается вовсе — её прячет `x-cloak`. --}}
@if ($result->availabilityUnavailable())

Сервис бронирования сейчас не отвечает — доступность столов уточняется. Заведения и их контакты по-прежнему доступны.

@endif
@foreach ($activeChips as $chip) {{ $chip }} @endforeach
@foreach ($filters->toQuery() as $name => $value) @if ($name !== 'sort' && ! is_array($value)) @endif @endforeach
@if ($filters->view === 'map')
@endif @if ($result->isEmpty()) {{-- Пустое состояние (ТЗ §8.3, §17.3) --}}

Ничего не нашлось

@if ($filters->hasActiveFilters()) Попробуйте изменить фильтры: например, снять ограничение по свободным столам или расширить диапазон среднего чека. @else В этом городе пока нет заведений, подключённых к «РестоМесто». Каталог наполняется автоматически по мере подключения ресторанов. @endif

@if ($filters->hasActiveFilters()) Сбросить фильтры @endif
@else
@foreach ($result->venues as $venue) @endforeach
{{ $result->venues->withQueryString()->links() }}
@endif
@endsection