jues
I'm new here

for-Schleife über CONTENTAREALIST und der Zuhgriff auf einzelne elemente

Jump to solution

Hallo Community,

in dem Glauben dass ich in einer for-Schleife über CONTENTAREALIST einzelne Elemente von Objekten ausgeben kann erstellte ich eine Absatzvorlage die mir den esten Objekt gesondert darstellt. Nun stelle ich fest dass mein Objek (solange ich diesen in seiner eigener vortlage nicht ausgebe) leer bleibt. Das wirft die Frage auf: Ist es grundsätzlich möglich?

Genauer:

Ich möchte eine Bildgalerie erstellen für die im FE das erste Bild stellvertrettend angezeigt wird und auf die restlichen nur ein leres Link:

<div>

<a href="meinBild.jpg"><img src="meinBild_thumb.jpg"></a>

<a href="meinBild2.jpg"></a>

<a href="meinBild3.jpg"></a>

<a href="meinBild4.jpg"></a>

</div>

mit JavaScript wird daraus Slidershow.

dazu habe ich eine Absatzvorlage erstellt in der man ein Bild und Beschreibung einpflegen kann und diese in einer anderer Vorlage referenziert so wie in der for-Schleife mit passendem HTML umschlossen.

$CMS_SET(fr_heighslider)$

<div>

    $CMS_FOR(item,st_hightslidelist)$
        $CMS_IF(#for.index==0)$
            <div>
                < a href="$CMS_REF(item)$"><img src="$CMS_REF(item)$"></a>
             </div>
        $CMS_END_IF$

               < a href="$CMS_REF(item)$"></a>

        $CMS_END_FOR$
        </div>
$CMS_END_SET$

Wie kann ich nun einzeln auf den Pfad oder die Beschreibung der Grafik zugreifen?

PS: bin noch recht neu in FirstSpirit verzeiht mir wenn die Frage trivial ist.

0 Kudos
1 Solution

Accepted Solutions

Eine CONTENTAREALIST auszugeben geht ja normalerweise über ein einfaches $CMS_VALUE(st_hightslidelist)$. Zum Rendering wird dann das zugeordnete Template des jeweiligen inneren Absatzes angezogen. Wenn ich das richtig verstehe, ist das bei dir immer ein- und dasselbe.

In diesem inneren Template kannst du dann über #index überprüfen, um das wievielte Element der Liste es sich handelt.

Eigentlich doch ganz einfach, oder? Smiley Wink

Peter

View solution in original post

0 Kudos
7 Replies
ErnstLustig
I'm new here

Ich weiß nicht, ob ich dich richtig verstehe, aber ich versuch's mal.

Ich würde ausprobieren in deiner Absatzvorlage gewünschte Variablen (wie den Pfad) mit CMS_SET zu speichern und dann kannst du auf die einzelnen Variablen zugreifen.

Prinzipiell würde ich aber anders herangehen.

Du legst ein Absatztemplate "Bildergalerie" an und und nimmst eine LINKLIST. Ich glaube, das macht mehr Sinn.

Ich hoffe, du versteht mich.

0 Kudos

ich habe eher mit folgendem Konstrukt gerechnet:

Absatzvorlage "image"

HTML-Kanal:

$CMS_SET(set_img_ref)$$CMS_REF(st_image)$$CMS_END_SET$

$CMS_SET(set_img_longDesc)$$CMS_REF(st_longDesc)$$CMS_END_SET$

Absatzvorlage für die Galerie:

$CMS_FOR(item,st_hightslidelist)$
        $CMS_IF(#for.index==0)$
            <div>
                $CMS_VALUE(item.getValue(set_img_ref))$
                <div>
        $CMS_END_IF$

        $CMS_END_FOR$
        </div>

aber das geht so leider nicht :smileyplain:

in die Linkliste muss ich mich erst einarbeiten

0 Kudos
Zeidler
I'm new here

Hallo,

der Ansatz  der ursprünglichen Lösung war schon nicht schlecht. Jedoch werden die einzelnen Eingabekomponenten innerhalb der Absätze der ContentAreaList anders ausgelesen.

mit dem Folgenden Code sollte es funktionieren:

$CMS_SET(fr_heighslider)$

<div>

  $CMS_FOR(item,st_hightslidelist)$
    <a href="$CMS_REF(item.getData().get("st_longDesc"))$">$CMS_IF(#for.index==0)$<img  src="$CMS_REF(item.getData().get("st_image"))$">$CMS_END_IF$</a>
  $CMS_END_FOR$
</div>
$CMS_END_SET$

witt
I'm new here

Hallo Herr Salesski,

gibt es einen projektspezifischen Grund die Iteration in einer FOR-Schleife in der äußeren Absatzvorlage durchzuführen? Wenn sie nämlich die HTML-Erzeugung in der inneren Absatzvorlage belassen, können sie mit dem Systemobjekt #index ihr gewünschte Ergebnis erzielen. Ihr Code würde dann ungefähr so aussehen:

$CMS_IF(!#index.isNull && #index == 0)$
     <a href="$CMS_REF(item)$"><img  src="$CMS_REF(item)$"></a>
$CMS_END_IF$

     <a  href="$CMS_REF(item)$"></a>

$CMS_END_FOR$

Alternativ, wenn es ihrem Fall hauptsächlich um die Pflege von Medien-Galerien geht, würde ich vorschlagen sich einmal das Kapitel Medien-Galerien in der Online-Dokumentation anzuschauen. Wir haben seit der Version V4.1 entsprechende Erweiterungen an dem Eingabeelement CMS_INPUT_CONTENTLIST durchgeführt, so dass eine einfache Pflege von Medien-Galerien möglich wird. Ein entsprechendes Beispiel ist auch im Mithras Demo-Projekt enthalten.

MfG,

Daniel Witt

0 Kudos

Danke für die Lösung!

Ich hatte schon Angst ich müsste mir dafür wirklich ein BS-Skript schreiben. Jedoch frage ich mich noch immer warum das so unsauber gemacht werden muss. Wenn ich über VARIABLES angeblich Daten durchschleifen kann, warum lassen sie sich dann nicht einfach mit z.B. $CMS_VALUE(item.st_image)$ ausgeben?

0 Kudos

Eine CONTENTAREALIST auszugeben geht ja normalerweise über ein einfaches $CMS_VALUE(st_hightslidelist)$. Zum Rendering wird dann das zugeordnete Template des jeweiligen inneren Absatzes angezogen. Wenn ich das richtig verstehe, ist das bei dir immer ein- und dasselbe.

In diesem inneren Template kannst du dann über #index überprüfen, um das wievielte Element der Liste es sich handelt.

Eigentlich doch ganz einfach, oder? Smiley Wink

Peter
0 Kudos

Hallo Herr Witt,

ich wollte die Redundanz der Vorlagen  vermeiden und bezog mich in meiner Vorlage auf bereits vorhandene mit  eigener Ausgabe. So war es wichtig tatsächlich die Elemente eines  Objektes auszugeben.

Der Hinweis von Peter Zeidler brachte mich  bereits zu dem gewünschtem Ergebnis.

Zu Mediengalerie  finde ich die Lösung in der Onlinehilfe nicht besonderes elegant. So wie  ich es sehe gibt es keine Möglichkeit die Medien in Paketen zu  verwalten... aber das ist ein anderes Thema zu dem ich eine neue Frage  stellen möchte.

0 Kudos