Werbeplaetze reaktiviert: Eigenwerbe-Slots oeffnen das Kontakt-Widget
Die im Spoke-Frontend-Audit entfernten Anzeige-Flaechen (focus-ad, feed-ad, Inline-Ad) kehren als dezente Eigenwerbung zurueck: - neue Komponente x-web.ad-slot im frueheren "ANZEIGE"-Stil mit Hinweis "Hier koennte Ihre Werbung stehen" (DE/EN) - eingebaut an den drei frueheren Stellen: Hero-Sidebar der Startseiten, Feed nach der dritten Meldung, PM-Detailseite nach der Unternehmensbeschreibung (nicht in der privaten Vorschau) - Klick oeffnet das schwebende Kontakt-Widget mit vorgewaehltem neuen Thema "Werbung buchen" (ContactMessageTopic::Advertising); Anfragen landen wie gewohnt in der Admin-Queue "Kontakt" Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
dc2a3443c1
commit
744e87d008
12 changed files with 174 additions and 2 deletions
47
resources/views/components/web/ad-slot.blade.php
Normal file
47
resources/views/components/web/ad-slot.blade.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
{{--
|
||||
Werbeplatz-Hinweis (Eigenwerbung): dezenter „Anzeige"-Rahmen im Stil der
|
||||
früheren Ad-Slots (focus-ad/feed-ad), solange die Fläche nicht vermarktet
|
||||
ist. Klick öffnet das schwebende Kontakt-Widget mit vorgewähltem Thema
|
||||
„Werbeanfrage" (Window-Event `open-contact-modal` + topic-Detail).
|
||||
|
||||
Varianten steuern nur die Außenabstände der jeweiligen Einbauorte:
|
||||
- sidebar → Hero-Sidebar der Startseiten
|
||||
- feed → Meldungs-Feed
|
||||
- inline → Fließtext der PM-Detailseite
|
||||
--}}
|
||||
|
||||
@props(['variant' => 'sidebar'])
|
||||
|
||||
<div @class([
|
||||
'mt-4' => $variant === 'sidebar',
|
||||
'my-6' => $variant === 'feed',
|
||||
'my-8 max-w-[680px]' => $variant === 'inline',
|
||||
])>
|
||||
<div class="flex items-center gap-2.5 mb-2.5">
|
||||
<span class="h-px bg-bg-rule-strong flex-1"></span>
|
||||
<span class="text-[9px] font-bold tracking-[0.22em] text-ink-on-dark-muted uppercase font-mono">{{ __('web.ad_slot.label') }}</span>
|
||||
<span class="h-px bg-bg-rule-strong flex-1"></span>
|
||||
</div>
|
||||
|
||||
<button type="button" x-data @click="$dispatch('open-contact-modal', { topic: '{{ \App\Enums\ContactMessageTopic::Advertising->value }}' })"
|
||||
class="block w-full text-left px-4 py-4 bg-bg-card-warm border border-bg-card-warm-border cursor-pointer hover:border-brand/50 hover:bg-bg-card-warm-hover transition-colors">
|
||||
<div class="text-[9.5px] font-bold tracking-[0.16em] text-card-warm-cat uppercase mb-1.5">
|
||||
{{ __('web.ad_slot.eyebrow') }}
|
||||
</div>
|
||||
<div class="font-serif text-[15.5px] leading-[1.3] font-medium text-card-warm-title">
|
||||
{{ __('web.ad_slot.title') }}
|
||||
</div>
|
||||
<div class="text-[11.5px] leading-[1.5] mt-1.5 text-card-warm-cat">
|
||||
{{ __('web.ad_slot.text') }}
|
||||
</div>
|
||||
<span class="inline-block mt-2.5 text-[11.5px] font-semibold underline underline-offset-2 text-card-warm-title">
|
||||
{{ __('web.ad_slot.cta') }} →
|
||||
</span>
|
||||
</button>
|
||||
|
||||
<div class="flex items-center gap-2.5 mt-2.5">
|
||||
<span class="h-px bg-bg-rule-strong flex-1"></span>
|
||||
<span class="text-[9px] font-bold tracking-[0.22em] text-ink-on-dark-muted uppercase font-mono">{{ __('web.ad_slot.end_label') }}</span>
|
||||
<span class="h-px bg-bg-rule-strong flex-1"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -25,6 +25,11 @@
|
|||
'label' => __('web.launcher.topic_contact'),
|
||||
'description' => __('web.launcher.topic_contact_desc'),
|
||||
],
|
||||
[
|
||||
'value' => \App\Enums\ContactMessageTopic::Advertising->value,
|
||||
'label' => __('web.launcher.topic_advertising'),
|
||||
'description' => __('web.launcher.topic_advertising_desc'),
|
||||
],
|
||||
[
|
||||
'value' => \App\Enums\ContactMessageTopic::BugReport->value,
|
||||
'label' => __('web.launcher.topic_bug'),
|
||||
|
|
@ -50,7 +55,8 @@
|
|||
topic: @js(old('topic')),
|
||||
topicLabels: @js($launcherTopicLabels),
|
||||
}"
|
||||
@open-contact-modal.window="open = true"
|
||||
{{-- Optionales Event-Detail `topic` wählt das Anliegen direkt vor (z. B. Werbeplätze). --}}
|
||||
@open-contact-modal.window="open = true; if ($event.detail?.topic && topicLabels[$event.detail.topic]) { topic = $event.detail.topic }"
|
||||
@keydown.escape.window="open = false"
|
||||
class="fixed bottom-5 right-5 z-50 flex flex-col items-end gap-3 print:hidden"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@
|
|||
@foreach ($sideReleases as $index => $release)
|
||||
<x-web.focus-side-item :release="$release" :index="$index + 1" :first="$loop->first" />
|
||||
@endforeach
|
||||
|
||||
<x-web.ad-slot variant="sidebar" />
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
|
|
|
|||
|
|
@ -127,6 +127,11 @@ new class extends Component
|
|||
|
||||
@foreach ($rest as $release)
|
||||
<x-web.feed-item :release="$release" :recommended="($release->content_score ?? 0) >= 80" />
|
||||
|
||||
@if ($loop->index === 2)
|
||||
{{-- Werbeplatz nach der dritten Feed-Meldung (Position der früheren feed-ad). --}}
|
||||
<x-web.ad-slot variant="feed" />
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
@if ($releases->hasMorePages())
|
||||
|
|
|
|||
|
|
@ -353,6 +353,11 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
{{-- Inline-Werbeplatz (Position der früheren Inline-Ad); in der privaten Vorschau ausgeblendet --}}
|
||||
@unless ($isPreview)
|
||||
<x-web.ad-slot variant="inline" />
|
||||
@endunless
|
||||
|
||||
{{-- Pressekontakt --}}
|
||||
@if ($contact)
|
||||
<div class="mt-8 px-5 sm:px-7 py-6 bg-white border border-bg-rule-strong max-w-[680px]">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue