daniel_philippi
Occasional Collector

Seite in Navigation ausblenden, wenn nicht generiert

Jump to solution

Hallo zusammen.

Wie kann ich in einer Navigationsfunktion prüfen, ob eine Seite im Auftrag generiert wird oder nicht und dann einen Link schreiben oder eben nicht.

Hintergrund ist, dass ein Ordner mit zwei Unterordnern publiziert werden soll. Jedoch auf zwei getrennte Webspaces und in jeden Webspace nur einer der Unterordner. In der Navigation soll aber nur der Unterordner verlinkt sein, der auch publiziert wird. Der andere liefert ja einen 404 Fehler zurück.

Gruß,

Daniel

0 Kudos
1 Solution

Accepted Solutions

Hallo Daniel,

das Nutzen von Strukturvariablen ist hier schon der übliche Weg - zumindest wenn ich es richtig verstehe, dass ihr die entsprechende Variable nutzt um den Root-Knoten für die Navigation festzulegen:

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

Die Idee mit dem #nav.isGenerated mag auf den ersten Blick "einfach" erscheinen, hätte aber meiner Meinung nach einige Fallstricke und versteckte Komplexität. Zum einen bezieht sich die Navigation ja auf Menüebenen (=Ordner), generiert werden aber Seitenreferenzen. Außerdem werden Teilgenerierungen überwiegend eher zur Generierung von Teilen einer Website genutzt. Dann müsste theoretisch auch noch berücksichtigt werden, ob die Generierung einzelner Seiten per $CMS_SET(#global.stopGenerate, true)$ unterbunden wird. Gerade letzteres wäre gar nicht möglich, weil diese Information ja erst während der Generierung der jeweiligen Seite verfügbar ist - da wurden die anderen Seiten aber schon erzeugt...

Viele Grüße

Michael

View solution in original post

0 Kudos
6 Replies
mbergmann
Crownpeak employee

Hallo Daniel,

wie wird denn aktuell festgelegt bzw. gesteuert, welcher der jeweiligen Ordner generiert wird?

Viele Grüße

Michael

0 Kudos

Über zwei unterschiedliche Deploymentaufträge.

0 Kudos

Hallo Daniel,

wie wird das denn in diesen Aufträgen genau gesteuert? "Ganz klassisch" durch die Angabe der Startknoten oder habt ihr da ein "stopGenerate"-Konstrukt im Template, evtl. über Generierungsvariablen?

Geht es hier wirklich nur um zwei spezielle Ordner oder braucht ihr das an mehreren Stellen? Vielleicht wäre hier ein Screenshot aus der Strukturverwaltung hilfreich um das beurteilen zu können.

Eine Idee wäre z.B. vor der Generierung ein Skript laufen zu lassen was jeweils das "Im Navigationsmenü anzeigen" passend umschaltet. Man kann natürlich auch eine (wohl nicht ganz triviale) Abfrage in der Nav-Funktion selbst machen - müsste dabei aber wohl einiges berücksichtigen.

Viele Grüße

Michael

0 Kudos

Beispiel:

In der Struktur sind 2 Ordner auf oberster Ebene. Darin enthalten sind weitere Ordner und Seiten, quasi 2 Teilbäume.

Diese sollen nun unabhängig voneinander auf zwei verschiedene Webspace deployed werden. Dabei soll aber die Navigation des Einen nicht in der Navigation des Anderen auftauchen.

Für das Deployment gibt es dann zwei separate Aufräge, die als Startknoten den jeweilgen Ordner nutzen.

Was wir nun gemacht haben ist, dass wir den Startordner zusätzlich in einer Strukturvariablen speichern und in der Navigationsfunktion abfragen. Hier wäre es aber einfacher gewesen, nur die Seiten in der Navigation anzuzeigen, die auch generiert werden, alle anderen nicht. So etwas wie #nav.isGenerated.

Gruß,

Daniel

0 Kudos

Hallo Daniel,

das Nutzen von Strukturvariablen ist hier schon der übliche Weg - zumindest wenn ich es richtig verstehe, dass ihr die entsprechende Variable nutzt um den Root-Knoten für die Navigation festzulegen:

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

Die Idee mit dem #nav.isGenerated mag auf den ersten Blick "einfach" erscheinen, hätte aber meiner Meinung nach einige Fallstricke und versteckte Komplexität. Zum einen bezieht sich die Navigation ja auf Menüebenen (=Ordner), generiert werden aber Seitenreferenzen. Außerdem werden Teilgenerierungen überwiegend eher zur Generierung von Teilen einer Website genutzt. Dann müsste theoretisch auch noch berücksichtigt werden, ob die Generierung einzelner Seiten per $CMS_SET(#global.stopGenerate, true)$ unterbunden wird. Gerade letzteres wäre gar nicht möglich, weil diese Information ja erst während der Generierung der jeweiligen Seite verfügbar ist - da wurden die anderen Seiten aber schon erzeugt...

Viele Grüße

Michael

0 Kudos
NMc
Crownpeak employee
Crownpeak employee

Hallo Daniel,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Michael bereits geholfen?

In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere

Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Nico

0 Kudos