# Globale Suche erweitern Letzte Aktualisierung: 2026-03-06 ## Ziel Neue Search-Resource korrekt in Aside-Preview und Vollsuche integrieren. ## Architektur Zwei Endpunkte teilen dieselbe Konfiguration: - Aside-Preview: `pages/admin/search/data().php` - Vollsuche: `pages/search/data().php` Zentrale Fassade: - `lib/Support/SearchConfig.php` - Laufzeit-Orchestrierung: `lib/Service/Search/SearchDataService.php` - SQL-Ausführung: `lib/Repository/Search/SearchQueryRepository.php` Provider: - SQL-Definitionen: `SearchSqlResourceProvider` - UI-Meta (Icons/URLs): `SearchUiMetaProvider` - Mapping: `SearchItemMapperProvider` - Spezialquellen (`docs`, `hotkeys`): `SearchSpecialResourceProvider` ## Laufzeitpfad 1. `pages/admin/search/data().php` oder `pages/search/data().php` 2. `SearchDataService` baut Scope/Permission + Resource-Iteration 3. `SearchQueryRepository` führt `countSql`/`previewSql`/`resultSql` aus 4. `SearchConfig` mapped auf API/UI-Items ## Standardablauf für neue Resource 1. Resource in `SearchSqlResourceProvider::resources()` ergänzen: - `key`, `label`, `permission` - `countSql`, `previewSql`, `resultSql` 2. Bei Tenant-Daten `tenantScopeFilters()` ergänzen. 3. UI ergänzen: - `iconForKey()` - `listUrl()` 4. Mapping ergänzen: - `mapPreviewItem()` - `mapResultItem()` 5. Aside-Eintrag in `templates/partials/app-main-aside.phtml` ergänzen (`data-search-key`). 6. i18n-Labels prüfen. ## Wichtige Regeln - Permission immer serverseitig in der Resource setzen. - Tenant-Scope nicht nur im UI lösen. - Preview immer mit `limit ?` und ohne sensitive Daten. ## Docs-Resource Die Entwicklerdoku läuft als Spezialresource `docs`: - Quelle: `DocsCatalogService::search()` - Permission: `docs.view` - Ziel: `admin/docs/{slug}#anchor` ## Check vor Merge 1. `php -l lib/Support/SearchConfig.php` 2. `php -l lib/Support/Search/*.php` 3. Preview testen (`admin/search/data?q=...`) 4. Vollsuche testen (`/search?search=...`) 5. Permission/Scope mit reduziertem User prüfen