resetPage(); } } public function clearFilters(): void { $this->reset(['q', 'category', 'sort']); $this->resetPage(); } public function selectCategory(string $slug): void { $this->category = $this->category === $slug ? '' : $slug; $this->resetPage(); } public function with(): array { // Ausgabe/Sprache auch auf Livewire-Update-Requests konsistent halten // (dort fehlt das /de- bzw. /en-Präfix in der URL). app()->setLocale($this->language); \Illuminate\Support\Facades\URL::defaults(['edition' => $this->language]); $term = trim($this->q); $hasQuery = mb_strlen($term) >= 2 || $this->category !== ''; return [ 'hasQuery' => $hasQuery, 'term' => $term, 'results' => $hasQuery ? $this->results($term) : null, 'archiveTotal' => $this->archiveTotal(), 'categories' => \App\Support\CategoryNavigation::items(12), ]; } private function results(string $term): LengthAwarePaginator { $query = $this->baseQuery(); if (mb_strlen($term) >= 2) { $query->where(function (Builder $inner) use ($term): void { $like = '%'.$term.'%'; $inner ->whereLike('title', $like) ->orWhereLike('subtitle', $like) ->orWhereLike('text', $like) ->orWhereLike('keywords', $like) ->orWhereHas('company', fn (Builder $company) => $company->whereLike('name', $like)) ->orWhereHas('category.translations', fn (Builder $translation) => $translation ->where('locale', $this->language) ->whereLike('name', $like)); }); } if ($this->category !== '') { $categoryIds = $this->categoryIds($this->category); $query->whereIn('category_id', $categoryIds); } return $this->applySort($query) ->paginate(10) ->withQueryString(); } /** * @return array */ private function categoryIds(string $slug): array { $category = Category::query() ->whereIn('portal', $this->portalValues()) ->whereHas('translations', fn (Builder $query) => $query ->where('locale', $this->language) ->where('slug', $slug)) ->first(); if (! $category) { return [-1]; } return Category::query() ->where(fn (Builder $query) => $query ->whereKey($category->getKey()) ->orWhere('parent_id', $category->getKey())) ->pluck('id') ->all(); } private function applySort(Builder $query): Builder { return match ($this->sort) { 'oldest' => $query->orderBy('published_at'), 'most-read' => $query->orderByDesc('hits')->orderByDesc('published_at'), default => $query->orderByDesc('published_at'), }; } private function baseQuery(): Builder { return PressRelease::query() ->withoutGlobalScope(PortalScope::class) ->with([ 'company', 'category.translations' => fn ($query) => $query->where('locale', $this->language), ]) ->whereIn('portal', $this->portalValues()) ->where('status', PressReleaseStatus::Published) ->where('language', $this->language) ->whereNotNull('published_at') ->where('published_at', '<=', now()); } private function archiveTotal(): int { return $this->baseQuery()->count(); } /** * @return array */ private function portalValues(): array { $primary = $this->portal ?? Portal::Businessportal24->value; return [$primary, Portal::Both->value]; } }; ?>
{{-- Suchfeld --}}
sucht… @if ($q !== '' || $category !== '') @endif
{{-- Rubriken-Filter --}} @if ($categories->isNotEmpty())
@foreach ($categories as $cat) @endforeach
@endif @if ($hasQuery && $results) {{-- Ergebnis-Kopf --}}

{{ number_format($results->total(), 0, ',', '.') }} {{ $results->total() === 1 ? 'Ergebnis' : 'Ergebnisse' }} @if ($term !== '') für „{{ $term }}" @endif


@forelse ($results as $release) @empty

Keine Treffer

Für Ihre Suche gibt es derzeit keine Pressemitteilungen. Versuchen Sie einen anderen Begriff oder entfernen Sie Filter.

@endforelse @if ($results->hasPages()) @endif @else {{-- Discovery / Leerzustand --}}

Durchsuchen Sie das Archiv

{{ number_format($archiveTotal, 0, ',', '.') }} geprüfte Pressemitteilungen — durchsuchbar nach Stichwort, Unternehmen und Branche. Geben Sie oben einen Suchbegriff ein oder wählen Sie eine Rubrik.

@if ($categories->isNotEmpty())
Beliebte Rubriken
@foreach ($categories->take(8) as $cat) @endforeach
@endif
@endif