Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich benötige für ein Skript alle Seitentemplates bis auf einen Ordner (__dev). Bisher habe ich mir alle geholt (inkl. __dev) mit folgendem Code:
pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);
Nun würde ich gerne den __dev-Ordner ausschließen. Hierzu habe ich folgende Methode gefunden:
getChildren(filter, true);
Leider weiß ich nicht wie ich den Filter bauen soll. Das Beispiel (http://localhost:8000/help/odfs/access/examples/de/espirit/firstspirit/access/store/StoreElementFilt...) habe ich mir bereits angsehen. Hat mir aber leider nicht geholfen.
Hat jemand evtl. ein Beispielcode für mich für meinen Anwendungsfall?
Danke im Voraus.
LG Thomas
Hallo Michael,
danke für deine Antwort. Mir ist dank deiner Antwort auftgefallen, dass ich das releativ einfach lösen kann, da ich die Templatenamen nur in eine ComboBox schreibe.
// Constants
REGEX_PATTERN = "(.*__master$)";
// Regex Pattern
Pattern pattern = Pattern.compile(REGEX_PATTERN);
// Get list of Templates for Combobox
pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);
// Fill ComboBoxes
for(item:pageChilds){
Matcher matcher = pattern.matcher(item.getUid());
if(matcher.find()){
pageComboBoxData.add(item.getUid());
}
}
Somit fallen bei uns alle _dev Templates weg, da diese hinter "__master" noch mit "__dev" erweitert werden, was durch die REGEX herausgefiltert wird
lg thomas
Hallo Thomas,
hier sollte es reichen, eine Klasse von StoreElementFilter erben zu lassen und die accept-Methode zu implementieren. Hier müsstest Du nur schauen, ob das Element (wenn es kein Ordner ist) im Ordner __dev liegt - ggf über ein Hochlaufen der Elternkette. Denn mit dem Filter kannst Du nur steuern, welche Elemente zurückgeliefert werden, aber nicht bei welchen die (von "außen") gesteuerte Rekursion abgebrochen wird.
Dabei daran denken, dass TemplateStore-Folder keine UID haben 😉
Das von Dir verlinkte Beispiel bringt in Deinem Fall tatsächlich nichts, weil hier letztlich nur "vorkonfektionierte" Filter aus den FilterUtils benutzt werden.
Zuerst hatte ich spontan übrigens die Idee, einfach alle Templates zu holen, in eine Map zu packen, dann rekursiv alle Kinder des __dev-Ordners zu nehmen und die wieder rauszuwerfen. Das ist aber auch nicht besser, weil eben TemplatestoreFolder keine UID haben und Du den Ordner nicht einfach anhand seines Namens holen kannst...
Viele Grüße
Michael
Hallo Michael,
danke für deine Antwort. Mir ist dank deiner Antwort auftgefallen, dass ich das releativ einfach lösen kann, da ich die Templatenamen nur in eine ComboBox schreibe.
// Constants
REGEX_PATTERN = "(.*__master$)";
// Regex Pattern
Pattern pattern = Pattern.compile(REGEX_PATTERN);
// Get list of Templates for Combobox
pageChilds = e.getPageTemplates().getChildren(PageTemplate.class, true);
// Fill ComboBoxes
for(item:pageChilds){
Matcher matcher = pattern.matcher(item.getUid());
if(matcher.find()){
pageComboBoxData.add(item.getUid());
}
}
Somit fallen bei uns alle _dev Templates weg, da diese hinter "__master" noch mit "__dev" erweitert werden, was durch die REGEX herausgefiltert wird
lg thomas
Hallo Thomas,
kleine Anmerkung: Eigentlich sollte ja in Deinem Fall keine RegEx nötig sein, ein
if(item.getUid().endsWith("__master"))
sollte es auch tun...
Macht es vielleicht einfacher lesbar 😉
Viele Grüße
Michael
Hallo Michael,
jetzt wo du es sagt, ja das ist etwas besser .
Ist sicher auch etwas performanter als die RegEx.
Danke.
lg thomas