Der Ordner hieß im Repository UI, der Namespace App\Livewire\Web\Components\Ui. Auf dem Mac fällt das nicht auf, auf Linux findet der Autoloader die Klassen nicht: Header, Footer usw. rendern ohne Klasse (500, Undefined variable $logoPath). Wächtertest prüft Pfad und Namespace auf gleiche Schreibweise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1.4 KiB
PHP
46 lines
1.4 KiB
PHP
<?php
|
||
|
||
namespace App\Livewire\Web\Components\Ui;
|
||
|
||
use Livewire\Component;
|
||
|
||
class AnnouncementBar extends Component
|
||
{
|
||
public array $content = [];
|
||
|
||
/** Farbwelt der Seite – jede Welt hat ihre eigene Meldung. */
|
||
public string $world = 'interior';
|
||
|
||
public function mount(): void
|
||
{
|
||
$this->world = b2in_world();
|
||
|
||
// Interior: global.announcement_bar, Immobilien: global.announcement_bar_immobilien.
|
||
$section = cms_theme_section($this->world === 'immobilien' ? 'announcement_bar_immobilien' : 'announcement_bar');
|
||
$this->content = is_array($section) ? $section : [];
|
||
}
|
||
|
||
/**
|
||
* Schluessel, unter dem sich der Browser das Wegklicken merkt.
|
||
*
|
||
* Leitet sich aus dem Inhalt ab, nicht nur aus der gepflegten `id`: Wird die Leiste im CMS
|
||
* neu belegt, ohne die `id` zu aendern, bekaemen Wiederkehrer die neue Meldung sonst nie
|
||
* zu sehen, weil ihr alter Dismiss-Eintrag im localStorage weitergilt.
|
||
*/
|
||
public function getDismissKeyProperty(): string
|
||
{
|
||
$fingerprint = implode('|', [
|
||
$this->content['id'] ?? 'default',
|
||
$this->content['badge'] ?? '',
|
||
$this->content['text'] ?? '',
|
||
$this->content['link_url'] ?? '',
|
||
]);
|
||
|
||
return 'announcement_dismissed_'.substr(md5($fingerprint), 0, 12);
|
||
}
|
||
|
||
public function render()
|
||
{
|
||
return view('livewire.web.components.ui.announcement-bar');
|
||
}
|
||
}
|