- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
CSS-Datei je Section template
Hallo liebe FS-Gemeinde,
ich entwickle gerade ein section template fรผr unseren Kunden. Fรผr die HTML/JSP-Ausgabe benรถtige ich jedoch zusรคtzliches CSS. Mein Wunsch wรคre jetzt eine extra CSS-Datei anzulegen und diese dann in dem section template zu referenzieren sodass die CSS-Datei nur dann mit geladen wird wenn auch das section template geladen wird. Ich hatte gehofft man gibt die zusรคtzliche CSS-Datei einfach in der CMS_HEADER-Sektion mit an, nur leider habe ich dazu bisher leider keinerlei Infos gefunden weder hier in der Community noch in der Doku. Wir Entwickler hatten bisher noch keine FS-Entwickler-Schulung, soll aber bald kommen, daher mag die Frage mรถglicherweise einfach zu beantworten sein. Aktuell fรคllt mir nur eine Version ein wo ich dem page template ein "if" einbaue und abfrage ob das section template geladen wird und binde dann die extra CSS-Datei ein, aber das kommt mir momentan nicht so schรถn vor.
Hoffe es gibt dafรผr eine einfache Lรถsung, vllt auch auf einen vรถllig anderen, mir noch unbekannten, Weg.
Viele Grรผรe
Christian
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Christian,
in vielen Projekten wird es folgendermaรen umgesetzt:
- Man schreibt aus der Absatzvorlage heraus eine Variable in den Seitenkontext
- In der Seitenvorlage muss man dafรผr sorgen, dass der Body, in dem sich die Absรคtze befinden), ganz am Anfang der Seite ausgwertet wird. Dann kann man im HTML-Head die Variable ausgeben
https://community.e-spirit.com/message/8178#8178 sollte dich auf den richtigen Weg bringen.
Grรผรe
Christoph
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Christoph,
ich habe versucht deinen Ansatz umzusetzen. Was meinst du konkret mit "[...]ganz am Anfang der Seite ausgwertet wird."?
Mein Seitenvorlage:
$CMS_SET(css_special, "0")$
$CMS_SET(ca_content)$
$CMS_VALUE(#global.page.body("content"))$
*
$CMS_END_SET$
<html>
<head>
$CMS_IF(!css_special.equals("0"))$
<HIER soll was passieren, wenn css_special nicht 0 ist>
$CMS_END_IF$
</head>
<body>
$CMS_VALUE(ca_content)$
**
<body>
</html>
Absatzvorlage, was in "content" verwendet wird:
$CMS_SET(#global.context("PAGE")["css_special"], "1")$
Bei mir bekomme ich bei css_special eine 1 nur, wenn ich es in den Body packe (**) oder in den SET-Block nach CMS_VALUE (*). Ich dachte bei diesem Konstrukt macht er eine Variable im Seitenkonzept mit dem Wert 0, wertet den Bereich "content" aus und setzt das Ergebnis in "ca_content". Bei der Auswertung wird die Variable im Seitenkontext รผberschrieben mit 1 und ist danach auf der Seite auch 1. Anscheinend passiert das Auswerten&Setzen der Variable beim CMS_VALUE im <body>.
Gruร,
Sergej
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Wenn ich das richtig verstehe, hast du das Problem, dass ein CMS_SET erst ausgewertet wird, wenn es ausgegeben wird. Und da in dem CMS_SET die Ausgabe des Bodys ist, wird der Body auch erst ausgewertet, wenn du ca_content ausgibt.
Versuch doch bitte mal
$CMS_SET(ca_content)$
$CMS_VALUE(#global.page.body("content").toString())$
*
$CMS_END_SET$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Danke. Hatte ich auch schon probiert, leider ohne Erfolg.
.toString() liefert mir nichts beim Body-Element #global.page.body("content")
Aber das Problem hast du richtig erkannt. Die Werte setzt er alle richtig, es geht mir nur um den Zeitpunkt der Auswertung, die nicht passt.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
toString ist schon der richtige Ansatz, allerdings auf dem CMS_SET ausfรผhren:
$CMS_SET(ca_content)$
$CMS_VALUE(#global.page.body("content"))$
*
$CMS_END_SET$
$CMS_SET(ca_content, ca_content.toString())$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Perfekt, so klappt es!
Vielen Dank.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aktuell fรคllt mir nur eine Version ein wo ich dem page template ein "if" einbaue und abfrage ob das section template geladen wird und binde dann die extra CSS-Datei ein, aber das kommt mir momentan nicht so schรถn vor.
Diesen Ansatz finde ich besser als den aktuell umgesetzten (#global.page.body("content").toString()).
Durch das "toString" wird der gesamte Body-Bereich "in memory" gerendert, was den Nachteil hat, das temporรคr groรe zusammenhรคngende Speicherbereiche benรถtigt werden, was zu einer schlechten Serverperformance fรผhren kann (nicht nur in der Generierung bzw. Vorschau).
Dein initialer Lรถsungsansatz kรถnnte z.B. so umgesetzt werden (Achtung, ungetesteter Pseude-Code):
$CMS_SET(need_additional_css, false)$
$CMS_FOR(child, #global.page.body("content").children(class("de.espirit.firstspirit.access.store.pagestore.Section"))$
$CMS_IF(child.template.uid == "xxx")$$CMS_SET(need_additional_css, true)$$CMS_END_SET$
$CMS_END_FOR$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Wenn man das ganze kompakter haben will, kann man auch die .filter-Funktion verwenden, um direkt abzufragen:
$CMS_IF(#global.page.body("content").getChildren(class("de.espirit.firstspirit.access.store.pagestore.Section").toList().filter(x->x.
template.uid == "xxx"
).size>0
)$
...Einbindung des CSS...
$CMS_END_IF$
Alternativ kรถnnte man auch mit .map() arbeiten:
$CMS_IF(#global.page.body("content").getChildren(class("de.espirit.firstspirit.access.store.pagestore.Section").toList().map(x->x.
template.uid).contains("xxx")
)$
...Einbindung des CSS...
$CMS_END_IF$
In beiden Fรคllen muss allerdings toList() verwendet werden. Bei potentiell wenigen Absรคtzen in einem Inhaltsbereich finde ich das persรถnlich aber eher unkritisch.
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo zusammen,
ich habe eine รคhnliches Problem nur mit einer tieferen Verschachtelung, d.h. die Sections beinhalten eine FS_LIST mit weiteren Absatzvorlagen und ich muss genau diese Absatzvorlagen "auswerten". Dies habe ich aktuell so gelรถst:
$CMS_SET(set_use_videoplayer, false)$
$CMS_FOR(child, #global.page.body("content").children(class("de.espirit.firstspirit.access.store.pagestore.Section")))$
$CMS_SET(set_referenced_element_uid_map, child.getReferences().map(x->x.getReferencedElement().uid))$
$CMS_SET(set_use_videoplayer, set_referenced_element_uid_map.contains("videoplayer"))$
$CMS_END_FOR$
Nun gibt es natรผrlich auch Content-Projektionen, die eine Videoeinbindung รผber die Datenquellen abbilden. Gibt es eine schรถne und saubere Mรถglichkeit eine Liste aller Template-UIDs einer Inhaltsseite zurรผckzugeben?
Danke und viele Grรผรe
Philipp

