- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Template lokale Funktion mittels Header-Tag <CMS_VALUE>?
Hallo allerseits,
seit langem wรผnsche ich mir bereits die Mรถglichkeit innerhalb eines Templates (z.B. Seitenvorlage) lokale Funktionen deklarieren zu kรถnnen, anstatt auf Render-Templates oder -Scripte zurรผckgreifen zu mรผssen.
Vor Kurzem habe ich entdeckt, dass man dafรผr eventuell das Header-Tag <CMS_VALUE> verwenden (missbrauchen?) kann, denn die ATTR-Tags kรถnnen nicht nur wie in den Doku Beispielen statische Inhalte enthalten, sondern auch Template-Code, der zudem erst bei der Ausgabe mit $CMS_VALUE()$ ausgefรผhrt zu werden scheint.
Folgender Template-Code
<CMS_HEADER>
<CMS_VALUE name="pt_vr_test">
<LANG id="*">
<ATTR name="self">
<![CDATA[$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SWITCH(myVar)$
default
$CMS_CASE("foo")$
bar
$CMS_END_SWITCH$
$CMS_END_TRIM$]]>
</ATTR>
<ATTR name="replace">
<![CDATA[$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_VALUE(myVar.replace("bar", "foo"))$
$CMS_END_TRIM$]]>
</ATTR>
<ATTR name="recursive">
<![CDATA[$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SET(myVar, myVar.replace("bar", "foo"))$
$CMS_VALUE(pt_vr_test)$
$CMS_END_TRIM$]]>
</ATTR>
</LANG>
</CMS_VALUE>
</CMS_HEADER>$CMS_TRIM(level:3)$
<!--
$CMS_SET(myVar, "foo")$
A1:$CMS_VALUE(pt_vr_test)$
A2:$CMS_VALUE(pt_vr_test.replace)$
A3:$CMS_VALUE(pt_vr_test.recursive)$
$CMS_SET(myVar, "bar")$
B1:$CMS_VALUE(pt_vr_test)$
B2:$CMS_VALUE(pt_vr_test.replace)$
B3:$CMS_VALUE(pt_vr_test.recursive)$
-->
$CMS_END_TRIM$
rendert folgende Ausgabe
<!--
A1:foo:bar
A2:foo:foo
A3:foo:foo:bar
B1:bar:default
B2:bar:foo
B3:bar:foo:bar
-->
<CMS_VALUE> funktioniert auch so:
<CMS_VALUE name="pt_vr_test">
<ATTR name="self">$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SWITCH(myVar)$
default
$CMS_CASE("foo")$
bar
$CMS_END_SWITCH$
$CMS_END_TRIM$</ATTR>
<ATTR name="replace">$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_VALUE(myVar.replace("bar", "foo"))$
$CMS_END_TRIM$</ATTR>
<ATTR name="recursive">$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SET(myVar, myVar.replace("bar", "foo"))$
$CMS_VALUE(pt_vr_test)$
$CMS_END_TRIM$</ATTR>
</CMS_VALUE>
Wie man sieht kann man damit ziemlich hรคssliche Sachen machen - trotzdem finde ich es Interessant.
Die Dokumentation zu <CMS_VALUE> ist relativ knapp. Hat jemand zufรคllig bereits Erfahrungen damit gemacht?
Beste Grรผรe
Robin
- Labels:
-
Developers
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Robin,
eine Art lokale Funktion oder eher eine Art lokales Rendertemplate kannst Du mit dem einparametrigen $CMS_SET definieren.
Siehe hierzu auch diesen Beitrag.
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Robin,
das kannst du auch einfach รผber ein CMS_SET Block-Statement lรถsen.
Statt dem ATTR wรผrde ich dann einfach 3 verschiedene CMS_SET Blรถcke machen, oder eine zuvor gesetzt Variable abfragen.
$CM_SET(test)$
$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SWITCH(myVar)$
default
$CMS_CASE("foo")$
bar
$CMS_END_SWITCH$
$CMS_END_TRIM$
$CMS_END_SET$
$CM_SET(replace)$
$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_VALUE(myVar.replace("bar", "foo"))$
$CMS_END_TRIM$
$CMS_END_SET$
$CMS_SET(recursive)$
$CMS_TRIM(level:3, char:"")$
$CMS_VALUE(myVar)$:
$CMS_SET(myVar, myVar.replace("bar", "foo"))$
$CMS_VALUE(pt_vr_test)$
$CMS_END_TRIM$
$CMS_END_SET$
$CMS_TRIM(level:3)$
<!--
$CMS_SET(myVar, "foo")$
A1:$CMS_VALUE(test)$
A2:$CMS_VALUE(replace)$
A3:$CMS_VALUE(recursive)$
$CMS_SET(myVar, "bar")$
B1:$CMS_VALUE(test)$
B2:$CMS_VALUE(replace)$
B3:$CMS_VALUE(recursive)$
-->
$CMS_END_TRIM$
Ansonsten spricht aber nichts gegen deine Variante. Die Funktion wird nur seit FS 4 immer weniger genutzt und ich merke immer wieder, dass viele Entwickler, die noch nciht so lange FirstSpirit nutzen viele der Header-Funktionen nicht kennen.
Gruร
Felix
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Felix,
wieder was gelernt, besten Dank. Mir war nicht bewusst, dass das bei $CMS_SET()$ funktioniert - habe ich aber auch nie ausprobiert.
Ich habe gedacht, dass die Verarbeitung linear erfolgt, d.h. mit $CMS_VALUE()$ nur noch das Ergebnis ausgegeben wird. Macht aber Sinn die Sachen erst dann zu berechnen, wenn sie auch tatsรคchlich benรถtigt werden.
<CMS_VALUE> ist in der Doku ja auch gut versteckt, aber manchmal ist es eben praktisch bestimmte Aktionen an eine exponierte Stelle auszulagern.
Viele Grรผรe
Robin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Robin,
eine Art lokale Funktion oder eher eine Art lokales Rendertemplate kannst Du mit dem einparametrigen $CMS_SET definieren.
Siehe hierzu auch diesen Beitrag.
Viele Grรผรe
Michael
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Michael,
den Beitrag hatte ich gelesen, aber erst jetzt verstanden.
Sowas habe ich gesucht. Danke!
Viele Grรผรe
Robin

