Typoscript: Bestimmte Subnavigation anders sortieren


February 22, 2010 at 10:46
Typo3

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:
marks.NAVI_OBEN = HMENU
marks.NAVI_OBEN {
    ### Erste Ebene ###
    1 = TMENU
    1 {
      wrap = <ul class="menu">|</ul>
      expAll = 1
      NO.wrapItemAndSub = <li>|</li>
      ACT < .NO
      ACT = 1
      ACT.ATagParams = class="active"
    }
### Zweite, dritte Ebene ###
    2 < .1
    3 < .1
}
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:
includeLibs.reversemenu = fileadmin/templates/scripts/sortMenu.php
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:
  function user_pageCmp ($page1, $page2)
  {

    /* wenn Navigationstitel leer ist Titel verwenden */
    $page1SortField = trim($page1["nav_title"]) == "" ? "title" : "nav_title";
    $page2SortField = trim($page2["nav_title"]) == "" ? "title" : "nav_title";

    // uf8_decode, da strcasecmp kein uft8 unterstütz beim sortieren

    $ret =  strcasecmp  ( utf8_decode( $page1[$page1SortField] ) , utf8_decode( $page2[$page2SortField] ) );
    return $ret;
  }

  function user_sortMenu ($menuArr  )
  {
    if($menuArr[0]["pid"] == 21 && $GLOBALS["L"] == 3)
      usort($menuArr, "user_pageCmp"); //nach Titel sortieren
    else
      ksort($menuArr); //normal sortieren
    return $menuArr;
  }
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!

Hinterlasse einen Kommentar:
André Lademann
06.10.2010
Danke! Das ist zwar nicht was ich direkt brauchte, doch es hat mir geholfen die itemArrayProcFunc zu verstehen.