Suche: Volltext-Index + Fix fuer doppelte Alpine-Instanz

Archiv-Suche lief auf grossen Datenbestaenden langsam und war im Browser
komplett tot: app.js startete ein eigenes Alpine, Livewire injizierte
zusaetzlich seins - der DOM-Morph brach mit "Alpine.transaction is not a
function" ab (keine Rubrik klickbar, Suchbegriff nicht aenderbar).

- app.js buendelt jetzt Livewire + Alpine aus livewire.esm,
  @livewireScriptConfig im Web-Layout stoppt die Auto-Injektion
- MySQL-Volltext-Index (Boolean-Mode, +wort*) statt LIKE ueber alles;
  LIKE-Fallback fuer SQLite-Tests und kurze Tokens
- Firmen-/Rubrik-Treffer als ID-Listen statt orWhereHas (OR + EXISTS
  hebelte den Volltext-Index aus)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin Adametz 2026-07-07 13:03:14 +00:00
parent b3780e0fea
commit db65c2ed7d
6 changed files with 178 additions and 16 deletions

View file

@ -24,8 +24,19 @@
<title>{{ $pageTitle }}</title>
{{-- Kanonische URL --}}
<link rel="canonical" href="{{ $canonicalUrl }}">
@php
$robotsDirective = trim($__env->yieldContent('robots'));
@endphp
{{-- Robots-Anweisung (z. B. noindex für private Vorschauen) --}}
@if ($robotsDirective !== '')
<meta name="robots" content="{{ $robotsDirective }}">
@endif
{{-- Kanonische URL (entfällt bei noindex — es gibt keine öffentliche URL) --}}
@if (! str_contains($robotsDirective, 'noindex'))
<link rel="canonical" href="{{ $canonicalUrl }}">
@endif
{{-- Sprach-Alternates (de/en) – pro Seite optional gesetzt --}}
@hasSection('hreflang')
@ -56,6 +67,10 @@
$theme = config('app.theme', 'businessportal24');
@endphp
{{-- app.js bündelt Livewire + Alpine (livewire.esm) — @livewireScriptConfig
unten verhindert, dass Livewire zusätzlich sein eigenes Script injiziert
(sonst zwei Alpine-Instanzen und kaputte wire:model-Bindings). --}}
@livewireStyles
@vite([\App\Helpers\ThemeHelper::getThemeCssPath(), 'resources/js/app.js'], $domainConfig['assets_dir'] ?? 'build/web')
<!-- Sticky Header Script -->
@ -111,8 +126,14 @@
<!-- TopBar - statisch oben -->
@yield('content')
{{-- Schwebendes Kontakt-Widget (unten rechts, alle Web-Domains) --}}
<x-web.contact-launcher />
<!-- Additional Scripts -->
@stack('scripts')
@livewireScriptConfig
</body>
</html>