reger
Returning Observer

Label und Entries einer Combobox auslesen

Jump to solution

Hallo,

ich versuche, die Entry-Informationen (Values und Labels) einer CMS_INPUT_COMBOBOX auszulesen. Die Combobox sieht so aus:

<CMS_INPUT_COMBOBOX name="st_filter0" hFill="yes" singleLine="no" useLanguages="no">

        <ENTRIES>

          <ENTRY value="1">

            <LANGINFOS>

              <LANGINFO lang="*" label="Ein-Zähler-Messung"/>

            </LANGINFOS>

          </ENTRY>

          <ENTRY value="2">

            <LANGINFOS>

              <LANGINFO lang="*" label="Zwei-Zähler-Messung"/>

            </LANGINFOS>

          </ENTRY>

        </ENTRIES>

        <LANGINFOS>

          <LANGINFO lang="*" label="Filter 1"/>

        </LANGINFOS>

      </CMS_INPUT_COMBOBOX>


Ich habe versucht mit

$CMS_VALUE(#global.page.getFormData.getForm().findEditor("st_filter0").getEntries().getLangInfos().label())$


an die Werte für die Label zu kommen, aber ich denke, da fehlt mir noch ein Index. Auf jeden Fall hatte ich bisher noch keinen Erfolg. Ich bin leider nicht in JAVA bewandert, deswegen hilft mir die API-Dokumentation auch nur sehr rudimentär weiter.

Vielleicht kann das ja ein Spezialist/eine Spezialistin aus dem Ärmel schütteln?

Viele Grüße
Gabriele Reger

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Guten Morgen Gabriele,

ich fürchte, dann habe ich Dich missverstanden.

Du meinst also so etwas:

$CMS_SET(ST,#global.userService.getStore(class("de.espirit.firstspirit.access.store.Store$Type").TEMPLATESTORE,false).getSectionTemplates().getTemplate("NAME DES SECTIONTEMPLATES"))$

$CMS_FOR(for_entry,ST.getGomProvider().findEditor("st_filter0").getEntries())$

$CMS_FOR(for_langInfo,for_entry.getLangInfos())$

  $CMS_VALUE(for_langInfo.getLabel())$<br>

$CMS_END_FOR$

$CMS_END_FOR$

Das sollte bei Dir dann

Ein-Zähler-Messung

Zwei-Zähler-Messung

ausgeben.

Die innere Schleife (über die lang-infos) wird gebraucht, da es ja für jede Sprache eine eigene Beschriftung geben kann. Für die Ausgabe des values braucht man die nicht, da reicht ein $CMS_VALUE(for_entry.getValue())$

Hinweis: Du musst über das Template und die dortige GOM Definition gehen, um alle Auswahlmöglichkeiten zu bekommen. Im Absatz selber sind nur die ausgewählten Einträge gespeichert.

Da Du das Template ja bereits kennst, kannst Du dir das direkt holen. Ansonsten müsstest Du über die Einträge des FS_CATALOG iterieren und dir von dort jeweils das template holen. Dann musst Du aber wiederum wissen, wie die gesuchte Eingabekomponente in dem jeweiligen Template heißt...

Viele Grüße,

Holger

View solution in original post

0 Kudos
7 Replies
hoebbel
Crownpeak employee

Hallo Gabriele,

das ist zu kompliziert gedacht.

Nimm einfach

$CMS_VALUE(st_filter0.label(#global.language))$

Viele Grüße,

Holger

0 Kudos
mbergmann
Crownpeak employee

Hallo Gabriele,

eigentlich sollte das recht einfach sein:

$CMS_VALUE(st_filter0.getLabel(#global.language))$

bzw. sicherheitshalber

$CMS_VALUE(st_filter0.getLabel(#global.language).convert2)$

Hintergrund: Der Wert einer Combobox ist ja eine Option. Erkennbar ist das immer im grauen Kasten rechts oben bei "zu den Methoden":

418624_pastedImage_0.png

Der Link "Option" führt auf die "komprimierte" Doku zu Option, wo Du dann auch die Methode .getLabel(language) findest:

418623_pastedImage_0.png

Alternativer Weg: Im "richtigen" ApiDoc zur Option findet man zwar "direkt" am Interface keine Methoden zu Labels, es erbt allerdings vom Interface Label   

Das hat dann genau diese zwei .getLabel(...)-Methoden - inklusive ein bisschen Erklärungstext zum Fallback-Verhalten.

Viele Grüße

Michael

0 Kudos
reger
Returning Observer

Hallo und Danke für eure Antworten!
Ich vergaß zu erwähnen, dass die Combobox innerhalb eines FS_CATALOG zur Verfügung gestellt wird, d.h. ich befinde mich außerhalb der eigentlichen Vorlage und wollte über ein Render-Template arbeiten, BEVOR die Sections aus dem FS_CATALOG abgearbeitet werden. Aber vielleicht ist das ja doch zu kompliziert gedacht. Übrigens ist in meiner Doku getLabel als deprecated gekennzeichnet....

Viele Grüße
Gabriele Reger

0 Kudos
hoebbel
Crownpeak employee

Hallo Gabriele,

Du willst also mit Templatemitteln das Label einer CMS_INPUT_COMBOBOX ausgeben, die sich in einem Absatz in einem FS_CATALOG befindet. Nehmen wir an, die CATALOG Eingabekomponente ist do definiert:

  <FS_CATALOG name="pt_catalog">

    <LANGINFOS>

      <LANGINFO lang="*" label="catalog"/>

    </LANGINFOS>

    <TEMPLATES type="section"/>

  </FS_CATALOG>

und die COMBOBOX ist die aus dem ursprünglichen Post.

Dann müsste das so klappen:

$CMS_FOR(for_card,pt_catalog)$

$CMS_VALUE(for_card.item.st_filter0.label(#global.language))$

$CMS_END_FOR$

Ich hoffe, dass Dir das weiterhilft.

Viele Grüße,

Holger

0 Kudos
reger
Returning Observer

Hallo Holger,

vielen Dank für deine Mühe!.

Es ist aber tatsächlich so, dass ich auf diesem Weg alle gesetzten Werte auslese und nicht die reine Information aus dem Label. D.h. ein Wert, der innerhalb des FS_CATALOG nicht ausgewählt ist, den bekomme ich auf über diese Methode auch nicht. Außerdem werden natürlich auch Werte mehrfach geliefert, aber das kann man ja abfangen.

Wahrscheinlich kann ich auch damit weiter arbeiten, aber m.E. sollte es ja auch möglich sein, einfach die reine Information aus dem Aufbau der Eingabekomponente zu verarbeiten. Irgendwo muss diese Info doch stehen bzw. verarbeitbar sein.

Viele Grüße
Gabriele Reger

0 Kudos
hoebbel
Crownpeak employee

Guten Morgen Gabriele,

ich fürchte, dann habe ich Dich missverstanden.

Du meinst also so etwas:

$CMS_SET(ST,#global.userService.getStore(class("de.espirit.firstspirit.access.store.Store$Type").TEMPLATESTORE,false).getSectionTemplates().getTemplate("NAME DES SECTIONTEMPLATES"))$

$CMS_FOR(for_entry,ST.getGomProvider().findEditor("st_filter0").getEntries())$

$CMS_FOR(for_langInfo,for_entry.getLangInfos())$

  $CMS_VALUE(for_langInfo.getLabel())$<br>

$CMS_END_FOR$

$CMS_END_FOR$

Das sollte bei Dir dann

Ein-Zähler-Messung

Zwei-Zähler-Messung

ausgeben.

Die innere Schleife (über die lang-infos) wird gebraucht, da es ja für jede Sprache eine eigene Beschriftung geben kann. Für die Ausgabe des values braucht man die nicht, da reicht ein $CMS_VALUE(for_entry.getValue())$

Hinweis: Du musst über das Template und die dortige GOM Definition gehen, um alle Auswahlmöglichkeiten zu bekommen. Im Absatz selber sind nur die ausgewählten Einträge gespeichert.

Da Du das Template ja bereits kennst, kannst Du dir das direkt holen. Ansonsten müsstest Du über die Einträge des FS_CATALOG iterieren und dir von dort jeweils das template holen. Dann musst Du aber wiederum wissen, wie die gesuchte Eingabekomponente in dem jeweiligen Template heißt...

Viele Grüße,

Holger

0 Kudos
reger
Returning Observer

Das war's. Danke Holger für deine Mühe!

0 Kudos