{{-- Микроразметка страницы заведения (ТЗ §18.5). Выводится только то, что действительно есть на странице: рейтинг — при наличии опубликованных отзывов, часы работы — при заполненном графике. Разметка, не соответствующая видимому содержимому, — прямой путь к ручным санкциям поисковика. --}} @php $rating = $venue->rating; $hasRating = $rating !== null && $rating->reviews_count > 0; // schema.org ждёт англоязычные сокращения дней; в базе — ISO-8601, // где 1 — понедельник (решение заказчика D8). $schemaWeekdays = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday', 7 => 'Sunday']; $openingHours = $venue->schedules ->reject(fn ($day) => $day->is_day_off || $day->opens_at === null || $day->closes_at === null) ->map(fn ($day) => [ '@type' => 'OpeningHoursSpecification', 'dayOfWeek' => 'https://schema.org/'.($schemaWeekdays[$day->weekday] ?? 'Monday'), 'opens' => substr((string) $day->opens_at, 0, 5), 'closes' => substr((string) $day->closes_at, 0, 5), ]) ->values() ->all(); $schema = array_filter([ '@context' => 'https://schema.org', '@type' => 'Restaurant', 'name' => $venue->name, 'url' => url($venue->publicPath()), 'address' => array_filter([ '@type' => 'PostalAddress', 'addressLocality' => $city->name, 'streetAddress' => $venue->address, 'addressCountry' => 'RU', ]), 'geo' => $venue->latitude !== null && $venue->longitude !== null ? [ '@type' => 'GeoCoordinates', 'latitude' => $venue->latitude, 'longitude' => $venue->longitude, ] : null, 'telephone' => $venue->publicPhone(), 'servesCuisine' => $venue->cuisines->pluck('name')->all() ?: null, 'priceRange' => $venue->profile?->averageBillForHumans(), 'image' => $venue->profile?->primaryPhoto?->largeUrl(), 'aggregateRating' => $hasRating ? [ '@type' => 'AggregateRating', 'ratingValue' => number_format((float) $rating->average_rating, 1, '.', ''), 'reviewCount' => $rating->reviews_count, 'bestRating' => 5, 'worstRating' => 1, ] : null, 'openingHoursSpecification' => $openingHours ?: null, ], static fn ($value) => $value !== null && $value !== []); $breadcrumbs = [ '@context' => 'https://schema.org', '@type' => 'BreadcrumbList', 'itemListElement' => [ ['@type' => 'ListItem', 'position' => 1, 'name' => 'Главная', 'item' => url('/')], ['@type' => 'ListItem', 'position' => 2, 'name' => $city->name, 'item' => route('catalog.city', $city->slug)], ['@type' => 'ListItem', 'position' => 3, 'name' => $venue->name, 'item' => url($venue->publicPath())], ], ]; @endphp