noch mehr typoscript

22. Februar 2010

Die Typoscript doku is einfach nur SCHROTT. Man kann nachsehen, was einzelne Variablen machen, aber wehe, wenn man eine Funktion sucht und deren Namen eben nicht kennt oder gar wissen möchte, wo man die jeweiligen Dinge denn jetzt hinschreiben soll (TSconfig? root template? auf einen Notizblock kritzeln und verbrennen?)… Also dann, ein paar Erkenntnisse aus bisheriger, stundenlanger Recherche…

GET-Variablen über alle Seiten hinweg mitnehmen (d.h. in alle Links automatisch einbinden)

Möchte ich Typo3 dazu bringen, noch mehr Variablen als ID und L (Sprache) in alle Links einzubeziehen (hier beispielsweise die Variable Fsize), dann schreibe ich im entsprechenden Template (!) folgendes:

  1. config.linkVars = Fsize,L

GET-Variablen abfragen in TypoScript

Möchte ich diese GET Variablen jetzt in meinem Template abfragen (in meinem Fall um verschiedene Stylesheets einzubinden), dann geht das so:

  1. [globalVar = GP:Fsize=1]
  2. page.includeCSS.file7 = fileadmin/style1.css
  3. [global]
  4. [globalVar = GP:Fsize=2]
  5. page.includeCSS.file7 = fileadmin/style2.css
  6. [global]

Javascript einbauen

Einfaches Javascript kann ich in meinen Header so einbauen:

  1. page.headerData.120 = TEXT
  2. page.headerData.120.value (
  3. <script type="text/javascript"> ... </script>
  4. )

Typoscript: Bestimmte Subnavigation anders sortieren

22. Februar 2010

Ich habe eine Navigation, die hat folgende Struktur:

1. Über uns
|- 1.1 Geschichte
|- 1.2 Abenteuer
2. Team
|- 2.1 Innsbruck
|- 2.2 Boston
|- 2.3 München
3. Kontakt

Diese Navigation erzeuge ich im Typoscript folgendermaßen:

  1. marks.NAVI_OBEN = HMENU
  2. marks.NAVI_OBEN {
  3. ### Erste Ebene ###
  4. 1 = TMENU
  5. 1 {
  6. wrap = <ul class="menu">|</ul>
  7. expAll = 1
  8. NO.wrapItemAndSub = <li>|</li>
  9. ACT < .NO
  10. ACT = 1
  11. ACT.ATagParams = class="active"
  12. }
  13. ### Zweite, dritte Ebene ###
  14. 2 < .1
  15. 3 < .1
  16. }

Die Seite ist zweisprachig, nämlich deutsch (L=1) und englisch (L=3). Nun wünscht sich der Kunde, dass die Subnavigation von “Team” in der englischen Version anders sortiert wird, nämlich Boston, Innsbruck, München. Es war gar nicht so einfach, rauszufinden, wie ich nur für einen bestimmten Unternavigationspunkt die Sortierung ändern kann, aber schließlich hab ich es folgendermaßen umgesetzt:

  1. includeLibs.reversemenu = fileadmin/templates/scripts/sortMenu.php
  2. page.10.marks.NAVI_OBEN.2.itemArrayProcFunc = user_sortMenu

Wichtig ist hierbei natürlich, dass der Pfad zur php Datei stimmt, und der Funktionsname MUSS mit dem Präfix “user_” beginnen. Die PHP Datei sieht jetzt so aus:

  1. function user_pageCmp ($page1, $page2)
  2. {
  3. /* wenn Navigationstitel leer ist Titel verwenden */
  4. $page1SortField = trim($page1["nav_title"]) == "" ? "title" : "nav_title";
  5. $page2SortField = trim($page2["nav_title"]) == "" ? "title" : "nav_title";
  6. // uf8_decode, da strcasecmp kein uft8 unterstütz beim sortieren
  7. $ret = strcasecmp ( utf8_decode( $page1[$page1SortField] ) , utf8_decode( $page2[$page2SortField] ) );
  8. return $ret;
  9. }
  10. function user_sortMenu ($menuArr )
  11. {
  12. if($menuArr[0]["pid"] == 21 && $GLOBALS["L"] == 3)
  13. usort($menuArr, "user_pageCmp"); //nach Titel sortieren
  14. else
  15. ksort($menuArr); //normal sortieren
  16. return $menuArr;
  17. }

Mein Navigationspunkt Team hat die PID 21, daher die Abfrage, und die ID der Sprache, um die es geht, ist 3. Natürlich ist diese Lösung noch nicht perfekt, immerhin ist es nur Zufall, dass die neue Reihenfolge zufällig der alphabetischen Sortierung entspricht, aber in diesem Fall mit dieser Variante gibt es ohnehin keine saubere Lösung. Die Idee für die Lösung meines Problems und der Code für die php Datei stammen von hier, vielen Dank für die ausführliche und anschaulcihe Erklärung!

Alle Sonderzeichen entfernen

18. Februar 2010

Simpel, aber ich muss es mir notieren…
So entferne ich alle Sonderzeichen aus einem String:

  1. $txt= preg_replace("/[^a-zA-Z0-9_]/" , "" , $txt);