Die Projektion wird über eine Query gesteuert:
<QUERY entityType="newshub_entries">
<AND>
<OR>
<IS_NULL attribute="is_press_release"/>
<NEQ attribute="is_press_release" datatype="java.lang.Boolean" value="true"/>
</OR>
<EQ attribute="publish_%lang%" datatype="java.lang.Boolean" value="true"/>
<OR>
<IS_NULL attribute="time_from"/>
<LTE attribute="time_from" datatype="de.espirit.common.Now" value="1455540411802"/>
</OR>
<OR>
<IS_NULL attribute="time_to"/>
<GTE attribute="time_to" datatype="de.espirit.common.Now" value="1455540411802"/>
</OR>
</AND>
<ORDERCRITERIA attribute="date_%lang%" descending="1"/>
</QUERY>
Die Sitemap wird über die Navigation-Funktion generiert:
<CMS_FUNCTION name="Navigation" resultname="googleSitemap"> <CMS_PARAM name="expansionVisibility" value="all"/>
<CMS_PARAM name="wholePathSelected" value="0"/>
<CMS_PARAM name="siteMap" value="1"/>
<CMS_PARAM name="multiPages" value="1"/>
<CMS_ARRAY_PARAM name="pageRefRendering">
<CMS_ARRAY_ELEMENT index="0..14"><![CDATA[
$-- Content Projektions-Seiten durch CMS_PARAM name="siteMap" mit berücksichtigen:
Alle normalen Seiten (isFirst), EINZEL-Detail-Seiten aus Content-Projektion (entitiesPerPage == 1) und ERSTE-Paginations-Übersichts-Seiten (isFirst) berücksichtigen; Paginierungsseiten werden nicht ausgegeben --$
$CMS_IF(#nav.ref.pageParams.isFirst || #nav.ref.node.getMultiPageParams(#global.language,#global.templateSet).entitiesPerPage == 1)$
<url>
<loc>$CMS_VALUE(pt_content_server,default:"")$$CMS_RENDER(template:"render_internal_link", pageref:#nav.ref)$</loc>
</url>
$CMS_END_IF$
]]></CMS_ARRAY_ELEMENT>
</CMS_ARRAY_PARAM>
</CMS_FUNCTION>
Ich habe inzwischen eine Tabellenspezifische Lösung implementiert, da ich keine andere Lösung gefunden habe. Diese funktioniert in etwa so:
Normale Seiten:$CMS_SET(#global.pageContext["pc_translatedLanguages"], [])$
$CMS_FOR(for_lang, #global.project.languages)$
$CMS_SET(void, if(for_lang.shouldGenerate && #global.page.isTranslated(for_lang.abbreviation.upperCase),pc_translatedLanguages.add(for_lang)))$
$CMS_END_FOR$
Content-Projektionsseite für die Tabelle mit Logik des Queries (siehe oben):
$CMS_SET(#global.pageContext["pc_translatedLanguages"], [])$
$CMS_FOR(for_lang, #global.project.languages)$
$CMS_SET(void, if((set_newshub_entry.getValue("publish_" + for_lang.abbreviation) == true) &&
(set_newshub_entry.time_from == null || #global.now.after(set_newshub_entry.time_from)) &&
(set_newshub_entry.time_to == null || #global.now.before(set_newshub_entry.time_to)),
pc_translatedLanguages.add(for_lang)))$
$CMS_END_FOR$