Strukturvariablen über CaaS
Author: f_koenig
Publication Date: 1/17/2023 12:59
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
Tags: caas
-
Author: Peter_Jodeleit - 1/17/2023 13:28
Das ist korrekt, Strukturvariablen werden nicht über den CaaS bereitgestellt.
Könnt ihr den Anwendungsfall erläutern, für den ihr Strukturvariablen einsetzt?0 -
Author: f_koenig - 1/23/2023 13:52
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?
0 -
Author: Peter_Jodeleit - 1/23/2023 14:28
Der Weg dafür ist über ein Custom-Data-Element im Navigation Service.
0 -
Author: f_koenig - 1/25/2023 13:52
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?
0 -
Author: Peter_Jodeleit - 1/25/2023 14:43
Hilft dir das Beispiel hier: https://docs.e-spirit.com/odfs/access/de/espirit/firstspirit/access/store/sitestore/PageRefFolder.html
try to retrieve a DataValue (variable) with desired name
0 -
Author: f_koenig - 1/26/2023 12:59
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?
0 -
Author: Peter_Jodeleit - 1/26/2023 13:23
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.
0 -
Author: f_koenig - 1/26/2023 14:38
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?
0 -
Author: Peter_Jodeleit - 1/26/2023 15:31
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.
0
Please sign in to leave a comment.
Comments
9 comments