Questions & Answers

SOLVED
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

Type a product name