mein-sterntours/dev/frontend-navigation/README.md
2026-01-23 17:34:40 +01:00

197 lines
5.5 KiB
Markdown

# Frontend Navigation - Backend API
Dieses Verzeichnis enthält die Dokumentation und Referenzimplementierungen für die Frontend-Navigation.
## Übersicht
Die Navigation-API stellt die komplette Seitenstruktur des CMS als hierarchischen Baum oder flache Liste zur Verfügung.
## Schnellstart
### Backend-UI (Admin-Interface)
Zugriff über: **Navigation API** im Seitenmenü (Permission: `crm-nav-api`)
Die Backend-UI zeigt die **komplette Frontend-Navigation**:
- 📊 Live-Statistiken (Gesamt, Aktiv, Programme, Länder)
- 🌍 **Länder-Navigation** mit Children (gruppiert nach Haupt/Infos)
- 🏠 **USEDOM Ferienwohnungen** mit allen FeWos
- 📑 **Mehr-Menü Seiten** (Über uns, Reiseversicherung, Reiseführer, Reisemagazin, Reisenews)
- 🔍 Volltext-Suche über Titel, Slug und URL
- 🌳 Interaktiver Nested Tree mit Auf-/Zuklappen
- 🎯 Filter (Mit ausgeblendeten/Nur sichtbare)
- 📥 JSON-Export
- 🔄 Cache-Verwaltung
### API-Endpunkte
```
GET /api/navigation/tree - Kompletter Navigationsbaum
GET /api/navigation/tree/active - Nur aktive Navigationspunkte
GET /api/navigation/tree/{rootId} - Teilbaum ab einer bestimmten Page
GET /api/navigation/flat - Flache Liste aller Pages
GET /api/navigation/breadcrumb/{pageId} - Breadcrumb-Pfad
```
### Beispiel-Verwendung
```javascript
// Kompletten Navigationsbaum abrufen
fetch("/api/navigation/tree")
.then((response) => response.json())
.then((data) => {
console.log(data.data); // Navigationsbaum
});
```
## Dateien
- **README.md** - Diese Datei (Übersicht)
- **BACKEND-UI.md** - Dokumentation der Backend-UI (Admin-Interface)
- **navigation.md** - Dokumentation der Frontend-Routing-Logik (Symfony-basiert)
- **navigation-api.md** - Vollständige API-Dokumentation mit Beispielen
- **test-api.php** - CLI-Test-Script für alle API-Endpunkte
- **test-api.html** - Browser-basierte interaktive Test-Oberfläche
- **KernelControllerListener.php** - Referenz: Symfony KernelControllerListener
- **PageRepository.php** - Referenz: Doctrine Page Repository
## Implementierung
Die API wurde im Laravel-Backend implementiert:
### Backend-Komponenten
**API-Layer:**
1. **API Controller:** `app/Http/Controllers/API/NavigationController.php`
- REST API-Endpunkte
- JSON-Responses
2. **Web Controller:** `app/Http/Controllers/NavigationTreeController.php`
- Backend-UI (Admin-Interface)
- Daten-Export und Cache-Management
3. **Service:** `app/Services/NavigationTreeService.php`
- Business-Logik
- Rekursiver Baum-Aufbau
- Caching (60 Min.)
- Helper-Methoden (Breadcrumb, Node-Suche, etc.)
4. **Model:** `app/Models/Page.php`
- Eloquent Model für die Page-Entität
- Relationships (parent, children, travel_program, etc.)
5. **Views:** `resources/views/navigation/index.blade.php`
- Interaktive Baum-Visualisierung
- Suche und Filter
- Statistiken
6. **Routes:**
- API: `routes/api.php`
- Web: `routes/web.php` (Permission: `crm-tp-na`)
## Features
### Navigationsbaum
- ✅ Hierarchische Struktur mit unbegrenzter Tiefe
- ✅ Alle Page-Eigenschaften enthalten (SEO, Template, Status, etc.)
- ✅ Beziehungen zu TravelProgram, FewoLodging, Country
- ✅ Filterung nach Status und Sichtbarkeit
- ✅ Sortierung nach Order und Title
### Zusätzliche Funktionen
- ✅ Breadcrumb-Generierung
- ✅ Teilbaum-Abfrage
- ✅ Flache Listen-Ansicht
- ✅ Node-Zählung
- ✅ URL-Pfad-Generierung
### Performance
- Effiziente Queries mit Eager Loading
- Rekursive Baum-Konstruktion
- Unterstützung für Nested Set Tree (lft/rgt)
- Caching-ready
## Datenstruktur
Jeder Navigationspunkt enthält:
```json
{
"id": 1,
"title": "Seitentitel",
"slug": "seitentitel",
"url": "/seitentitel",
"status": 1,
"show_in_navi": 1,
"order": 1,
"template": "default",
"lvl": 0,
"parent_id": null,
"is_travel_program": false,
"is_fewo_lodging": false,
"is_country_page": false,
"children": [],
"has_children": false
}
```
Siehe `navigation-api.md` für eine vollständige Feldbeschreibung.
## Routing-Logik (Frontend)
Das Frontend verwendet einen `KernelControllerListener` (Symfony), der:
1. **API-Lookup** prüft (externe Reiseführer)
2. **Datenbank-Suche** durchführt (Page-Entität)
3. **Redirects** verarbeitet (301-Weiterleitungen)
4. **Controller zuweist** basierend auf Content-Type
Siehe `navigation.md` für Details zur Routing-Logik.
## Unterschiede Frontend/Backend
| Aspekt | Frontend (Symfony) | Backend (Laravel) |
| ---------- | ----------------------------- | -------------------------- |
| Framework | Symfony 2.x | Laravel 5.x |
| ORM | Doctrine | Eloquent |
| Routing | KernelControllerListener | API Routes |
| Tree-Logik | Nested Set + Parent Traversal | Parent-Child Relationships |
| API | External (IQ API) | Internal (Laravel) |
## Wartung
### Neue Felder hinzufügen
1. Füge das Feld in `NavigationTreeService::buildNodeData()` hinzu
2. Aktualisiere die Dokumentation in `navigation-api.md`
### Performance optimieren
1. Füge Caching in `NavigationTreeService` hinzu
2. Verwende Eager Loading für Relations
3. Implementiere Pagination für große Bäume
### Tests
Empfohlene Tests:
- Unit Tests für `NavigationTreeService`
- API Tests für alle Endpunkte
- Performance Tests für große Navigationsbäume
## Support
Bei Fragen zur API siehe:
- `navigation-api.md` - Vollständige API-Dokumentation
- `navigation.md` - Frontend Routing-Dokumentation