Bei fast jeder Extension findet man am Ende einen Abschnitt, der es ermöglicht diese Extension zu erweitern, bzw. die Funktionen für eigene Zwecke zu überschreiben. Das hat den Vorteil, dass man der eigentlichen Quellcode nicht ändert und so bei einem Update nichts überschrieben werden kann.
In einem kurzen Beispiel werde ich die Extension tip-a-friend erweitern, so dass einige ungünstige Fehler behoben werden.
Zunächst muss ein Ordner angelegt werden, dass die neue Extension beherbergen soll, diese soll np_tipafriend_ext heißen. Das _ext deutet darauf hin, dass die Extension eine Erweiterung ist, der Name der erweiterten Extension tipafriend steckt im Namen auch drin.
Dann öffnet man die Klassen-Datei der Extension, die man erweitern will und sucht ganz unten den Abschnitt mit der XCLASS. Bei tip-a-friend nämlich:
- if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tipafriend/pi/class.tx_tipafriend.php']) {
- include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/tipafriend/pi/class.tx_tipafriend.php']);
- }
Um nun die neue Extension als Erweiterung der tip-a-friend in Typo3 zu registrieren, legt man im neuen Extension-Ordner die Datei ext_localconf.php an und schreibt dort folgendes hinein:
- if (!defined ('TYPO3_MODE')) die ('Access denied.');
- $TYPO3_CONF_VARS['FE']['XCLASS']['ext/tipafriend/pi/class.tx_tipafriend.php'] = t3lib_extMgm::extPath($_EXTKEY).'class.ux_tx_tipafriend.php';
Der erste Teil entspricht dem Ausdruck entnommen aus der Tip-a-friend Klassen-Datei, der zweite gibt an, wie die Klasse der neuen Extension lautet. Dieser muss einem bestimmten Schema folgen: dem Klassennamen der zu erweiternden Extension wird ein ux_ vorgestellt! Falls der Klassenname tx_ahlinklist_pi1 lautet, dann ist die Erweiterung ux_tx_ahlinklist_pi1.
Dann legt man eine Datei an, die den mit ux_ beginnenden Dateinamen trägt. Direkt im Ordner der Extension gibt es nun einen Datei, die class.ux_tx_tipafriend.php heißt und (ohne Kommentarblock) folgenden Code enthält:
- class ux_tx_tipafriend extends tx_tipafriend {
- function main_tipafriend($content,$conf) {
- return "HIER";
- }
- }
Die Hauptfunktion der Tip-a-friend heißt nämlich main_tipafriend (bei den meisten Extensions einfach nur main), daher wird in der neuen Klasse die Funktion überschrieben und liefert “HIER” zurück. Man kann die Funktionen der übergeordneten Klasse aufrufen mit parent::Funktionsname, das Ergebnis dann bearbeiten und zurückgeben.

11. März 2009 um 22:08
[...] Möglichkeit über XCLASS nicht die eigentlichen Skripte auszuführen sondern alternative Skripte (Beispiel) – somit kann eine komplett andere Datei als die eigentlich vorbestimmte verwendet [...]
25. August 2009 um 16:50
Geniale Sache, hab ich gar nicht gewusst dass das so komfortabel und sauber geht!
15. Juli 2010 um 11:06
[...] [...]
06. Mai 2011 um 23:24
hi. mir ist irgendwie die abwärtskompatiblität zu xclass ab typo3 5 und der verwendung von xclass in extbase-extension-entwicklung nicht klar. man sagt, das sei in extbase nicht mehr nötig. aber wie es richtig geht, wird verschwiegen. stillstand ist der tod
06. Juni 2011 um 08:36
@stefan: das geht dann zB über die Dipendency injection
07. Juni 2011 um 12:43
wie sieht das aus, wenn ich bereits eine Extension habe, welche – z.B. class.tx_tipafriend.php via einer class.ux_tx_tipafriend.php erweitert. ich kann meiner eigenen Erweiterung ja dann unmöglich auch eine class.ux_tx_tipafriend.php einverleiben. Bzw. kann ich natürlich schon, Resultat ist dann nur, dass nur eine der beiden Extensions arbeitet … die zuletzt aufgerufene (mit dem alphabetisch sortiert, späteren Namen)
07. Juni 2011 um 12:52
Das ist leider das Problem bei der XCLASS – du kannst eine Klasse genau einmal erweitern. Wenn du nun ein Extension (ext1) hast (deine eigene, die die ursprüngliche Klasse erweitert), bleibt dir nichts anderes übrig, als in der zweiten Extension (ext2) den relevanten Teil aus ext1 zu übernehmen.
07. Juni 2011 um 14:44
daduch geht mir dann die updatefähigkeit der anderen Erweiterung verloren
gibt es einen Weg eine Erweiterung herzustellen ohne XCLASS zu verwenden?
07. Juni 2011 um 15:33
Manche Extensions bieten Hooks, die es ermöglichen, Daten zu manipulieren oder bestimmte Aktionen auszuführen. Der Vorteil ist, dass man viele Hooks implementieren kann. Allerdings muss die Extension das unterstützen.
Du kannst entweder selbst einen Hook schreiben oder den Extension-Entwickler bitten einen Hook zu implementieren.
Was hast du denn konkret vor?
07. Juni 2011 um 17:44
ganz konkret will ich die tt_news etwas anpassen. Weiterhin habe ich bereits die erweiternde Extension sg_newsplus installiert, welche zusätzlich die Auswahl verschiedener Single-Templates bereitstellt. Meine Erweiterung ist unter anderem die anpassung der Funktion pi_list_browseresults(), welche ursprünglich von typo selbst kommt. Die hier resultierende Pagingfunktion möchte ich in Funktion und Darstellung für die Newsseiten entsprechend anpassen. Hierfür sehe ich nur den Weg der Erweiterung/Überschreibung der tt_news internen Funktion.
20. Januar 2012 um 14:44
Danke für die tolle Erklärung. Hat mir sehr geholfen. Super.