diff --git a/app/Services/StoicSettings.php b/app/Services/StoicSettings.php index 71f2b48..6f4804e 100644 --- a/app/Services/StoicSettings.php +++ b/app/Services/StoicSettings.php @@ -38,6 +38,18 @@ public function get(string $key, mixed $default = null): mixed return filled($this->data[$key] ?? null) ? $this->data[$key] : $default; } + /** + * Absolute og:image URL for a Stoic image field value (the page's own, else + * this file's default), or null. Image fields store a comma-separated list; + * only the first is used. + */ + public function ogImageUrl(?string $pageImage = null): ?string + { + $filename = trim(explode(',', $pageImage ?: (string) $this->get('og_image', ''))[0]); + + return $filename === '' ? null : url(Stoic::image($filename, 'large')); + } + /** * Only the networks that have a URL set, in display order. * diff --git a/resources/stoic/content/settings.md b/resources/stoic/content/settings.md index 3cad19e..1e0339d 100644 --- a/resources/stoic/content/settings.md +++ b/resources/stoic/content/settings.md @@ -1,6 +1,7 @@ --- -meta_description: "" -facebook_url: "" -instagram_url: "" -tiktok_url: "" +meta_description: "Your local 3Dealer of 3D printed, high-quality products. Geek culture, decoration, fun and skulls, and custom orders." +og_image: "" +facebook_url: "https://www.facebook.com/3Dealer.gr/" +instagram_url: "https://www.instagram.com/3dealer.gr/" +tiktok_url: "https://www.tiktok.com/@3dealer.gr" --- diff --git a/resources/stoic/stoic_schemas.yml b/resources/stoic/stoic_schemas.yml index ce27f45..314ec40 100644 --- a/resources/stoic/stoic_schemas.yml +++ b/resources/stoic/stoic_schemas.yml @@ -139,6 +139,9 @@ schemas: - name: meta_description label: "Default Meta Description (used when a page has none)" ui: text + - name: og_image + label: "Default Og Image (used when a page has none, ideally 1200×630)" + ui: image - name: facebook_url label: Facebook URL ui: string diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 8e5d1ff..59ab459 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -2,6 +2,7 @@ @section('title', $page->meta_title) @section('description', $page->meta_description) +@section('og_image', $page->og_image) {{-- Organization structured data, home page only. Name from core's StoreDetails, social profiles (sameAs) from Stoic settings.md. --}} diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 4288fda..856451a 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -17,6 +17,10 @@ {{-- Falls back to Stoic's default when a page sets none, or sets it to an empty meta_description (@yield's own default only covers "not set"). --}} + {{-- A page's own Stoic og_image (via @section('og_image')), else the default from settings.md. --}} + @if ($ogImage = $stoicSettings->ogImageUrl(trim($__env->yieldContent('og_image')))) + + @endif {{-- Reciprocal hreflang: self-reference + every alternate locale + x-default --}} @isset($currentLocale) diff --git a/resources/views/legal.blade.php b/resources/views/legal.blade.php index 65f1cfb..a8e186c 100644 --- a/resources/views/legal.blade.php +++ b/resources/views/legal.blade.php @@ -2,6 +2,7 @@ @section('title', $page->meta_title ?: $page->name) @section('description', $page->meta_description) +@section('og_image', $page->og_image) @if($page->noindex ?? false) @push('seo')