Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich stehe gerade etwas auf dem Schlauch, warum die Prüfung auf den Store.Type "CONTENTSTORE" nicht funktioniert...
$CMS_SET(set_section,#global.section)$
$CMS_SET(set_section_references, set_section.getReferences)$
$CMS_VALUE(set_section_references)$<p>--</p>
$CMS_FOR(for_section_ref, set_section_references)$
$CMS_VALUE(for_section_ref.getStoreType())$<br>
$CMS_IF(for_section_ref.getStoreType() == Store.Type.CONTENTSTORE)$
$CMS_VALUE("TRUE: "+for_section_ref)$<p>
$CMS_END_IF$
$CMS_END_FOR$
Ergebnis:
[NameReferenceEntry[NameRef[TEMPLATESTORE_FORMATTEMPLATE/CMS_LINK],C], NameReferenceEntry[NameRef[TEMPLATESTORE_LINKTEMPLATE/lt_footnote],C], NameReferenceEntry[NameRef[TEMPLATESTORE_SCHEMA/SCHEMA.tt_legal_footnotes],C], IdReferenceEntry[IdRef[TEMPLATESTORE:56/T],C], NameReferenceEntry[NameRef[TEMPLATESTORE_FORMATTEMPLATE/p],C], ContentReferenceEntry[ContentRef[SCHEMA.tt_legal_footnoteseac6177b-b0f4-49e2-b802-11e00071ed92],C], ContentReferenceEntry[ContentRef[SCHEMA.tt_legal_footnotesbf96333b-6f94-49b1-bf7f-068ad6e5a086],C]]
--
TEMPLATESTORE
TEMPLATESTORE
TEMPLATESTORE
TEMPLATESTORE
TEMPLATESTORE
CONTENTSTORE
CONTENTSTORE
Danke & Grüße,
Thorsten
Hallo Thorsten,
der Ausdruck Store.Type.Contentstore hat so im Template keinen Wert, du bist hier ja nicht „direkt in Java unterwegs“. An Klassen kommst du im Ausgabekanal mit class(FQCN). Bei inneren Klassen (Store.Type) ist es etwas trickreicher. Der komplette Ausdruck in deinem Fall müsste sein
$CMS_IF(for_section_ref.getStoreType() == class("de.espirit.firstspirit.access.store.Store$Type").CONTENTSTORE)$
Wobei es hier auch einfacher geht, wenn du nicht das Enum sondern seinen Namen vergleichst:
$CMS_IF(for_section_ref.getStoreType().getName() == "contentstore")$
Allgemeine Hinweise:
Current vs. Release
Du nutzt getReferences(), was nur die ausgehenden Current-Stand-Referenzen liefert laut Doku. Je nachdem, was dein konkreter Anwendungsfall ist, könnte es relevant sein, dass hier die fehlen, die es (z.B. nach Änderungen ohne neue Freigabe) nur im Release aber nicht (mehr) im current gibt
Lambdas
Ich persönlich bin ja ein großer Fan von Lambdas (Abbildungsausdrücken), gerade was solche Filterungen betrifft. An eine Liste aller Contentstore-Referenzen kommst du in etwa mit
#global.section.getReferences().filter(refEntry -> refEntry.getStoreType().getName() == "contentstore")
… direkt und ohne $CMS_IF, $CMS_FOR etc 😉
(so aus dem Kopf, ungetestet 😉)
Viele Grüße
Michael
Hallo Thorsten,
der Ausdruck Store.Type.Contentstore hat so im Template keinen Wert, du bist hier ja nicht „direkt in Java unterwegs“. An Klassen kommst du im Ausgabekanal mit class(FQCN). Bei inneren Klassen (Store.Type) ist es etwas trickreicher. Der komplette Ausdruck in deinem Fall müsste sein
$CMS_IF(for_section_ref.getStoreType() == class("de.espirit.firstspirit.access.store.Store$Type").CONTENTSTORE)$
Wobei es hier auch einfacher geht, wenn du nicht das Enum sondern seinen Namen vergleichst:
$CMS_IF(for_section_ref.getStoreType().getName() == "contentstore")$
Allgemeine Hinweise:
Current vs. Release
Du nutzt getReferences(), was nur die ausgehenden Current-Stand-Referenzen liefert laut Doku. Je nachdem, was dein konkreter Anwendungsfall ist, könnte es relevant sein, dass hier die fehlen, die es (z.B. nach Änderungen ohne neue Freigabe) nur im Release aber nicht (mehr) im current gibt
Lambdas
Ich persönlich bin ja ein großer Fan von Lambdas (Abbildungsausdrücken), gerade was solche Filterungen betrifft. An eine Liste aller Contentstore-Referenzen kommst du in etwa mit
#global.section.getReferences().filter(refEntry -> refEntry.getStoreType().getName() == "contentstore")
… direkt und ohne $CMS_IF, $CMS_FOR etc 😉
(so aus dem Kopf, ungetestet 😉)
Viele Grüße
Michael
Hi Michael,
Danke für die schnelle Rückmeldung sowie hilfreiche Einordnung/Hinweise!
Probiere ich nachher gleich mal aus.
Hatte es zuvor auch schon mit "class()" versucht, aber auf class("de.espirit.firstspirit.access.store.Store$Type").CONTENTSTORE bin ich nicht gekommen.
Mein Schleifenkonstrukt war in der Tat auch nur für einen ersten, schnellen Test gedacht ob/wie ich an die Referenzen ran komme 🙂
Besten Dank,
Thorsten
Kleine Ergänzung: Bei "for_section_ref.getStoreType().getName()" wird als Ergebnis "contentstore" in lower case zurückgeliefert.
Hi Thorsten,
danke für den Hinweis! Ich habe das jetzt auch mal in meinem Posting korrigiert (CONTENTSTORE => contentstore) falls nochmal jemand auf dieses Posting stößt und deinen Hinweis übersieht 😉
Viele Grüße
Michael