197 lines
5.5 KiB
Markdown
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
|