ACordes
I'm new here

Absatzvorlage Index des aktuellen Elementes

Hallo,

wahrscheinlich ist das eine ziemlich blöde Frage, aber auch nach längerem Suchen in der Hilfe und im Forum war ich leider nicht erfolgreich.

Ich habe eine Seitenvorlage mit drei Inhaltsbereichen, denen jeweils eine Absatzvorlage zur Verfügung steht. Die Ausgabe funktioniert soweit, allerdings muss ich je nach Index des Elementes (also x Absatz-Inhalte hinzugefügt und davon die jeweilige Position im "Baum") andere CSS-Klassen vergeben (first, center, last,...).

In der hilfe konnte ich dafür hilfreiche Systemobjekte nur für for-Schleifen etc. finden.

Kurz gefragt: Wie bekomme ich den Index meines Absatz-Inhaltes heraus?

Vielen Dank!

3 Replies
hoebbel
Crownpeak employee

Hallo,

kurz geantwortet:

Es gibt zwei Möglichkeiten. Entweder prüft man im Absatzkontext, ob es sich um den ersten/letzten Absatz handelt, also etwas in der Art von

$CMS_IF(#global.page.body("body").children.first.id == #global.section.id)$

oder man iteriert mittels CMS_FOR über die Absätze und benutzt die entsprechenden Funktionalitäten im #for Objekt:

$CMS_FOR(section,#global.page.body("<Bodyname>").children)$

$CMS_IF(#for.isFirst)$$CMS_SET(firstSection,true)$$CMS_ELSE$$CMS_SET(firstSection,false)$$CMS_END_IF$

$CMS_IF(#for.isLast)$$CMS_SET(lastSection,true)$$CMS_ELSE$$CMS_SET(lastSection,false)$$CMS_END_IF$

$CMS_VALUE(section)$

$CMS_END_FOR$

[in der Section dann die beiden Variablen firstSecion / lastSection prüfen]

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Gibt es auch eine Möglichkeit die ID des letzten Absatzes zu ermitteln?

Ich habe das versucht, aber es klappt nicht:

$CMS_IF(#global.page.body("content_left").children.last.id == #global.section.id)$

0 Kudos

Hallo Frau Neubauer,

Ihr Ansatz würde wahrscheinlich funktionieren, wenn .children eine Liste zurückgeben würde, was es aber [glücklicherweise] nicht tut. Das .first ist soweit ich weiß eine convenience Methode. Warum es kein entsprechendes .last gibt, versucheich zu ergründen...

Man könnte, um ihr Problem zu lösen, entweder den Holzhammer benutzen und einmal über alle Kinder iterieren, um vom letzten Kind die ID zu holen, oder man wählt den etwas eleganteren Weg, indem man prüft, ob die Position des Absatzes die letzte in dem aktuellen Absatzbereich ist.

Die folgende Lösung geht von dem aktuellen Absatz aus und benötigt deshalb den Namen des Absatzbereichs nicht, kann also völlig generisch verwendet werden Smiley Happy

$CMS_IF(#global.section.parent.getChildCount()-1 == #global.section.parent.getChildIndex(#global.section))$

Ich bin der LETZTE Absatz

$CMS_END_IF$

Kurzerklärungen:

#global.section.parent --> Absatzbereich, in dem sich der aktuelle Absatz befindet

Der ChildIndex beginnt mit 0, der ChildCount mit 1, deshalb muss der ChildCount für den vergleich um 1 verringert werden.

Viele Grüsse aus Dortmund,

  Holger Höbbel