@php /** * Storefront footer — keeps the template's elements (benefits band → edge-to-edge * photo gallery strip → columns → copyright) but skinned to the SaaS's own MODERN LIGHT * design system (tokens from app.css :root). The newsletter lives in its own section * above the footer, so it is intentionally NOT repeated here. 100% local assets. */ // The footer renders whatever the operator arranged in Admin -> Footer, with its own icon per // network. Falls back to the five legacy social_* settings for an install that has never // opened that screen. A row with no address is dropped in the service, not here — an empty // network used to render an icon linking to the homepage. $socialLinks = \App\Services\SocialNetwork::forFooter(); $phone = trim((string) setting('contact_phone', '')); $email = trim((string) setting('contact_email', '')); // The gallery photos showcase the platform's food, so they link through to browse restaurants. $galleryHref = route('restaurants'); // Footer gallery photos ("From our kitchens") — admin-managed (Admin → Footer); each slot // falls back to a bundled default when the operator hasn't uploaded their own. // Full-size dish shots (600-800px). The previous assets/client/gallery/ set was 173px square, which // the strip had to upscale — the source of the pixelation. $galleryDefaults = [ 'assets/client/dish/quattro-formaggi.png', 'assets/client/dish/chicken-tikka.png', 'assets/client/dish/california-roll.png', 'assets/client/dish/calamari-fritti.png', 'assets/client/dish/cannoli.png', 'assets/client/dish/dragon-roll.png', 'assets/client/dish/caprese-salad.png', 'assets/client/dish/chocolate-fudge-cake.png', 'assets/client/dish/garlic-knots.png', 'assets/client/dish/salmon-sashimi.png', 'assets/client/dish/panna-cotta.png', 'assets/client/dish/mozzarella-sticks.png', 'assets/client/dish/spicy-tuna-roll.png', 'assets/client/dish/red-velvet-slice.png', 'assets/client/dish/prosciutto-e-rucola.png', 'assets/client/dish/strawberry-sorbet.png', ]; // One saved gallery list (Admin -> Footer); falls back to the bundled defaults when unset/empty. $galleryStored = json_decode((string) setting('footer_gallery', ''), true); $gallery = (is_array($galleryStored) && $galleryStored) ? array_values(array_filter(array_map('strval', $galleryStored), static fn ($p) => trim($p) !== '')) : $galleryDefaults; // Trust band — six items, each an icon and one label, both editable in Admin → Footer. // // The label is a single phrase — "Secure payments" is one thing to write, not two — and the band // breaks it across its two lines itself. Every value resolves through t() like the rest of the // storefront, so what is stored is what shows, blank included, and it is stored per language. $benefits = []; foreach (\App\Services\FooterStrip::keys() as $bKeys) { $benefits[] = [t_raw($bKeys['icon']), \App\Services\FooterStrip::lines(t_raw($bKeys['label']))]; } // App-store badges only render when the operator has configured real store URLs. $appStoreUrl = trim((string) setting('app_store_url', '')); $playStoreUrl = trim((string) setting('play_store_url', '')); $hasApps = $appStoreUrl !== '' || $playStoreUrl !== ''; // X (formerly Twitter) + TikTok logos — inline SVG (bundled FontAwesome 5 has no glyph). $xLogo = ''; $tkLogo = ''; // Whole-footer + per-band visibility toggles (managed from Admin → Footer). if (setting('footer_enabled', '1') !== '1') { return; } @endphp