Typoscript: Bestimmte Subnavigation anders sortieren

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!

One thought on “Typoscript: Bestimmte Subnavigation anders sortieren

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.