thorsten
Returning Observer

Ausgehende Referenzen eines Absatzes filtern mit "Store.Type.CONTENTSTORE"?

Jump to solution

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

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

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

 

 

View solution in original post

4 Replies
mbergmann
Crownpeak employee

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

 

 

thorsten
Returning Observer

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

0 Kudos
thorsten
Returning Observer

Kleine Ergänzung: Bei "for_section_ref.getStoreType().getName()" wird als Ergebnis "contentstore" in lower case zurückgeliefert.

mbergmann
Crownpeak employee

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

0 Kudos