Navigation in der FS Vorschau
Author: Charlotte_Koeni
Publication Date: 12/22/2011 9:58
Hallo zusammen,
ich bastel gerade an einem Navigationsskript und dabei ist folgendes Problem aufgetaucht:
Ich habe eine Hauptnavigation welche die ersten fünf Ordner der ersten Ebene anzeigt, zusätzlich wird die dazugehörige zweite Ebene aufgeklappt, wenn man mit der Maus über einen Menüpunkt der ersten Ebene fährt. Dann gibt es noch eine "Content-Navigation" die alle Ordner der Ebene 2 und 3 darstellen soll. Diese wird erst angezeigt, wenn ich mit der Maus einen Menüpunkt der Ebene 2 angeklickt habe und auf die entsprechende Seite springe.
In der FirstSpirit - Vorschau funktioniert das wunderbar. Ich kann mich über die Hauptnavigation zu den Seiten durchklicken und es erscheint auf den angesteuerten Seiten ordnungsgemäß immer die linke Navigation (Content-Navigation).
Wenn ich aber direkt eine Seite der zweiten bzw. dritten Ebene in der Vorschau öffne, würde ich erwarten, dass dann auch sofort die entsprechende "Content-"Navigation angezeigt wird. Das geschieht aber leider nicht. Erst wenn ich die selbe Seite über die Hauptnavigation anklicke, öffnet sich die "Content-Navigtaion". Warum ist das so? (Es geht nur um die Vorschau in der Inhalteverwaltung)
Das Problem liegt vielleicht am Parameter "root", das Skript schafft es nicht "schnell" genug diesen zu verarbeiten und weiß dann nicht in welche Referenzen es anzeigen soll.... (Wobei das bei der Hauptnavigation zu funktionieren scheint.) Wie kann ich den Wert für "root" schon vorher auslesen und abspeichern?
Das Skript für die "Content-Navigation" sieht so aus:
<CMS_FUNCTION name="Navigation" resultname="pt_content_navi_preview">
<CMS_PARAM name="expansionVisibility" value="standard"/>
<CMS_PARAM name="wholePathSelected" value="1"/>
<CMS_VALUE_PARAM name="root" value='"pagefolder:"+#global.language.abbreviation.toLowerCase()'/>
<CMS_ARRAY_PARAM name="beginHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[$CMS_IF(#nav.hasSubFolders())$<li $CMS_IF(#nav.selected)$class="open"$CMS_END_IF$>$CMS_END_IF$]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="innerBeginHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[<ul>]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="unselectedHTML">
...fast gleich wie selected...
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="selectedHTML">
<CMS_ARRAY_ELEMENT index="1..2"><![CDATA[$CMS_IF(!#nav.hasSubFolders())$<li class="active">$CMS_END_IF$<a href="$CMS_REF(#nav.ref)$">$CMS_VALUE(#nav.label.convert2())$</a>$CMS_IF(!#nav.hasSubFolders())$</li>$CMS_END_IF$]]> </CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="innerEndHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[</ul >]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
<CMS_ARRAY_PARAM name="endHTML">
<CMS_ARRAY_ELEMENT index="1"><![CDATA[$CMS_IF(#nav.hasSubFolders())$</li>$CMS_END_IF$]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
</CMS_FUNCTION>
Es würde mich sehr freuen ein Feedback zu erhalten. (Auch wenn wahrscheinlich die Gedanken bei den Meisten nicht mehr beim Arbeiten sind :-)
Gruß
Charlotte König
Tags: navigationsskript, pagefolder_ermitteln, root
-
Author: hoebbel - 12/23/2011 9:04
Hallo Frau König,
das Problem hier ist wahrscheinlich, dass bei der Vorschau aus der Inhalte-Verwaltung immer die Navigation so angezeigt wird, wie Sie für die erste gefundene Seitenreferenz zu der aktuellen Seite gültig wäre.
Aufgrund Ihrer Beschreibung tippe ich darauf, dass die Seite mehrfach in der Struktur-Verwaltung referenziert wird und die für die Vorschau verwendete Seitenreferenz sich außerhalb der angezeigten Navigation befindet.
Sie können dies einfach testen, indem Sie mal eine Vorschau in der Sprache DE aus der Struktur ausführen und dabei eine Seitenreferenz nehmen, die sich außerhalb des Teilbaums in der Struktur befindet, der für die deutsche Sprache benutzt wird. Das Verhalten müsste dann identisch mit der Vorschau aus der Inhalte-Verwaltung sein.
Wenn das so ist, wird es schwierig mit einer Lösung des Problems. Zwar lassen Sie die korrekte Navigation aufgrund sprachabhängiger Variablen darstellen [unterschiedlicher Wert für den root Knoten der Navigation], aber die Navigation ist wohl eine Standardnavigation, deren Inhalt somit davon abhängt, wo der aktuelle Knoten sich gerade befindet.
Lösung wäre es somit, nicht nur den Startpunkt der Navigation sprachabhängig zu definieren, sondern zusätzlich auch noch den aktuell ausgewählten Knoten der Navigation "vorzugeben".
Das klingt nicht uninteressant, also habe ich es mal ausprobiert. Folgendermaßen können Sie Struktur-Variablen auslesen, die in der ersten Ebene definiert wurden - und zwar für alle Seitenreferenzen, die es zu der aktuellen Seite in der Inhalte-Verwaltung gibt. Sie müssen nun nur noch die korrekte Variable prüfen (im Beispiel wird die Variable "Sprachwert" ausgelesen und dann den korrekten Wert als selectedNode übergeben.)
WICHTIG: Die entsprechenden Variablen müssen auf den Ordner gepflegt werden, die für die einzelnen Sprachteilbäume angelegt wurden. Das Beispiel geht davon aus, dass sich diese Ordner direkt unter der Struktur-Wurzel befinden.
$CMS_FOR(reference,#global.page.getIncomingReferences())$
$CMS_SET(pageref,reference.getReferencedElement())$
$CMS_SET(folder,pageref)$
$CMS_FOR(i,[1..pageref.depth-1])$
$CMS_SET(folder,folder.parent)$
$CMS_END_FOR$
$CMS_VALUE(folder.data.get("Sprachwert").editor.get(#global.language))$<br>
$CMS_END_FOR$
Viele Grüsse aus Dortmund,
Holger Höbbel
0
Please sign in to leave a comment.
Comments
1 comment