Search the FirstSpirit Knowledge Base
Hallo zusammen,
ist es möglich, in Seitetemplates Fragment zu definieren, die in Absatztemplates übergeschrieben werden können? (etwa wie Facelets Templates -
http://www.jsfcentral.com/articles/facelets_3.html)
Die Idee ist Elemente wie Title, Meta-Description standard in Seitentemplates zu definieren.
Einige Absatztemplates können aber diese Felde überschreiben, und einen anderen Wert für Title z.B. setzen.
Die andere Anforderung wäre, dass Absatztemplates auch neuen CSS hinzufügen könnten. Wir würden also vermeiden, standard alle möglichen CSS zu verlinken.
Viele Grüße,
Yann Simon
Hallo,
du kannst aus einer Absatzvorlage in den Seitencontext schreiben, nur musst du aber den Absatz bzw den Absatzbereich zuvor in einer Variable speichern, damit du innerhalb der Seitenvorlage darauf zugreifen kannst.
Absatzvorlage:
$CMS_VALUE(#global.pageContext.setVariableValue("sectionVar", "Test"))$
Section template content
Seitenvorlage:
$CMS_SET(bodyContent)$$CMS_VALUE(#global.page.body("content"))$$CMS_END_SET$
$CMS_SET(bodyContent,bodyContent.toString())$
sectionVar: $CMS_VALUE(sectionVar)$
$CMS_VALUE(bodyContent)$
Hallo,
ich habe eine ähnliche Anforderung:
Ich habe einen Bereich in der Seitenvorlage, der mit inhalt aus der Absatzvorlage gefüllt wird.
Beispiel:
Ein Teil der Seitennavigation wird in der Seitenvorlage definiert, ein weiterer Teil wird in der Absatzvorlage definiert, jedoch nicht an der Stelle zur Anzeige gebracht, wo der Inhalt ausgegeben wird, sondern vorher, wo die Navigation aufgebaut wird.
Leider brachte die o.g. Lösung keinen Erfolg. Gibt es eine andere Möglichkeit?
Danke und Gruß,
Fernando Morales
Wahrscheinlich ein Reihenfolgeproblem? Der Absatz kommt im Quelltext nach der Stelle, wo die Navigation inkludiert wird? Wenn man das nicht ändern kann (über die Benutzung von div-Layern o.ä.) bleibt dann nur ein Java-Script-Hack...
Hallo Herr Morales,
mir fallen diesbezüglich zwei Ansatzpunkte ein.
Entweder schreibt man den gesamten Bodybereich ausgewertet in einer Variable, wodurch die obige Lösung aktiv würde [rate ich aber von ab, da dies im Zweifelsfall sehr teuer ist] oder man holt sich aus dem entsprechenden Absatz den Inhalt der entsprechenden Eingabekomponente.
Nehmen wir einmal an, Sie möchten den Inhalt aller Eingabekomponenten mit dem Namen "headline" des Absatzbereichs "content" ausgeben, dann könnten Sie dies so machen:
$CMS_FOR(mySection, #global.page.body("content").getChildren())$
$CMS_IF(!section.formData.get(#global.language,"headline").isEmpty)$$CMS_VALUE(section.formData.get(#global.language,"headline").get())$<br>
$CMS_END_IF$
$CMS_END_FOR$
Erklärung:
- das $CMS_FOR(...)$ iteriert über alle Kinder des Absatzbereichs mit dem Namen content
- das CMS_IF prüft, ob es in dem entsprechenden Objekt eine Eingabekomponente mit dem Namen headline gibt und wenn ja, wird diese ausgegeben.
Viele Grüsse aus Dortmund,
Holger Höbbel
Hallo,
danke für die Antwort. Das hatte ich auch erst befürchtet und habe beide Reihenfolgen ausprobiert. Leider auch ohne Erfolg.
Gruß,
Fernando
Hallo Herr Höbbel,
das Auslesen von Werten aus Eingabekomponenten funktioniert bei uns bereits ohne Probleme und wird von uns wie von Ihnen beschrieben auch schon eingesetzt.
Was wir jedoch benötigen ist die Übergabe von Inhalten aus dem Ausgabekanal der Absatzvorlage in die Seitenvorlage über eine Variable zum Beispiel. Bei uns werden in der Absatzvorlage anhand des darzustellenden Inhaltes automatisiert Navigationselemente erzeugt (HTML-liste mir Links als Listenelemente) die Über die Standardnavigation der Seite angesiedelt werden soll.
In etwa so:
AbsatzTemplate
$CMS_SET(variablenName)$
<li>LINK1</li>
<li>LINK2</li>
<li>LINK3</li>
$CMS_END_SET$
SeitenTemplate
$CMS_FOR(section,#global.page.body("content").children)$
$CMS_IF(!section.getData().get("variablenName").isEmpty)$
$CMS_VALUE(section.getData().get("variablenName"))$
$CMS_END_IF$
$CMS_END_FOR$
Danke und Gruß,
Fernando Morales