Heute will ich euch mal näher bringen wie man eine userFunc z.B. in einer Condition sinnvoll einsetzt. Neben Conditions wie IP, Version, System und den Lieblingen PIDinRootline und PIDupinRootline, gibt es auch noch eine benutzerspezifische Funktion. Mittels dieser ist es möglich, eigene Vergleiche in TypoScript unterzubringen, welche wiederum in PHP geschrieben sind.
Um solch eine Condition zu bauen benötigt man erst einmal eine PHP Datei, in der der Vergleich untergebracht ist. Anders als in der Dokumentation beschrieben, ist es nicht ratsam die Funktion direkt in der localconf.php unterzubringen, sondern in einer separaten Datei. Es gibt nämlich inzwischen Stellen (soweit ich weiß auch im T3 Core), an denen die localconf.php zweimal geladen wird. Wenn dann dort eine Funktion untergebracht ist, führt dies zu einem Fehler (Funktion 2x deklariert). So sieht nun unsere Beispiel Datei (userFunc.php) aus (Teils der TSRef entnommen):
function user_userfuncmatch($cmd){ switch($cmd){ case "checkLocalIP": if (strstr(getenv("REMOTE_ADDR"),"192.168")) return true; break; case "checkSomethingElse": // .... break; } // Wichtig: Die Funktion sollte immer true/false zurückgeben return false; } |
Diese Datei wird im Anschluss mittels include in die localconf.php geladen.
include_once('userFunc.php'); |
Im Anschluss kann der Test in TypoScript vorgenommen werden. Dies geschieht wie bei allen Conditions über die eckigen Klammern. Innerhalb der normalen Klammern gibt man den Parameter $cmd an. Diesen kann man in der PHP-Datei abfragen und z.B. (wie oben) mehrere Bedingungen in ein und der selben userFunc unter bringen.
[userFunc = user_userfuncmatch(checkLocalIP)] // Hier euer Inhalt für die Bedingung [global] |
Viel Spaß beim userFunc bauen.
PS: userFunc’s geben einem viel Freiheit. Diese sollte man nicht zu oft benutzen, weil dadurch das TypoScript undurchsichtig wird und man auch nicht immer weiß wo die Funktion definiert wurde. Also… mit bedacht benutzen. 😉