| .. | ||
| BACKEND-UI.md | ||
| header.html.twig | ||
| KernelControllerListener.php | ||
| navigation-api.md | ||
| navigation.md | ||
| PageRepository.php | ||
| README.md | ||
| test-api.html | ||
| test-api.php | ||
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
// 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:
-
API Controller:
app/Http/Controllers/API/NavigationController.php- REST API-Endpunkte
- JSON-Responses
-
Web Controller:
app/Http/Controllers/NavigationTreeController.php- Backend-UI (Admin-Interface)
- Daten-Export und Cache-Management
-
Service:
app/Services/NavigationTreeService.php- Business-Logik
- Rekursiver Baum-Aufbau
- Caching (60 Min.)
- Helper-Methoden (Breadcrumb, Node-Suche, etc.)
-
Model:
app/Models/Page.php- Eloquent Model für die Page-Entität
- Relationships (parent, children, travel_program, etc.)
-
Views:
resources/views/navigation/index.blade.php- Interaktive Baum-Visualisierung
- Suche und Filter
- Statistiken
-
Routes:
- API:
routes/api.php - Web:
routes/web.php(Permission:crm-tp-na)
- API:
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:
{
"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:
- API-Lookup prüft (externe Reiseführer)
- Datenbank-Suche durchführt (Page-Entität)
- Redirects verarbeitet (301-Weiterleitungen)
- 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
- Füge das Feld in
NavigationTreeService::buildNodeData()hinzu - Aktualisiere die Dokumentation in
navigation-api.md
Performance optimieren
- Füge Caching in
NavigationTreeServicehinzu - Verwende Eager Loading für Relations
- 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-Dokumentationnavigation.md- Frontend Routing-Dokumentation