Search the FirstSpirit Knowledge Base
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.
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?
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.
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
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$
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
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?
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?
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.