Prinzessin
I'm new here

Zählen der Spaltenbreite in Absatztemplate für dynamischen Umbruch

Jump to solution

Hallo,

ich habe ein Seitentemplate, das 5 Spalten hat. Im Inhaltsbereich ist ein Absatztemplate erlaubt, welches eine Combo-Box enthält, in der die Breite (1, 2, 3, 4 oder 5 Spalten) gewählt werden kann.

Je nachdem wie viele Absätze mit entsprechender Spaltenanzahl erstellt wurden, möchte ich in der Absatzvorlage einen Zähler einbauen, damit nach 5 oder mehr Spalten ein Zeilenumbruch erfolgt.

Beispiel:

1. Absatztemplate: 3 Spalten

2. Absatztemplate: 1 Spalte

3. Absatztemplate: 1 Spalte

=> 3 + 1 + 1 = 5 Spalten (maximale Breite erreicht --> Zeilenumbruch)

Mein GUI-Element sieht so aus:

<CMS_INPUT_COMBOBOX name="st_columns" allowEmpty="no" convertEntities="none" hFill="no" noBreak="no" useLanguages="no">

    <ENTRIES>

      <ENTRY value="1">

        <LANGINFOS>

          <LANGINFO lang="*" label="one" description="1 column"/>

        </LANGINFOS>

      </ENTRY>

      <ENTRY value="2">

        <LANGINFOS>

          <LANGINFO lang="*" label="two" description="2 columns"/>

        </LANGINFOS>

      </ENTRY>

      <ENTRY value="3">

        <LANGINFOS>

          <LANGINFO lang="*" label="three" description="3 columns"/>

        </LANGINFOS>

      </ENTRY>

      <ENTRY value="4">

        <LANGINFOS>

          <LANGINFO lang="*" label="four" description="4 columns"/>

        </LANGINFOS>

      </ENTRY>

      <ENTRY value="5">

        <LANGINFOS>

          <LANGINFO lang="*" label="five" description="5 columns"/>

        </LANGINFOS>

      </ENTRY>

    </ENTRIES>

    <LANGINFOS>

      <LANGINFO lang="*" label="Column width of teaser" description="Please choose."/>

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

und meine Abfrage im Template ist momentan so:

$CMS_IF(counter.isEmpty())$

    $CMS_SET(counter, st_columns)$

$CMS_ELSE$

    $CMS_SET(counter, counter + st_columns.toString().toNumber())$

   

     => hier wollte ich mit der Überprüfung der addierten Spalten fortfahren

$CMS_END_IF$

Leider wird mir der counter immer wieder neu gesetzt und ich kann damit so nicht rechnen. Ich habe auch schon versucht den Counter direkt m Seitentemplate zu setzen ($CMS_SET(counter,1)$) aber das klappt leider auch nicht.

1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Frau Neubauer,

den Counter direkt im Seitentemplate zu setzen, ist schon mal eine gute Idee.

Wenn ich es richtig verstehe, dann scheitert es bei Ihnen daran, dass Sie den Counter nicht hochzählen können. Ursache dafür ist, dass Variablen immer nur in Ihrem Generierungskontext gültig ist. Eine auf der Seite definierte Variable ist also für die Seite und alle darin befindlichen Absätze gültig, eine auf einem Absatz definierte/modifizierte Variable nur für den aktuellen Absatz.

Wenn Sie also eine Variable auf der Seite definieren ($CMS_SET(counter,1)$), hat diese Variable bei der Initialisierung jedes Absatzes der Seite den Wert 1. Auch wenn Sie den Wert innerhalb einer Absatz erhöhen, hat die Variable auf dem nächsten Absatz wieder den Wert 1.

Lösung: Sie müssen also innerhalb eines Absatzes den Wert der Variable auf der Seite entsprechend erhöhen. Das können Sie tun, indem Sie den variablenwert direkt in den Generierungskontext der Seite schreiben:

$CMS_SET(#global.context("PAGE")["counter"], counter + st_columns.toString().toNumber())$

Weitere Informationen zu den Kontexten finden Sie hier:

http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/variablen/kontexte_2/kontexte.html

User: FIRSTDoku

Pass: FSdown_V2

Viele Grüsse aus Dortmund,

  Holger Höbbel

View solution in original post

0 Kudos
3 Replies
tklein
I'm new here

Hallo,

der Idee ist richtig, allerdings müssen die Variablem im richtigen Context manipuliert werden. Denn die Änderung im Absatz ist wie richtig bemerkt nur in dem Absatz gültig. Der Context der Seite ist aber für alle darin ausgegebene Absätze gültig.

Im Seitentemplate $CMS_SET(set_pt_counter,0)$

In den Absätzen dann per CMS_RENDER ein Script aufrufen und den Wert von st_columns übergeben.

In dem Script die Variable hochsetzen und die Überprüpfung machen und ggf. per Result den Umbruch zurück geben. Das Hochsetzen der Variable im PageContext geht so:

context.getGenerationContext().getContext("PAGE").setVariableValue("set_pt_counter", set_pt_counter + yourColumnVar);

Über $CMS_VALUE(#global.dumpcontext("TRENNZEICHEN"))$ kann man sich übrigens auch die Contextinformationen ausgeben lassen und sieht so wo welche variable definiert ist.

0 Kudos
hoebbel
Crownpeak employee

Hallo Frau Neubauer,

den Counter direkt im Seitentemplate zu setzen, ist schon mal eine gute Idee.

Wenn ich es richtig verstehe, dann scheitert es bei Ihnen daran, dass Sie den Counter nicht hochzählen können. Ursache dafür ist, dass Variablen immer nur in Ihrem Generierungskontext gültig ist. Eine auf der Seite definierte Variable ist also für die Seite und alle darin befindlichen Absätze gültig, eine auf einem Absatz definierte/modifizierte Variable nur für den aktuellen Absatz.

Wenn Sie also eine Variable auf der Seite definieren ($CMS_SET(counter,1)$), hat diese Variable bei der Initialisierung jedes Absatzes der Seite den Wert 1. Auch wenn Sie den Wert innerhalb einer Absatz erhöhen, hat die Variable auf dem nächsten Absatz wieder den Wert 1.

Lösung: Sie müssen also innerhalb eines Absatzes den Wert der Variable auf der Seite entsprechend erhöhen. Das können Sie tun, indem Sie den variablenwert direkt in den Generierungskontext der Seite schreiben:

$CMS_SET(#global.context("PAGE")["counter"], counter + st_columns.toString().toNumber())$

Weitere Informationen zu den Kontexten finden Sie hier:

http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/variablen/kontexte_2/kontexte.html

User: FIRSTDoku

Pass: FSdown_V2

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Hallo vielen Dank für die schnellen Antworten, ich habe mich für die zweite Variante entschieden, da ich hier nicht extra ein Script zum Rendern erstellen musste. Hat super geklappt, danke 🙂

0 Kudos