Files
breadcrumb-the-shire/docs/howto-globale-suche.md

73 lines
2.1 KiB
Markdown
Raw Normal View History

# Globale Suche erweitern
Letzte Aktualisierung: 2026-04-01
2026-03-04 15:56:58 +01:00
## Ziel
2026-03-04 15:56:58 +01:00
Neue Search-Resource korrekt in Aside-Preview und Vollsuche integrieren.
2026-03-04 15:56:58 +01:00
## Architektur
2026-03-04 15:56:58 +01:00
Zwei Endpunkte teilen dieselbe Konfiguration:
2026-03-04 15:56:58 +01:00
- Aside-Preview: `pages/admin/search/data().php`
- Vollsuche: `pages/search/data().php`
2026-03-04 15:56:58 +01:00
Zentrale Fassade:
2026-03-04 15:56:58 +01:00
- `lib/Support/SearchConfig.php`
- Laufzeit-Orchestrierung: `lib/Service/Search/SearchDataService.php`
- SQL-Ausführung: `lib/Repository/Search/SearchQueryRepository.php`
2026-03-04 15:56:58 +01:00
Provider:
2026-03-04 15:56:58 +01:00
- SQL-Definitionen: `SearchSqlResourceProvider`
- UI-Meta (Icons/URLs): `SearchUiMetaProvider`
- Mapping: `SearchItemMapperProvider`
- Spezialquellen (`docs`, `hotkeys`): `SearchSpecialResourceProvider`
- Modul-Erweiterungen: `SearchResourceProvider` via Modul-Manifest `search_resources`
2026-03-04 15:56:58 +01:00
## Laufzeitpfad
2026-03-04 15:56:58 +01:00
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
2026-03-04 15:56:58 +01:00
## Standardablauf für neue Resource
2026-03-04 15:56:58 +01:00
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. Bei Modul-Resources: Provider-Klasse in `module.php` unter `search_resources` registrieren.
6. i18n-Labels pruefen.
2026-03-04 15:56:58 +01:00
## Wichtige Regeln
2026-03-04 15:56:58 +01:00
- Permission immer serverseitig in der Resource setzen.
- Tenant-Scope nicht nur im UI lösen.
- Preview immer mit `limit ?` und ohne sensitive Daten.
2026-03-04 15:56:58 +01:00
## Docs-Resource
2026-03-04 15:56:58 +01:00
Die Entwicklerdoku läuft als Spezialresource `docs`:
2026-03-04 15:56:58 +01:00
- Quelle: `DocsCatalogService::search()`
- Permission: `docs.view`
- Ziel: `admin/docs/{slug}#anchor`
2026-03-04 15:56:58 +01:00
## Check vor Merge
2026-03-04 15:56:58 +01:00
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