Hallo zusammen,
ich möchte mal ein paar grundlegende Gedanken zum Thema "Wie erweitere ich bestehende Extensions?" loswerden.
Man kennt die Situation: Du entdeckst eine neue TYPO3-Extension, die fast alles abdeckt, die du für das neue Features in deinem Projekt benötigst. Alles? Fast alles! Leider lässt sich dein Änderungswunsch nicht durch bloßes Anpassen der HTML-Templates realisieren, du müsstest schon an die Logik und so den Quellcode. Zu deinem Bedauern musst du feststellen, dass es in der Extension keinerlei Hooks gibt, an die du andocken könntest.
Was nun? Warten, dass der Programmierer den Hook einbaut? Oder doch schnell den Quellcode der Extension ändern? Ich hätte da folgende Vorschläge:
1. Dirty: Quellcode der Extension verändern
- dies ist wohl die schnellste, aber auch die "dreckigste" Variante, um das gewünschte Feature zu implementieren.
- man müsste hierbei alle Änderungen genauestens dokumentieren
- Nachteil: bei Update der Extension müssten alle Änderungen erneut vorgenommen werde. - Fazit: I am not amused!
2. Nachhaken: Eigene Hooks setzen
- ein Mittelweg wäre es, im Quellcode der Extension Hooks einzubauen. Diese könnte man dann durch eine eigene Extension aufgreifen und die Ausgabe bzw. Logik den eigenen Wünschen anpassen.
- Der Vorteil hierbei wäre, dass man bei einem Update der Extension nur die Hookpoints erneut setzen müsste, die eigentliche Programmier-Logik wäre somit sauber ausgelagert.
- Fazit: Hmmm!?
3. Objektorientiert denken: Extension-Klassen einbinden und instanziieren
- ich könnte eine eigene Extension schreiben, dort die gewünschte Ext.-Klasse inkludieren und ein Objekt davon erzeugen. So müsste ich ja auf alle Funktionen der Klasse zurückgreifen können.
- Leider bringt diese Methodde einige Probleme mit sich: Eine Frontend-Extension wird nun mal normalerweise vom Frontend aufgerufen, und nicht von einer anderen Klasse inkludiert. Daher muss man der Klasse noch einige Dinge mit auf den Weg geben, damit sie nicht meckert: $cObj, $pi_base, $conf (das eigene Typoscript), etc.
- Ok, angenommen, ich habe die Ext. erfolgreich instanziiert. Wenn ich nun eine Funktion aufrufe, bekomme ich den generierten Content zurück. Aber was nun? Mit str_replace() alle Dinge filtern und ändern, die ich anders haben möchte?
- Fazit: Nochmal "Hhmmmm?!?"
Mich würde interessieren, wie Ihr so eine Problematik anfasst. Habt Ihr weitere Vorschläge und Herangehensweisen? Gibt es "den goldenen Weg", um bestehende Extensions zu erweitern und anzupassen?
Gruß, Pom