sleistenschneid
I'm new here

Auslesen der Sitemap-Variable eines Datensatzes

Hallo Zusammen,

ich möchte bei Detailseiten aus Datenquellen im title-Tag der Seite den entsprechenden Wert des Datensatzes ausgeben, der im Daten-Reiter und als Sitemap-Variable definiert ist.

Ich mache dies wie folgt in der Seitenvorlage:

$CMS_IF(!#global.pageParams.data.isEmpty && #global.ref.class.toString.equals("de.espirit.firstspirit.generate.ContentProducerReference") && !#global.ref.target.getContent2Params.getSitemapVariableName.isEmpty)$           $CMS_SET(sitemapvar, #global.ref.target.getContent2Params.getSitemapVariableName)$                  <title>$CMS_VALUE(#global.pageParams.data.first.get(sitemapvar))$</title>  $CMS_ELSE$                             <title>$CMS_VALUE(pt_meta_title, default:"")$</title>  $CMS_END_IF$

In der Vorschau funktioniert das wunderbar. Bei den letztendlich generierte Seiten wird aber immer der ELSE-Zweig durchlaufen. Hat hier jemand eine Idee oder einen Hinweis, woran das liegen könnte?

FS-Server Version ist die 5.2.426.74523.

Vielen Grüße

Sebastian

0 Kudos
1 Reply
mbergmann
Crownpeak employee

Hi Sebastian,

Ohne jetzt schon genau sagen zu können ob es der Grund des Problems ist: was auf jeden Fall schonmal ungünstig ist, ist die Nutzung von getClass().toString().equals(...). Das sollte man so nie nutzen, weil ein getClass immer die konkrete Implementierungsklasse ausgibt, die üblicherweise nie Teil der API ist (und sich darum jederzeit ändern kann bzw. sich auch zwischen Vorschau und Generierung unterscheiden kann). Es sollte immer nur auf Interfaces geprüft werden.

Eine „instanceof“-Prüfung gegen ein Interface kannst Du mit class("de.espirit....SomeInterface").isCase(someObject) machen, siehe hier.

Grundsätzlich würde ich erstmal so vorgehen, mir die Ergebnisse der einzelnen Teile des IFs mal separat auszugeben um zu schauen an welcher Stelle etwas „anders“ ist. Vielleicht liegt es ja tatsächlich schon an der Klassenprüfung.

Viele Grüße

Michael

0 Kudos