Zum Inhalt springen

Eigene Condition implementieren?

Erstellt am 26. November 2006 · 5 Antworten · letzte Antwort am 27. November 2006

Tags: Frage

SeveQ ·

Hi hi,

also da das mit meiner Extension noch nicht so 100% hinhaut, möchte ich gern mal wissen, ob es möglich ist, eigene Conditions so zu implementieren, daß sie in allen Templates zur Verfügung stehen. Entweder in der Extension selbst, wo es mir am liebsten wäre, oder irgendwo anders, wenn's in der Extension nicht möglich ist.

Ich möchte also quasi den TS Parser so erweitern, daß auch meine eigenen Conditions abgefragt werden...

Daß das für Extension-eigenen TS Code geht, weiß ich bereits; steht da: https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Syntax/Index.html

Aber wie man das auch für sämtlichen anderen TS Code gültig macht, wüsste ich gern.

Geht das? Wenn ja, wie?

Danke

Grüße,
Hendrik

SeveQ ·

Naja, es geht mir im Prinzip schon um das selbe, nur ist es ein anderer Weg, den ich beschreiten möchte... Aber wenn's kein Grund für einen neuen Thread ist, entschuldige ich mich. Ich würd den Topic von meinem anderen Thread ja ändern, wenn das möglich wäre, um die Frage ein wenig allgemeiner zu formulieren. Das ist der Nachteil an all zu spezifischen Topics. Manchmal kommt es vor, daß solche Threads brauchbare Informationen zu einem Thema enthalten, das vom Topic überhaupt nicht abgedeckt wird. Diese Infos gehen dann im allgemeinen Wust verloren. Darum hab ich einen neuen Thread mit einem etwas allgemeineren Topic aufgemacht.

Meine Frage zielte jetzt aber darauf ab, eigene Conditions in der Form

[myCondition = 1,2,3]

zu implementieren, und nicht die Form

[userFunc = userFunction("1,2,3")]

Die von mir gewünschte Form funktioniert vermutlich auch, allerdings nur für TypoScript, das im Configuration Feld der Extension eingegeben wird. Nicht aber für TS, das in seitenglobalen Templates enthalten ist. Aber genau DAFÜR brauche ich eine selbstdefinierte Condition.

Mit userFunc lief das auch. Aber eigenartigerweise nicht überall. Im Haupt-Template nämlich leider nicht, also genau dort, wo ich's am ehesten brauche.

#angry#

just2b ·
SeveQ schrieb

Mit userFunc lief das auch. Aber eigenartigerweise nicht überall. Im Haupt-Template nämlich leider nicht, also genau dort, wo ich's am ehesten brauche

würd ich halt eher das beheben als dass ich wieder bei Null anfange... typischerweise condition am falschen ort, zB innerhalb von {} usw

georg

SeveQ ·

Nee, darauf hab ich schon geachtet. Es läuft nicht in jedem Template... Nur in meinem Navigation Template funktioniert's. Obwohl die anderen Templates ähnlich strukturiert sind, funktioniert es dort nicht...

Ich hab es jetzt in die class.t3lib_matchcondition.php mit aufgenommen. Die Condition namens themeID fragt dort einfach die Variable $GLOBALS['TSFE']->fe_user->getKey("user", "themeid"); ab und vergleicht diese mit $value, liefert entsprechend der Übereinstimmung true oder eben false zurück:

.
.
.
case 'themeID':
{
  return ($GLOBALS['TSFE']->fe_user->getKey("user", "themeid") == $value);
}
.
.
.

Auch das funktioniert nur in einem meiner Templates.

Achtung! Ich glaube, den Grund dafür gefunden zu haben:

[ themeID = 1 ] || [ month = 3,4,5 ]
.
.
.

[ themeID = 2 ] || [ month = 6,7,8 ]
.
.
.

[ themeID = 3 ] || [ month = 9,10,11 ]
.
.
.

[ themeID = 4 ] || [ month = 12,1,2 ]
.
.
.

Wahrscheinlich ist das Problem, daß hier zwei Conditions zutreffen. Nämlich 1. themeID = 1 und 2. month = 11. Aufgrund der Reihenfolge der Conditions gelten nun die Einstellungen, die auf [month = 9,10,11] folgen...

Wie kann ich das denn trennen? Ich bräuchte hier ja sowas, wie else if.

Wie ihr seht, geht es mir darum, entweder durch Auswahl über eine Dropdownliste, welche über themeID abgefragt werden kann, oder über den aktuellen Monat ein bestimmtes Theme auszuwählen. Ist über die Dropdownliste kein Theme ausgewählt (oder kein User eingeloggt, wo die Auswahl gespeichert werden könnte), so soll der Monat für die Auswahl des Themes herangezogen werden. Andernfalls eben das über die Liste ausgewählte Theme.

Oder denke ich wieder zu kompliziert?

Danke mal! 🙂

Unbekannter Benutzer ·

ich fürchte du musst deinen Code etwas zerfleddern und das einfach der Reihe nach abarbeiten lassen, also genau andersherum wie ein elseif.

Erst alle Monate nacheinander prüfen und dann die themeID. Damit wird ja dann durch den Monat eine Voreinstellung getroffen und falls der User eine themeID hat wird die Voreinstellung dadurch überschrieben und schon sollte das Ergebnis so sein, wie gewünscht.

Viele Grüße

Christian