Search the FirstSpirit Knowledge Base
Hallo,
wie kommen wir über den CaaS an die Strukturvariablen heran? Bei Abfrage von Seiten über die REST-API werden die Werte nicht mitübermittelt.
Danke und viele Grüße
Fabian
OK, danke.
Hier mal mein fertig funktionierendes Skript, falls es mal jemand benötigt:
import de.espirit.firstspirit.access.store.pagestore.Page;
import de.espirit.firstspirit.access.store.sitestore.PageRef;
import de.espirit.firstspirit.access.store.sitestore.PageRefFolder;
import de.espirit.firstspirit.store.access.sitestore.SiteStoreRootImpl;
// Strukturvariable ss_division
ss_division = "";
// Ordner rekursiv nach oben durchlaufen
recurse(folder) {
if (folder != null && (folder instanceof PageRefFolder || folder instanceof SiteStoreRootImpl) ) {
// Strukturvariablen auslesen
data = folder.getData();
dataValue = data.get("ss_division");
// Variablen nicht überschreiben
if (ss_division.equals("") && dataValue != null) {
ss_division = dataValue.getEditor().get(language);
}
// Weiter nach oben rekursieren
recurse(folder.getParentFolder());
}
}
// Für jede Seite
if (e instanceof PageRef) {
recurse(e.getParentFolder());
// Strukturvariable ss_division
customData.put("ss_division", ss_division);
}
Gibt es eigentlich einen speziellen Grund warum die Strukturvariablen nicht automatisch im Navigation Service ausgegeben werden?
Das ist korrekt, Strukturvariablen werden nicht über den CaaS bereitgestellt.
Könnt ihr den Anwendungsfall erläutern, für den ihr Strukturvariablen einsetzt?
Wir nutzen das recht häufig um Teilbäumen unserer Website Werte mitzugeben.
Wenn also z. B. Seiten in diesem Teilbaum Informationen zum Thema "X" beinhalten setzen wir eine Strukturvariable "ss_productinfo" = "X". Dann können wir auf allen Unterseiten in den Templates oder Skripten mit dieser Variable arbeiten.
Ich hätte daher eigentlich erwartet, dass diese Daten auch bei einem Headless-Konsum der Daten verfügbar sind, z. B. im Navigation Service oder eben im CaaS.
Was für Möglichkeiten haben wir denn hier sonst?
Der Weg dafür ist über ein Custom-Data-Element im Navigation Service.
OK, danke. Ich habe die Dokumenation zu den Custom-Data-Elementen im Navigation Service gefunden. Hast du noch einen Hinweis für mich, wie ich innerhalb des Skriptes navigation_service_custom_data die Strukturvariablen auslesen kann um sie entsprechend zu übergeben?
Hilft dir das Beispiel hier: https://docs.e-spirit.com/odfs/access/de/espirit/firstspirit/access/store/sitestore/PageRefFolder.ht...
try to retrieve a DataValue (variable) with desired name
Ja, das hilft mir, danke.
Ich habe es jetzt so weit:
import de.espirit.firstspirit.access.store.sitestore.PageRef;
if (e instanceof PageRef) {
folder = e.getParentFolder();
if (folder != null) {
data = folder.getData();
variableName = "ss_division";
dataValue = data.get(variableName);
if (dataValue != null) {
customData.put(variableName, dataValue.getEditor().get(language));
}
}
}
Allerdings kann ich mit getParentFolder() immer nur den direkt parent SiteStoreFolder holen und dort auf die Variable prüfen. Die Strukturvariablen dagegen sind ja rekursiv. Gibt es dazu eine gute Lösung oder muss ich manuell rekursiv nach oben durch die Struktur iterieren bis ich einen Folder gefunden habe an dem der Wert gesetzt ist, bzw. bis ich am Root-Knoten angekommen bin?
Das sieht doch sehr gut aus.
Und ich glaube ihr müsst da selber rekursiv die Hierarchie hoch gehen, zumindest kenne ich keine andere Möglichkeit.
OK, danke.
Hier mal mein fertig funktionierendes Skript, falls es mal jemand benötigt:
import de.espirit.firstspirit.access.store.pagestore.Page;
import de.espirit.firstspirit.access.store.sitestore.PageRef;
import de.espirit.firstspirit.access.store.sitestore.PageRefFolder;
import de.espirit.firstspirit.store.access.sitestore.SiteStoreRootImpl;
// Strukturvariable ss_division
ss_division = "";
// Ordner rekursiv nach oben durchlaufen
recurse(folder) {
if (folder != null && (folder instanceof PageRefFolder || folder instanceof SiteStoreRootImpl) ) {
// Strukturvariablen auslesen
data = folder.getData();
dataValue = data.get("ss_division");
// Variablen nicht überschreiben
if (ss_division.equals("") && dataValue != null) {
ss_division = dataValue.getEditor().get(language);
}
// Weiter nach oben rekursieren
recurse(folder.getParentFolder());
}
}
// Für jede Seite
if (e instanceof PageRef) {
recurse(e.getParentFolder());
// Strukturvariable ss_division
customData.put("ss_division", ss_division);
}
Gibt es eigentlich einen speziellen Grund warum die Strukturvariablen nicht automatisch im Navigation Service ausgegeben werden?
Vielen Dank, ich habe dein Skript als Lösung markiert.
Alle Site-Store Variablen im Navigation Service zu haben ist nicht das, was alle tatsächlich alle Kunden wollen. Neben dem Nachteil der erhöhten Payload sind die Anforderungen hier (nur bestimmte Variablen, nur bestimmte Werte, mit oder ohne "Vererbung", etc.) zu unterschiedlich.