Zum Inhalt springen

Erste Versuche mit XCLASS anhand TSpagegen

Erstellt am 12. Dezember 2005 · 4 Antworten · letzte Antwort am 19. Dezember 2005

Tags: PHP, Frage

Unbekannter Benutzer ·

Huhu,

ich möchte die Code-Ausgabe im Frontend, speziell die Head-Angaben, etwas sauberer sortieren (Zeilenumbrüche, Einrückungungen, etc.), ohne den TYPO3-Core anzupacken... Ich habe mich nun zum ersten Mal an eine XCLASS gewagt...

Ich habe im Ordner /typo3conf/ die Datei "class.ux_tslib_pagegen.php" angelegt und binde sie in localconf.php folgendermaßen ein:

$TYPO3_CONF_VARS["FE"]["XCLASS"]["tslib/class.tslib_pagegen.php"] = PATH_typo3conf."class.ux_tslib_pagegen.php";

Meine XCLASS hat folgenden Inhalt:

<?

class ux_TSpagegen extends TSpagegen {

	function renderContentWithHeader($pageContent) {

		}

	}

?>

Leider wird die Funktion komplett ignoriert, habe zum Testen auch einfach mal versucht den kompletten Seiteninhalt per "$GLOBALS['TSFE']->content = '';" zu löschen. Das heisst, dass immernoch die alte Klasse/Funktion benutzt wird. PHP-Fehler werden allerdings sofort erkannt, was zeigt, dass die Datei immerhin eingebunden wird.

Hat jemand ne Idee?

Dank im Vorraus.

steffenk ·

Bist Du Dir sicher, das die Var PATH_typo3conf gefüllt ist ?
Ich kenne das nur von Extensions, also der Form

$TYPO3_CONF_VARS["FE"]["XCLASS"]["tslib/class.tslib_pagegen.php"] = t3lib_extMgm::extpath($_EXTKEY)."class.ux_tslib_pagegen.php";

Damit die Klasse benutzt wird, muss sie instanziert werden, also

t3lib_div::makeInstance($classname)
Unbekannter Benutzer · · Beste Antwort
steffenK schrieb

Bist Du Dir sicher, das die Var PATH_typo3conf gefüllt ist ?
Ich kenne das nur von Extensions, also der Form

Ja, er bindet meine Klasse ja auf jeden Fall ein, wie ich sagte, da PHP-Fehler sofort angezeigt werden.

steffenK schrieb

Damit die Klasse benutzt wird, muss sie instanziert werden, also

Folgendermaßen stehts im Doc auf typo3.org, wo ein XCLASS-Beispiel anhand von tslib_cObj demonstriert wird:

The last thing which remains is to instantiate the class ux_tslib_cObj instead of tslib_cObj. This is done automatically, because everywhere tslib_cObj is instantiated, it is first examined if ux_tslib_cObj exists and if so, that class is instantiated instead!

Daher dachte ich, dass im TYPO3-Code generell makeInstance benutzt wird, welches zuerst auf die Existenz einer XCLASS prüft.

steffenk ·

ich habe es noch nie gemacht, daher kann ich auch nicht auf Erfahrungswerte zurückgreifen, finde die Methode aber sehr interessant.
Ich beziehe mich auf Kai Laborenz - Das Handbuch für Entwickler, dort steht es nur kurz und knapp, aber so wie ich beschrieben habe. Dort steht u.a., das jede Klasse nur einmal erweitert werden kann. Wenn also schon eine Klasse diese Methode mit der pagegen durchführt, kann Deine Lösung nicht mehr gehen. Am besten Du lässt Dir das
$TYPO3_CONF_VARS["FE"]["XCLASS"]-Array mal ausgeben. Du hast aber die Möglichkeit, diese Erweiterung wieder zu erweitern, also mit ux_ux_... usw.

Am Ende steht eben, es muss mit makeInstance instanziert werden, was für mich soviel heisst, das man es selber machen muss.

Sonst bau doch erstmal einfache Beispiele aus der Doku nach.

Unbekannter Benutzer ·

Schade, gerade TSpagegen wird NICHT über t3lib_div::makeInstance($classname) initialisiert...

Ich habe es jetzt anders gelöst:

page.config.pageGenScript = fileadmin/pagegen.php

War dann doch so einfach :o