# 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