Zum Inhalt springen

Bestehende Extension erweitern: verschiedene Ansätze

Erstellt am 30. Juli 2007 · 6 Antworten · letzte Antwort am 9. August 2007

Tags: Diskussion

Pom ·

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

just2b ·

Hallo,

kommt ganz drauf an was das für eine Extension ist und wie die Aktualität und der Entwickler ist. Also Kontakt aufnehmen, ihm Patches schicken und bei keiner Antwort kann man sich dann alles weitere überlegen.

ad 1:
Wird die Ext nicht mehr gewartet, dann ist wohl Weg 1 ebenso ok. Ist das Geld vom Kunden gering ebenso.

ad 2:
Ebenso ok und sind auch schneller eingesetzt wenn es doch zu Änderungen kommen sollte bzw auch wenn man die Ext-Modifikation weiter gibt leicher zu erklären.

ad 3:
das geht ganz einfach bei TYPO3 mittels xclass > gibt genügend Extensions, wo du das abschauen kannst, einfach dann die Funktionen überschreiben, die du anders haben willst.
Nachteil: nur 1 xclass auf eine Extension-Datei möglich und wenn sich doch was grundlegend ändert, bist du auch dran.

Welchen Weg du gehst hängt von dir, deiner Zeit usw ab 😉
lg georg
PS: Welche Extension denn, vielleicht kann ichs ja brauchen

Pom ·

Hallo Georg,

danke für die Antworten.

Ich schwanke noch zwischen eigenen Hooks und der XCLASS-Variante. Bei den XCLASSES sehe ich noch den Nachteil, dass man die komplette Funktion kopieren muss, nur um eine Kleinigkeit zu ändern. Das heißt manchmal: Eine 200-Zeilige Funktion kopieren, um 2 Zeilen zu ändern.

Naja, ich schaue mir das XCLASS-Konzept mal genauer an.

Gruß

PS: Ich bastle grad an der Extension mm_forum

just2b ·

Hallo,

wenns um mm_forum geht, dann hooks, weil die ext wird weiterentwickelt und dann ists wahrscheinlich, dass du den hook in die ext bekommst

georg

Pom ·

Ja, ich bin schon dabei. Ich werde den Entwicklern auch meine Patches schicken, mal sehen, ob die es übernehmen. So ein Hook tut ja eigentlich keinem weh 😉

Gruß