Charlotte_Koeni
I'm new here

Navigation: Parameter "subtree"

Hallo zusammen,

ich würde gerne mittels eines Navigationsskripts alle Seitenreferenzen eines Teilbaums auslesen. Es ist so, dass wir direkt unter Root mehrere Ordner haben die jeweils eine komplett eigene Struktur abbilden (ein Ordner steht für ein Land). Es geht mir tatsächlich um die einzelnen Seiten und nicht um die eigentlichen Menüpunkte (die die Ordner darstellen), das heißt wenn in einem Ordner mehrere Seiten liegen, möchte ich ALLE Seiten auslesen.

Wichtig ist, dass ich wirklich nur die Seiten inerhalb dieses Startordners bekomme und nicht vermischt mit Seiten aus dem anderen Teilbaum.

Ich denke dazu müsste man den Parameter expansionVisibility nutzen können mit dem Wert "subtree". Und ab hier komme ich nicht weiter... Wie nutzt man diesen Parameter bzw. wie würde dann das Navigationsskript aussehen?  Es gibt bestimmt jemanden, der damit schon gearbeitet hat, oder?

Ein Beispiel hierfür würde mir sehr weiterhelfen!

Ja, ich habe bereits in die Doku geschaut 🙂 Hier werden zwei Möglichkeiten aufgezeigt. Die zweite Möglichkeit habe ich ausprobiert. Aber sobald ich den Parameter "subtree" setze, bekomme ich keine Ausgabe mehr. Auch die Erste funktioniert nicht so ganz bei mir...  Über ein kleines funktionierendes Beispiel würde ich mich sehr freuen!

Gruß

Charlotte König

0 Kudos
13 Replies
hoebbel
Crownpeak employee

Hallo Frau König,

Sie wollen nur die Seiten (also nicht die Ordner) in einem bestimmten Teilbaum?

Dann gehen Sie einfach so vor:

- Auf dem Root jedes Teilbaums die Struktur-Variable "ss_rootFolder" definieren und als Wert dort

pagefolder:<Referenz-Name des Hauptordners des Teilbaums>

eintragen, also zum Beispiel

pagefolder:de

Irgendwo in dem Teilbaum dann eine Seite einbinden mit der folgenden Funktion:

<CMS_PARAM name="siteMap" value="1" />

<CMS_VALUE_PARAM name="root" value="rootFolder"/>

<CMS_ARRAY_PARAM name="pageRefRendering">

<CMS_ARRAY_ELEMENT index="0..6"><![CDATA[$CMS_VALUE(#nav.label)$<br>]]></CMS_ARRAY_ELEMENT>

</CMS_ARRAY_PARAM>

</CMS_FUNCTION>

Diese gibt [über 6 Ebenen] alle Seiten [NICHT Ordner] des entsprechenden Teilbaums aus. Wenn Sie zusätzlich die Ordner ausgeben wollen, dann müssen Sie noch entsprechende CMS_ARRAY_PARAMs für selectedHTML und unselectedHTML einfügen.

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

So ähnlich hatte ich das schon ausprobiert:

<CMS_FUNCTION name="Navigation" resultname="pt_metadaten">

   <CMS_PARAM name="expansionVisibility" value="all"/>

   <CMS_PARAM name="wholePathSelected" value="1"/>

   <CMS_PARAM name="siteMap" value="1" />

   <CMS_PARAM name="root" value="pagefolder:de" />

   

    <CMS_ARRAY_PARAM name="pageRefRendering">

         <CMS_ARRAY_ELEMENT index="0..3"><![CDATA[$CMS_VALUE("..Test: "+#nav.label+" - ")$]]>         

          </CMS_ARRAY_ELEMENT>

   </CMS_ARRAY_PARAM>

</CMS_FUNCTION>

Leider werden trotzdem einige Seitenreferenzen aus dem Teilbaum "en" raus geschrieben, also von dem Ordner der parallel zu dem Ordner "de" direkt unter Root angelegt ist.


Warum ist das so?

Bei ca. 45 Seiten werden zwei Seiten aus dem anderen Teilbaum ("en") generiert. Dafür werden die zwei Seiten die eigentlich an dieser Stelle wären nicht generiert. Die zwei "falschen" en-Seiten sind Kopien der  "richtigen" de-Seiten. Auch von den restlichen Seiten gibt es diese Kopien im anderen Strukturbaum, trotzdem werden die richtigen generiert. Es gibt eigentlich auch keine anderen Einstellungen, die bei diesen zwei Seiten vorgenommen worden sind..!??

gruß

charlotte könig

0 Kudos

Hallo Frau König,

handelt es sich hierbei um eine ältere FirstSpirit Version?

Bitte prüfen Sie, ob die ID des Ordners, in dem sich die fälschlich ausgegebenen Seiten befinden, der ID des Ordners entspricht, in dem sich die eigentlichen Seiten befinden.

Wenn ja, so ist das die Ursache des Problems. Die schnelle Lösung wäre dann, die beiden Ordner umzubenennen, freizugeben [damit die Referenznamen wieder benutzt werden können], mit den korrekten Referenznamen neu anzulegen, die Seitenreferenzen in die neuen Ordner zu verschieben und die Ordner mit den doppelten Ids zu löschen.

Hintergrund ist, dass es mehrere Fehler gab, mit denen doppelte IDs insbesondere in der Struktur-Verwaltung erzeugt werden konnten. All diese bekannten Fehler wurden in der aktuellen Version natürlich bereits beseitigt. [diese Fehler wurden spätestens mit dem ersten Release der Version 4.2R2 beseitigt]

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Das System hat fast die neuste Version: 4.2.432.43881

Nein. Die IDs und auch die Referenznamen der übergeordneten Ordner so wie die Seiten-IDs sind unterschiedlich.

0 Kudos

Hallo Frau König,

so ungerne ich das auch sage Smiley Wink

Ich fürchte, dass Sie hier ein helpdesk Ticket aufmachen müssen, damit dieses Problem eingehend analysiert werden kann.

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Mh. Ich befürchte auch... Ok. Das werde ich machen.

Aber vielleicht noch eine Frage:

Wir generieren mit der Navigationsfunkion auch eine "normale" Navigation, dabei wird nicht pageRefRendering genutzt - und das funktioniert eigentlich ganz gut. Kann ich vielleicht nur mit unselectedHTML und selectedHTML auf die Seiten zu greifen die nicht als Startseiten definiert sind?  Denn dann hätte ich nämlich  auch alle Seitenreferenzen.

Gruß

charlotte

0 Kudos

Hallo Charlotte,

zuerst der Hinweis, dass hier irgendetwas mächtig schief zu gehen scheint. Eine Untersuchung wäre sinnvoll!

In einer normalen Navigation müsste man so an die Seiten des aktuellen Ordners kommen, wenn ich mich nicht vertippt habe Smiley Wink

$CMS_FOR(navpages,#nav.ref.parent.getChildren(#nav.ref.class,false))$

$CMS_VALUE(navpages.getPageLangSpec(#global.language).getName())$

$CMS_END_FOR$

Das sollte eine Liste der Anzeigenamen ausgeben.

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Leider funktioniert das noch nicht so ganz.

Ich habe denCode kopiert, nur leider bekomme ich keine Ausgabe. Wenn ich mir in der For-Schleife nur "navpages" ausgebe, bekomme die richtige Ausgabe und das sagt mir, dass es theoretisch funktioniert. Nur mit .getName() geht es leider nicht. Könnten sie mir noch einen weiteren Vorschlag machen? Mit navpages.getPageLangSpec(#global.language) bekomme ich die Sprachen - das funktioniert also auch. Aber mit z.B.: .getData().get("pt_title").getEditor() geht auch nichts 😞

Gruß

Charlotte König

0 Kudos

Hallo Frau König,

was wollen Sie denn genau ausgeben?

[getName() hätte den Anzeigenamen in der aktuell generierten Sprache ausgeben sollen, sofern dieser gepflegt wurde]

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos