FS_INDEX Sortierung nach Anzeigenamen möglich?
Hallo zusammen,
ich habe in einer News-Datenquelle eine Auswahlkomponente, in der Veröffentlichungsländer aus einer anderen Datenquelle ausgewählt werden sollen (Fremdschlüsselbeziehung). Leider wird die Liste der Länder aber unsortiert angezeigt, nämlich so:
Die Auswahl sieht so aus:
<FS_INDEX name="tt_publicationCountries" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Publication Countries"/>
<LANGINFO lang="DE" label="Veröffentlichungsländer"/>
</LANGINFOS>
<SOURCE name="DatasetDataAccessPlugin">
<QUERY name="master.query_country_with_project"/>
<TEMPLATE uid="master.countries"/>
</SOURCE>
</FS_INDEX>
und dies ist die zugehörige Abfrage:
<QUERY entityType="Countries">
<EQ attribute="country_with_project" datatype="java.lang.Boolean" value="true"/>
<ORDERCRITERIA attribute="countryName_%lang%"/>
</QUERY>
Aus der Doku entnehme ich, dass die Abfrage mit %lang% bei FS_INDEX nicht funktioniert (warum eigentlich nicht?), also habe ich mit einer Variante probiert: CMS_INPUT_LIST mit CMS_INCLUDE_OPTIONS:
<CMS_INPUT_LIST name="tt_publicationCountriesList" useLanguages="no">
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="EN">#item.countryName_EN</LABEL>
<LABEL lang="*">#item.countryName_DE</LABEL>
</LABELS>
<QUERY name="master.query_country_with_project"/>
<TABLE>master.countries</TABLE>
</CMS_INCLUDE_OPTIONS>
<LANGINFOS>
<LANGINFO lang="*" label="Publication Countries"/>
<LANGINFO lang="DE" label="Veröffentlichungsländer"/>
</LANGINFOS>
</CMS_INPUT_LIST>
aber auch das sortiert die Ansicht nicht nach den Anzeigenamen.
Gibt es überhaupt eine Möglichkeit, nach sprachabhängigen Anzeigenamen zu sortieren? Das sollte eigentlich eine Selbstverständlichkeit sein, aber wie?
Grüße
Matthias
-
Hallo Matthias,
bei der CMS_INPUT_LIST wird die Sortierung bei der Auswahl nicht über die QUERY, sondern über den Parameter sortOrder definiert. Wenn Du in den CMS_INPUT_LIST Tag noch das Attribut sortOrder="ascending" hinzufügst, solltest Du dort das gewünschte Ergebnis erhalten.
Bei FS_INDEX muss ich Dich aber leider bitten einen Feature Request einzustellen, da meines Wissens nach eine entsprechende sprachabhängige Sortierung nicht möglich ist.
Viele Grüße
Holger1 -
Hallo Holger,
vielen Dank, Feature Request habe ich gemacht! Als Übergangslösung nehmen wir die andere Variante, allerdings mit CHECKBOX, das lässt sich leichter auswählen als die LIST. Ein Haken daran ist noch, dass man im Gegensatz zu FS_INDEX nicht alle gleichzeitig auswählen kann, sondern alle einzeln anhaken muss.
Mir schwebt ein kleiner Hack vor, um alle gleichzeitig anzuhaken. Über ein TOGGLE und eine Regel mit einem ValueService. Etwa so:

Bloß scheitere ich grad daran, die Optionen auszulesen, die hier über <CMS_INCLUDE_OPTIONS type="database"> mit einer QUERY angebunden werden. Wie kommt man denn da dran?
Grüße
Matthias0 -
Hallo Matthias,
Du musst Dir die Entities holen, die Du setzen willst (also in deinem Fall alle aus der entsprechenden Datenquelle) und diese dann in Options umwandeln und setzen. Ich gehe mal davon aus, dass das Holen der Entities kein Problem ist.
Ich habe das Umwandeln (und Setzen) in einem Modul über diese zentrale Methode gemacht:
/**
* Setzt die Auswahl einer Entity-basierten Checkbox auf die uebergebene Entity-Liste.
* Bei leerer Liste passiert nichts. Existiert die GOM-Komponente nicht, ist es ein no-op.
*/
public static void setCheckboxEntityValues(String componentName, ArrayList<Entity> entityList, FormData formData) {
if (!entityList.isEmpty()) {
GomEditorProvider gomElements = formData.getForm();
GomFormElement gomElement = gomElements.findEditor(componentName);
if (null != gomElement) {
OptionFactory optionFactory = ((OptionFactoryProvider) gomElement).getOptionFactory();
HashSet<Option> valueSet = new HashSet<>();
for (Entity entity : entityList) {
valueSet.add(optionFactory.create(entity));
}
FormField<?> checkbox = formData.get(null, componentName);
checkbox.set(valueSet);
}
}
}Viele Grüße
Holger1 -
Dankeschön! Ich habe es jetzt nicht als ValueService in einer Regel, sondern als FS_BUTTON umgesetzt und das Skript etwas variiert. Es funktioniert!
Grüße
Matthias0
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Kommentare
4 Kommentare