# Cabinet Display CMS - Dokumentation ## Übersicht Das Display CMS ermöglicht die zentrale Verwaltung der Inhalte für die Digital Signage Display-Seite im Cabinet Showroom Bielefeld. **Einheitlicher Pfad:** Das System nutzt `public/_cabinet/` für Testserver und Live-Server. ## Zugriff ### Testserver - **Display:** `http://portal.b2in.test/_cabinet/` - **CMS:** `http://portal.b2in.test/admin/cms/cabinet` - **API:** `http://portal.b2in.test/api/display/config` ### Live-Server - **Display:** `https://cabinet.b2in.eu/` (Subdomain zeigt auf `/_cabinet/`) - **CMS:** `https://b2in.eu/admin/cms/cabinet` - **API:** `https://b2in.eu/api/display/config` ## Funktionen ### 1. Video-Verwaltung - ✅ Videos aus dem `public/_cabinet/assets/` Ordner verwalten - ✅ Reihenfolge per Pfeiltasten ändern - ✅ Video-Position (0-100%) für optimalen Bildausschnitt einstellen - ✅ Videos aktivieren/deaktivieren - ✅ Titel für bessere Übersicht vergeben ### 2. Footer-Content-Verwaltung mit Tracking - ✅ Überschrift, Unterzeile und **optional** Ziel-URL eingeben - ✅ **Automatische Short-Link-Generierung** (nur wenn URL angegeben) - ✅ **Echtzeit-Klick-Tracking** über Short-Links - ✅ **Klick-Statistiken** direkt im CMS - ✅ **Ohne URL:** Nur Text wird angezeigt, kein QR-Code - ✅ **Mit URL:** QR-Code mit Short-Link wird automatisch generiert - ✅ Reihenfolge ändern (werden alle 30 Sekunden rotiert) - ✅ Inhalte aktivieren/deaktivieren - ✅ Short-Code neu generieren - ✅ Klick-Zähler zurücksetzen ### 3. Short-Link-System #### Wie funktioniert es? **Mit URL (QR-Code wird angezeigt):** 1. **Beim Erstellen** mit URL wird automatisch ein 6-stelliger Short-Code generiert (z.B. `c59kjb`) 2. **Short-URL** wird automatisch erstellt: - Testserver: `http://portal.b2in.test/_cabinet/go.php?z=c59kjb` - Live-Server: `https://cabinet.b2in.eu/go.php?z=c59kjb` 3. **QR-Code** auf dem Display zeigt die Short-URL 4. **Bei Klick** wird der User zur Original-URL weitergeleitet 5. **Klicks werden gezählt** und im CMS angezeigt **Ohne URL (nur Text):** 1. **Beim Erstellen** ohne URL wird kein Short-Code generiert 2. **Nur Text** wird im Footer angezeigt (Überschrift + Unterzeile) 3. **Kein QR-Code** wird angezeigt 4. **Text-Bereich** nutzt die volle Breite des Footers #### Vorteile - ✅ Kürzere URLs für bessere QR-Codes - ✅ Automatisches Tracking aller Scans - ✅ Zentrale Verwaltung aller Links - ✅ Statistiken direkt im CMS - ✅ Links können geändert werden ohne QR-Code neu zu generieren - ✅ Funktioniert identisch auf Test- und Live-Server ## CMS-Interface ### Video-Playlist ``` ┌─────────────────────────────────────────────┐ │ Video-Playlist [+] │ ├─────────────────────────────────────────────┤ │ ↑↓ [Aktiv] Herbst 2025 │ │ 📁 herbst_2025.mp4 📍 Position: 25% │ │ [👁] [✏] [🗑] │ ├─────────────────────────────────────────────┤ │ ↑↓ [Aktiv] Frühjahr 2025 │ │ 📁 fruehjahr_2025.mp4 📍 Position: 10% │ │ [👁] [✏] [🗑] │ └─────────────────────────────────────────────┘ ``` ### Footer-Inhalte ``` ┌─────────────────────────────────────────────┐ │ Footer-Inhalte [+] │ │ 📊 Gesamt-Klicks: 47 │ ├─────────────────────────────────────────────┤ │ ↑↓ [Aktiv] Beratung & Termin [🔵 23 Klicks]│ │ Jetzt Termin vereinbaren. │ │ 🔗 c59kjb [📋 Short-Link] │ │ 🔗 https://www.cabinet.de/bielefeld... │ │ [👁] [⋮] │ │ ├─ Bearbeiten │ │ ├─ Short-Code neu generieren │ │ ├─ Klicks zurücksetzen │ │ └─ Löschen │ └─────────────────────────────────────────────┘ ``` ## Technische Details ### Ordnerstruktur ``` public/_cabinet/ ├── index.html # Display-Seite (lädt dynamisch via API) ├── go.php # Short-Link-Handler mit Tracking ├── assets/ # Video-Dateien │ ├── herbst_2025.mp4 │ ├── fruehjahr_2025.mp4 │ └── ... └── clicks.log # Tracking-Log (wird automatisch erstellt) ``` ### Datenbank-Tabellen #### `display_videos` ```sql - id (PK) - filename -- Dateiname des Videos - title -- Optionaler Titel - position -- Vertikale Position (0-100%) - sort_order -- Reihenfolge der Wiedergabe - is_active -- Aktiv/Inaktiv - created_at, updated_at ``` #### `display_footer_contents` ```sql - id (PK) - headline -- Überschrift - subline -- Unterzeile - url -- Original-Ziel-URL - short_code -- 6-stelliger eindeutiger Code - clicks -- Anzahl der Klicks - sort_order -- Reihenfolge der Anzeige - is_active -- Aktiv/Inaktiv - created_at, updated_at ``` ### Konfiguration **Datei:** `config/display.php` ```php 'base_path' => env('DISPLAY_BASE_PATH', '_cabinet'), 'subdomain' => env('DISPLAY_SUBDOMAIN', null), 'domain' => env('DISPLAY_DOMAIN', 'b2in.eu'), ``` **Umgebungsvariablen (.env):** ```env # Testserver DISPLAY_BASE_PATH=_cabinet DISPLAY_SUBDOMAIN= DISPLAY_DOMAIN=b2in.test # Live-Server DISPLAY_BASE_PATH=_cabinet DISPLAY_SUBDOMAIN=cabinet DISPLAY_DOMAIN=b2in.eu APP_ENV=production ``` ### API-Response-Format **Endpunkt:** `/api/display/config` ```json { "videoPlaylist": [ { "src": "assets/herbst_2025.mp4", "position": 25 } ], "footerContent": [ { "headline": "Beratung & Termin", "subline": "Jetzt Termin vereinbaren.", "url": "https://cabinet.b2in.eu/go.php?z=c59kjb" } ] } ``` ## Workflow-Beispiele ### Neuen Footer-Inhalt hinzufügen 1. Im CMS auf **"Inhalt hinzufügen"** klicken 2. Formular ausfüllen: - Überschrift: "Beratung & Termin" - Unterzeile: "Jetzt Termin vereinbaren." - URL: `https://www.cabinet.de/bielefeld?utm_source=...` 3. **Speichern** 4. ✅ Short-Code wird automatisch generiert (z.B. `c59kjb`) 5. ✅ Short-URL wird erstellt: `https://cabinet.b2in.eu/go.php?z=c59kjb` 6. ✅ Display lädt neue Konfiguration (max. 5 Minuten) 7. ✅ QR-Code zeigt automatisch den Short-Link 8. ✅ Klicks werden gezählt und angezeigt ### Video hinzufügen 1. Video-Datei in `public/_cabinet/assets/` hochladen 2. Im CMS auf **"Video hinzufügen"** klicken 3. Video aus Dropdown auswählen 4. Titel vergeben (optional) 5. Position einstellen (0-100%) 6. **Speichern** 7. ✅ Video wird zur Playlist hinzugefügt 8. ✅ Display spielt Video ab ### Klick-Statistiken ansehen 1. Im CMS unter **"Footer-Inhalte"** öffnen 2. Bei jedem Inhalt wird die Anzahl der Klicks angezeigt 3. **Gesamt-Klicks** werden oben summiert angezeigt 4. Zum Zurücksetzen: **⋮ → Klicks zurücksetzen** ### Short-Code neu generieren 1. Bei gewünschtem Footer-Inhalt auf **⋮** klicken 2. **"Short-Code neu generieren"** wählen 3. ✅ Neuer Code wird erstellt 4. ⚠️ Alter Code funktioniert nicht mehr 5. ✅ QR-Code aktualisiert sich automatisch beim nächsten Reload ## Logging ### Datenbank-Tracking (Primär) - Alle Klicks werden in der Datenbank gezählt - Echtzeit-Statistiken im CMS - Auswertungen nach Inhalt möglich ### Datei-Logging (Backup) - Zusätzliches Log: `public/_cabinet/clicks.log` - Format: `YYYY-MM-DD HH:MM:SS - Code: c59kjb - Headline: ... - URL: ...` - Nützlich für detaillierte Analysen **Log ansehen:** ```bash tail -f public/_cabinet/clicks.log ``` ## Wartung & Backup ### Wichtige Daten für Backup - **Datenbank:** `display_videos`, `display_footer_contents` - **Video-Dateien:** `public/_cabinet/assets/` - **Tracking-Log:** `public/_cabinet/clicks.log` ### Videos hinzufügen ```bash # Upload via SCP scp video.mp4 user@server:/var/www/html/public/_cabinet/assets/ # Oder via FTP/SFTP # Dann im CMS hinzufügen ``` ### Cache leeren ```bash php artisan config:clear php artisan cache:clear php artisan route:clear ``` ## Troubleshooting ### Display zeigt "LADEN..." **Problem:** API nicht erreichbar **Lösung:** Browser-Console (F12) prüfen, API-URL testen ### Short-Links funktionieren nicht **Problem:** Datenbankverbindung oder Berechtigungen **Lösung:** `go.php` Berechtigungen prüfen, Logs prüfen ### Klicks werden nicht gezählt **Problem:** Datenbankupdate fehlgeschlagen **Lösung:** `clicks.log` prüfen, Datenbank-Logs prüfen ### Videos werden nicht abgespielt **Problem:** Falsches Format oder Pfad **Lösung:** Browser-Console prüfen, `.mp4` mit H.264 verwenden ## Performance-Tipps ### Video-Optimierung ```bash # FFmpeg für kleinere Dateien ffmpeg -i input.mp4 -c:v libx264 -crf 23 \ -preset medium -c:a aac -b:a 128k output.mp4 ``` ### Auto-Reload - Display lädt alle 5 Minuten neue Konfiguration - Für sofortiges Update: Display-Seite neu laden ## Support & Dokumentation - **Setup-Guide:** `DISPLAY_SETUP_LIVE.md` - **ENV-Variablen:** `ENV_VARIABLES_DISPLAY.md` - **Laravel-Logs:** `storage/logs/laravel.log` - **Tracking-Log:** `public/_cabinet/clicks.log` Bei Problemen: 1. Logs prüfen 2. Browser-Console prüfen 3. API manuell testen 4. Cache leeren