Zum Inhalt springen

Link zum alternativen Template mit Typenum 0

Erstellt am 5. April 2005 · 1 Antwort · letzte Antwort am 5. April 2005

Tags: Links, Frage

MartinLeim ·

Ich möchte gerne einen Link zur gleichen Seite, aber mit anderer Typenum, anbieten, um dem Benutzer die Möglichkeit zu geben, das Template zu wechseln.

Um SimulateStatic-komaptibel zu bleiben, habe ich die Variante verwendet, die als Kommentar in der TSref steht: https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Typolink.html (ganz unten).

Ich möchte also zwischen Typenum 0 und 1 wechseln können. Folgenden Link setze ich also ein:

20 = TEXT
20.value = Template wechseln
20.typolink.parameter.data = field:uid
20.typolink.parameter.wrap = |,1,

Ich kann nun zu einer beliebigen Typenum wechseln, mit Ausnahme der 0!
Das ist ziemlich doof, denn eins meiner Layouts hat die Typenum 0. Doch wenn ich hier 0 angebe, wird ein Link zum aktuellen Typ erstellt, nicht zum Typ 0!

Versteh ich den Sinn dahinter nicht oder ist das ein Bug?

MartinLeim ·

OK, nach einer kleinen Reverse-Engineering-Session bis zur Methode "linkData" der Klasse "t3lib_TSTemplate" (in "t3lib/class.t3lib_tastemplate.php") bin ich zu dem Schluss gekommen, dass es sich um einen Bug von Typo3 handelt.

In der Beschreibung der Methode steht zu dem Parameter typoOverride, welcher als Defaultwert mit einem leeren String initialisiert wird (dieser Wert ist der, der im Wrap des Tylolink als Type-Parameter angegeben wird):

@param string If you set this value to something else than a blank string, then the typeNumber used in the link will be forced to this value. Normally the typeNum is based on the target set OR on $GLOBALS['TSFE']->config['config']['forceTypeValue'] if found.

So, im Code heißt es aber:

if (!$typeOverride && intval($GLOBALS['TSFE']->config['config']['forceTypeValue']))	{

Es wird also nicht auf einen leeren String geprüft! Da die Typnummer nicht als String, sondern als Zahl, übergeben wird, fällt der Vergleich auf "Nichtgesetztheit" positiv aus und forceTypeValue kommt zum Zuge.

Folgende Änderung dieser Zeile brachte den gewünschten Effekt:

if ($typeOverride == '' && intval($GLOBALS['TSFE']->config['config']['forceTypeValue']))	{