TYPO3 Menu-Sortierung bei mehrsprachigen Webseiten
02.12.2008 - 15:19
Mit TYPO3 können Menus sortiert werden. Diese Funktionalität wird im TMENU mit alternativeSortingField bereit gestellt. Allerdings birgt dies einige Tücken.
Bei mehrsprachigen Seiten sortiert TYPO3 nach der Originalsprache des angegebenen Feldes, dessen Übersetzung wird jedoch nicht beachtet. Zudem ist es nicht möglich für die Sortierung mehrere Felder anzugeben. Beispielsweise möchte man den Navigationstitel anstelle des Seitentitels verwenden, dort wo dieser angegeben wurde.
Beispiel Sortierung mit alternativeSortingField
lib.mainnavi= HMENU
lib.mainnavi.entryLevel = 0
lib.mainnavi.1 = TMENU
lib.mainnavi.1 {
NO = 1
NO {
allWrap = <span>|</span>
}
CUR = 1
CUR < .NO
ACT = 1
ACT < .CUR
alternativeSortingField = title ASC
}
Lösung
Für die Webseite der Anwaltskanzlei Altenburger haben wir für beides eine Lösung gefunden.
Mit TypoScript kann eine Funkion angegeben werden die aufgerufen wird, nachdem das Menu übersetzt wurde. Damit kann man das Menu beliebig sortieren. Zu beachten ist, dass der Funktionsname mit "user_" anfangen muss. Die Funktion kann man in einer beliebigen PHP-Datei erstellen, die man z.B. aus der localconf.php included.
Typoscript Code
lib.subnavi {
NO = 1
NO {
allWrap = <span>|</span>
}
CUR = 1
CUR < .NO
CUR.allWrap = <span>|</span>
ACT = 1
ACT < .CUR
itemArrayProcFunc = user_sortMenu
}
}
localconf.php
/fileadmin/templates/scripts/sortMenu.php
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 )
{
usort($menuArr, "user_pageCmp");
return $menuArr;
}
?>
