Search the FirstSpirit Knowledge Base
Hallo Zusammen,
wir haben ein Script welches Datenquellen Einträge ausliest, das funktioniert auch nach Umstellung auf FS_INDEX mit FormData und DataAccessSession.
Wir haben eine Absatzvorlage in der wir eine FS_LIST inline - jetzt ein FS_CATALOG benutzen.
Das Problem das wir haben es wird nicht gerendert, wenn wir die Variable also die FS_CATALOG Liste mit.size ausgeben zeigt es an das etwas da ist aber rausgerendert wird leider nichts.
$CMS_VALUE(stBoxInhalt.items)$
$--$CMS_VALUE(stBoxInhalt.size)$--$
$--$CMS_FOR(boxinhalt, stBoxInhalt.items)$
$CMS_VALUE(boxinhalt)$
$CMS_END_FOR$--$
</div>
<% } %>
<FS_CATALOG name="stBoxInhalt" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Inhalt" description="Bitte geben Sie an, welcher Inhlat von einer blauen Box umrandet werden soll."/>
<LANGINFO lang="EN" label="Content" description="Please select which content to put into a blue box."/>
</LANGINFOS>
<TEMPLATES type="section">
<TEMPLATE uid="aktuelle_publikation_marginalspalte"/>
<TEMPLATE uid="wirtschaftsindikatoren_1"/>
<TEMPLATE uid="aktuelle_publikation_1"/>
</TEMPLATES>
</FS_CATALOG>
Hier unser Script, welches auch soweit funktioniert.
FormData myFormData = section.getFormData();
context.logDebug("auslesen myFormData" + " " + myFormData);
Index myFormField = (Index) myFormData.get(null, name).get();
final DataAccessSession st_myDatasetListDataAccessSession = myFormField.createSession(context);
context.logDebug("Iterate through Formfield: " + name );
for (Index.Record record : myFormField) {
Dataset dataset = (Dataset) st_myDatasetListDataAccessSession.getData(record.getIdentifier());
FormData formData = dataset.getFormData();
String technicalName = (String) formData.get(null, "stTechnicalName").get();
context.logDebug("technicalName: " + technicalName);
tOr.add(new Equal("technicalName", technicalName));
}
Nur der Umweg über ein Template bzw. ein Absatztemplate funktioniert nicht.
Ich hoffe irgendjemand hat ein Tipp für uns.
Danke und Grüße - Dajana
Hey Dajana,
das .items ist in der Ausgabe zu viel. $CMS_VALUE(stBoxInhalt)$ rendert dir alle Einträge des FS_CATALOG stBoxInhalt. Wenn du über die Einträge iterieren möchtest, dann verwende
$CMS_FOR(for_box, stBoxInhalt)$
$CMS_VALUE(for_box)$
$CMS_END_FOR$
- Falls du noch auf einzelne Eingabekomponenten der Catalog-Einträge (Cards genannt) zugreifen möchtest, dann geht das mittels for_box.item. Würde ich jedoch nicht empfehlen, da du dann stets wissen musst, welche Templates in deinem Catalog liegen.
Ich weiß leider nicht so recht, wie dein Skript nun mit dem Catalog-Problem zusammenhängt... Vielleicht hilft der FS_LIST-Migrationsleitfaden weiter, falls du ihn noch nicht kennst: Online Dokumentation FirstSpirit - FS_LIST: Migration Guide
Beste Grüße
Florian
Hallo Florian,
das funktioniert leider nicht.
es ist so das ich in diesem Absatztemplate ein FS_CATALOG habe, das ist mein stBoxInhalt.
In diesem Catalog füge ich Listen Elemente von einem anderen Template ein (aktuelle_publikationen)
hier kommt das script ins spiel, dieses script liest die Datensätze aus der Datenquelle aus und das aktuelle publikationen Template rendert diese.
Wenn ich das Absatztemplate aktuelle publikationen nutze, dann bekomme ich auch die Datensätze rausgerendert, demnach funktioniert auch mein Script.
Jedoch wenn ich diese aktuellen publicationen in dem boxtemplate mit einem FS_Catalog einfüge dann wird mir nichts gerendert.
Ich habe mal versucht derart was rauszurendern:
$--$CMS_FOR(box, stBoxInhalt.items)$
$CMS_VALUE(box.get("stPublicationTypes").values)$
$CMS_END_FOR$--$
da bekomme ich so etwas rausgerendert:
[de.espirit.firstspirit.store.access.contentstore.DatasetImpl{de.espirit.or.impl.EntityImpl@aeb9dede{Publikationstypen,PERSISTENT,released,FS_ID=23873,FS_VALID_FROM=1339745089005,FS_VALID_TO=9223372036854775807,FS_RELEASE_TO=9223372036854775807,FS_GID=00000000-0000-0000-0000-000000000000}}]
Grüße - Dajana
Hmmm... Du hast also ein Sectiontemplate "box" mit einem FS_CATALOG. Darin wiederum ein Template "aktuelle_publikationen". In diesem Template rufst du ein Skript auf, welches Datensätze ausliest und rendert? Damit sollte eigentlich der von mir gezeigte Code funktionieren. Aber eventuell ist ein Details noch nicht ganz klar, warum es letztlich nicht geht.
Zu deiner letzten Antwort: values gibt dir in diesem Fall eine Collection von Datasets. Du könntest probieren über diese Datasets zu iterieren und dir jeweils das FormData in einen CMS_VALUE zu packen.
$CMS_FOR(box, stBoxInhalt.items)$
$CMS_FOR(for_dataset, box.get("stPublicationTypes").values)$
$CMS_VALUE(for_dataset.formData)$
$CMS_END_FOR$
$CMS_END_FOR$
Und noch ein Hinweis: Ich bin nicht sicher, warum du das Auslesen der Datensätze über ein Skript machst und nicht über ein ContentSelect? Ich würde letzteres empfehlen, da es näher am Standard ist (und vermutlich auch performanter).
Viele Grüße
Florian
Hallo Florian,
das Script ist Historisch bedingt, ich habe es dann im Rahmen des FS Update und der FS_LIST migriert.
Den Vorschlag von dir oben habe ich auch schon ausprobiert.
Was für mich auch sehr logisch scheint.
Ich hole mir in der ersten Ebene aus dem Section Template die Items (FS_CATALOG).
ein stBoxInhalt.size zeigt mir auch an das da was drin ist.
Dann iteriere ich ich über die einzelnen BoxInhalte die "aktuellen_publikationen" diese sind aber wieder auch ein FS_INDEX.
die hole ich mir über die values und formData.
Aber es wird nicht angezeigt.
Grüße Dajana