Function "Navigation": Unklare Logik der isEmpty-Prüfung
Author: thorsten
Publication Date: 10/24/2013 16:10
Liebe Community,
ich verwende eine Navigation-Function welche nur die Navistruktur der Ebene 2 auf Basis des aktuellen Navipunktes ausgeben soll:
<CMS_FUNCTION name="Navigation" resultname="fr_nav_sub2">
<CMS_PARAM name="expansionVisibility" value="standard" />
<CMS_PARAM name="wholePathSelected" value="0" />
<CMS_ARRAY_PARAM name="unselectedHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[<li><a href="$CMS_REF(#nav.ref)$">$CMS_VALUE(#nav.label)$</a>]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="selectedHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[<li class="active"><a href="$CMS_REF(#nav.ref)$">$CMS_VALUE(#nav.label)$</a>]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
</CMS_FUNCTION>
Erstelle ich nun eine Seite auf Basis dieses Templates und verknüpfe diese mit einem Navipunkt auf Ebene 1 (index=0) welcher keine Kinder hat, würde ich erwarten, dass fr_nav_sub2.isEmpty den Wert TRUE zurückliefert.
Dies ist aber nicht der Fall:
$CMS_VALUE(fr_nav_sub2.isEmpty)$ -> FALSE
$CMS_VALUE("#"+fr_nav_sub2+"#")$ -> ## (fr_nav_sub2 ist also leer, liefert nichts zurück)
$CMS_IF(fr_nav_sub2 == "")$
$CMS_VALUE("ist leer")$
$CMS_ELSE$
$CMS_VALUE("ist nicht leer")$
$CMS_END_IF$
-> Ergebnis: "ist nicht leer"
Version: 5.0.318.57504
Bug, Feature oder übersehe ich was? :smileyhappy:
Danke & Grüße,
Thorsten
Tags: isempty, navigationsfunktion
-
Author: mbergmann - 11/9/2013 11:37
Hallo Thorsten,
zum besseren Verständnis, warum das isEmpty in dieser Form nicht funktioniert, ein bisschen Hintergrundinformation zur Arbeitsweise der Header-Funktionen:
die Variable fr_nav_sub2 enthält nicht das Ergebnis der Navigationsfunktion sondern ist quasi die Navigationsfunktion selbst. Erst durch ein $CMS_VALUE(fr_nav_sub2)$ würde das Ergebnis berechnet und ausgegeben - aber auch danach eben nicht in der Variablen gespeichert (anders ist das bei einem ContentSelect, dort wird gecacht). Das kann z.B. sehen, wenn man innerhalb der Navigationsfunktion eine Variable nutzt und diese zwischen zwei Aufrufen von $CMS_VALUE(fr_nav_sub2)$ ändert.
Um die Ausgabe einer Navigationsfunktion vorher (z.B. zur Leerprüfung) in eine Variable zu schreiben, kann man deren toString()-Methode nutzen:
$CMS_SET(set_navResult,fr_nav_sub2.toString())$
$CMS_IF(!set_navResult.isEmpty)$
...
$CMS_END_IF$
Viele Grüße
Michael
0
Vous devez vous connecter pour laisser un commentaire.
Commentaires
1 commentaire