Entwicklung der Contao-Erweiterung „IsoProductfeed“
Einleitung
Die Entwicklung dieser Erweiterung hatte das Ziel, einen flexiblen XML-Produktfeed für Contao bereitzustellen.
Damit sollten Produktdaten aus der Contao-Datenbank dynamisch in eine XML-Datei exportiert werden können.
Die Idee entstand aus der Notwendigkeit, eine maßgeschneiderte Lösung für einen Online-Shop zu entwickeln,
die bestehende Systeme nicht abdecken konnten.
Planung und erste Schritte
Zunächst habe ich mir überlegt, welche Funktionalitäten die Erweiterung haben muss. Dazu gehörten:
- Ein dynamischer XML-Feed mit individuellen Produktdaten
- Eine automatische Routen-Generierung
- Eine einfache Verwaltung im Contao-Backend
- Eine Möglichkeit, Feedback über ein Formular zu sammeln
Der erste Schritt war die Grundstruktur des Bundles anzulegen und die notwendigen Contao-spezifischen Konfigurationen zu implementieren.
Herausforderungen und Lösungen
1. Dynamische Routen wurden nicht erkannt
Problem: Mein `DynamicRouteLoader` wurde nicht automatisch geladen.
Lösung: Ich musste sicherstellen, dass der Service korrekt registriert wurde und den richtigen Tag
(`routing.loader`) erhielt. Außerdem stellte sich heraus, dass eine andere Konfiguration das Laden überschrieben hatte.
2. Autowiring-Fehler beim ResourceResolver
Problem: Symfony konnte den Parameter `$baseDirectory` nicht automatisch auflösen.
Lösung: Ich habe den Wert explizit in der `services.yaml` definiert (`%kernel.project_dir%/files`).
3. Formular über Symfony Forms mit Contao
Problem: Das Formular wurde nicht korrekt gerendert und verarbeitet.
Lösung: Ich habe `form.factory` aus dem Service-Container geholt und das
`csrf_token_manager` integriert.
4. E-Mail-Versand funktionierte nicht
Problem: Der `MailerInterface`-Dienst von Symfony war in Contao nicht ohne weiteres verfügbar.
Lösung: Ich habe den `mailer`-Service aus dem Container geholt und ihn explizit in meiner Klasse verwendet.
5. Callback für das Speichern des XML-Filenames funktionierte nicht
Problem: Der Callback in `tl_iso_productfeed` wurde nicht ausgeführt.
Lösung: Ich habe überprüft, ob `AsCallback` korrekt gesetzt war und ob die `services.yaml` das
Autowiring richtig durchführte.
6. GitHub-Release erstellen
Problem: Ich konnte den „Create a new release“-Button nicht finden.
Lösung: Ich habe mich mit den GitHub-Releases beschäftigt und gelernt, wie ich eine Version über „Tags“ erstellen kann.
Zeitaufwand
Hier eine grobe Schätzung, wie lange ich an den einzelnen Problemen gearbeitet habe:
- Einrichtung des Bundles & Grundstruktur: 4 Stunden
- Dynamische Routen-Implementierung: 5 Stunden
- Formular-Integration mit CSRF-Schutz: 3 Stunden
- E-Mail-Versand über Symfony-Mailer: 2 Stunden
- Debugging & Tests: 5 Stunden
- GitHub-Release & Dokumentation: 2 Stunden
Insgesamt habe ich etwa 21 Stunden in die Entwicklung investiert. (Das ist das was ich dokumentiert habe.)
Fazit
Diese Erweiterung war eine spannende Herausforderung, weil ich viele verschiedene Symfony- und Contao-Konzepte anwenden musste.
Besonders das Debuggen von Routing-Problemen und das Einbinden von Symfony-Formularen in Contao waren lehrreiche Erfahrungen.
Wenn ich das Projekt noch einmal starten würde, würde ich einige Dinge anders machen:
- Früher Tests mit `debug:container` durchführen, um Service-Probleme schneller zu erkennen.
- Eine detailliertere Planung für die Routen-Struktur machen.
- Frühzeitig den E-Mail-Versand testen, um Probleme mit dem `MailerInterface` zu vermeiden.
Insgesamt bin ich aber sehr zufrieden mit dem Ergebnis, und es hat mir viel Spaß gemacht, die Erweiterung zu entwickeln!!!
Ein großes Danke auch nochmal an das Forum, was mir hier und da sehr geholfen hat :-)
Iso Productfeed auf packagist