Ich selbst nutze die Extension Vhs sehr selten, betreue gelegentlich Projekte, die es einsetzen und komme daher nicht drumrum, mich damit zu beschäftigen.
Folgendes Setup: eine Seite mit drei Sprachen – Deutsch [0], Englisch [1] und Polnisch [2]. Die Zahl in Klammern ist die ID der Sprache im System. Wenn ich in Deutsch bin, dann möchte ich zur Auswahl Englisch und Polnisch, auf der englischen Seite Deutsch und Polnisch und auf der polnischen eben Deutsch und Englisch.
So kann man in Flux die Sprachnavigation einsetzen:
<v:page.languageMenu layout="name" />
Wenn man die Auswahl der Sprachen einschränken möchte, dann kann man einen weiteren Parameter mitgeben und darin eine kommaseparierte Liste mit Sprachen.
<v:page.languageMenu layout="name" languages="0,1,2" />
Meiner Logik nach sollte die Sprachauswahl bleiben, wie sie ist. Stattdessen verschwindet die Standardsprache aus der Navigation. Warum das?
In vhs/Classes/ViewHelpers/Page/LanguageMenuViewHelper.php Zeile 292ff.
$limitLanguages = static::arrayFromArrayOrTraversableOrCSVStatic($this->arguments['languages'] ?? []); $limitLanguages = array_filter($limitLanguages);
Da wird der Wert aus dem Argument mit array_filter verarbeitet. Wird array_filter kein Callback übergeben, dann entfernt es alle leeren Elemente aus dem Array gem. der Definition von empty. Und empty sieht 0 auch als leer an. Damit wird aus der Liste 0,1,2 die 0 entfernt.
Und dann ist da ja noch das Problem mit dem ausblenden der aktiven Sprache. Da wäre ein Parameter sinnvoll gewesen. Die Lösung, um immer die nicht aktiven Sprachen anzuzeigen ist somit ein manuelles Rendering der Sprachnavigation, ohne die Sprachliste einzuschränken, ist somit diese:
<v:page.languageMenu as="languageMenu" flagImageType="png" layout="name"> <ul> <f:for each="{languageMenu}" as="language"> <f:if condition="{language.current} != 1"> <li> <a href="{language.url}">{language.label}</a> </li> </f:if> </f:for> </ul> </v:page.languageMenu>