- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
FS_CATALOG context parent als Ebeneninfo (Beanshell)
Via FS_BUTTON (Beanshell) manipuliere ich ein FS_CATALOG Feld. Es kรถnnen sich jedoch darin auch Absatzelemente mit wiederum FS_CATALOG Feldern befinden, was somit verschachtelte Ebenen ermรถglicht. Nun muss ich in dem Zusammenhang wissen, auf welcher Ebene sich das aktuell in Bearbeitung befindliche Absatzelement befindet.
Auf oberster Ebene wรคre als Parent ja die Page. Darunter jeweils ein Absatzelement. Im besten Falle bekommt ich direkt die Tiefe oder ich "hangel" mich rekursiv wieder hoch.
Bisher konnte mir element.parent oder context nicht helfen.
- Labels:
-
Developers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ich habe nun selbst eine Lรถsung gefunden, aber wirklich befriedigend ist es nicht, weil ich es als kompliziert ansehe, das es keine direkte Mรถglichkeit gibt, sich die Informationen zu holen.
Die elementId ist das erste Element aus dem FS_CATALOG Feld, welches ich an den FS_BUTTON als Parameter รผbergebe.
// Gibt die Ebenentiefe der aktuellen Sektion zurรผck
getSectionDepth(section, elementId, depth) {
FormData formData = depth == 1 ? section.getFormData() : section.getItem();
String sectionName = formData.get(language, "st_headline").get();
SectionTemplateImpl sectionTemplate = section.getTemplate();
sectionDepth = null;
if(sectionTemplate.getUid().equals("contentarea")) {
CatalogImpl elements = formData.get(language, "st_elements").get();
if(elements.size() > 0) {
breakforloop;
for(el : elements) {
// Element gefunden?
if(elementId.equals(el.getId())) {
sectionDepth = depth;
return sectionDepth;
} else { // Ansonsten in der Ebene tiefer suchen...
sectionDepth = getSectionDepth(el, elementId, depth + 1);
if(sectionDepth != null) {
break breakforloop;
}
}
}
}
}
return sectionDepth;
}
int sectionDepth = 1;int sectionId = element.getId();
// Absatz laden und Ebenentiefe bestimmen
QueryAgent queryAgent = context.requireSpecialist(QueryAgent.TYPE);
Iterable<IDProvider> iterable = queryAgent.answer("fs.id=" + sectionId);
Iterator<IDProvider> iterator = iterable.iterator();
if(iterator.hasNext()) {
IDProvider idProvider = iterator.next();
FormData formData = idProvider.getFormData();
// Sektion gefunden?
if(idProvider != null) {
sectionDepth = getSectionDepth(idProvider, elementId, sectionDepth);
}
}
// message.append("\nEbenentiefe: " + sectionDepth);

