daniel_philippi
Occasional Collector

Datenquelle mit CMS_INPUT_COMBOBOX auslesen und weitere Werte abfragen

Hallo Zusammen.

Im Formular habe ich eine CMS_INPUT_COMBOBOX.

<CMS_INPUT_COMBOBOX name="cs_color" useLanguages="yes">

    <CMS_INCLUDE_CONTENT table="database.colors" type="entries">

        <LABEL lang="*">#row.name</LABEL>

        <LABEL lang="DE">#row.name</LABEL>

    </CMS_INCLUDE_CONTENT>

    <LANGINFOS>

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

    </LANGINFOS>

</CMS_INPUT_COMBOBOX>

Mit dieser rufe ich Farbwerte aus einer Datenquelle ab. Als Wert der Combobox cs_color erhalte ich im HTML Reiter nur die ID des Datensatzen. Also mache ich hier nochmal eine Abfrage.

<CMS_FUNCTION name="contentSelect" resultname="cs_color_select">

         <CMS_PARAM name="schema" value="database" />

         <CMS_VALUE_PARAM name="color_id" value="cs_color" />   

    <QUERY entityType="Colors">

        <FILTERPARAM parameter="color_id" datatype="java.lang.Long" />   

        <EQ attribute="fs_id" parameter="color_id" />

    </QUERY>

</CMS_FUNCTION>

Über die Doku habe ich das obige Konstrukt gebaut. Ohne die beiden Zeilen Filterparam und EQ bekomme ich alle Werde der Datenquelle. D.h. der Rest ist ok. Mit den beiden Werten erhalte ich keine Ausgabe. Die ausgabe versuche ich mit $CMS_VALUE(cs_color_select.name)$.

Hat jemand eine Idee oder eine bessere Möglichkeit dies umzusetzen?!

Vielen Dank schonmal.

Daniel Philippi

0 Kudos
6 Replies
gockel
Crownpeak employee

Mit dieser rufe ich Farbwerte aus einer Datenquelle ab. Als Wert der Combobox cs_color erhalte ich im HTML Reiter nur die ID des Datensatzen. Also mache ich hier nochmal eine Abfrage.

Das ist so nicht richtig. Die zusätzliche contentSelect Funktion im Template ist nicht notwendig.

Bei diesem Konstrukt liefert der Zugriff im Template auf die Variable der Combobox (in ihrem Fall: cs_color) eine Option und damit kompletten Zugriff auf den dahinterliegenden Datensatz.

$CMS_VALUE(cs_color.getValue())$ liefert den Datensatz.

Noch ein Hinweis:

CMS_INCLUDE_CONTENT ist deprecated und sollte durch CMS_INCLUDE_OPTIONS ersetzt werden.

0 Kudos

Hallo, ich weiss, die Frage wurde schon vor einiger Zeit gestellt, aber ich habe eine genau analoge Situation und werde aus der Antwort oben leider nicht schlau...

Wenn ich in meinem contentSelect ein CMS_PARAM mit einem konstanten String verwende, funktioniert meine Abfrage wie erwartet. Wenn ich aber <CMS_VALUE_PARAM name="xy" value="stCategory"/> schreibe (stCategory ist in meinem Beispiel der Name der COMBO_BOX im Formular), bekomme ich kein Ergebnis. Aus der Doku und der Antwort oben entnehme ich, dass meine COMBO_BOX ein Option-Objekt liefert, aber wie kann ich denn den Wert davon auslesen?

<CMS_VALUE_PARAM name="xy" value="$CMS_VALUE(stCategory.getValue())$"/>

wird leider als inkorrekt zurückgewiesen..

0 Kudos

Hallo,

mit stCategory.getValue() erhält man bereits den ausgewählten Datensatz. Und mit $CMS_VALUE(stCategory.getValue())$ wird dieser ausgegeben (unter Verwendung der zugehörigen Tabellenvorlage). Eine zusätzliche Abfrage ist nicht erforderlich.

Gruß

Stefan

0 Kudos

Ich konnte das Problem lösen, indem ich mir im HTML-Kanal den Wert stCategory ausgegeben habe. Dies war nicht wie erwartet ein String, sondern ein INT. Daher funktionierte die Abfrage natürlich nicht, weil dort ein String-Wert erwartet wurde! Und stCategory.getValue() liefert offenbar das Option-Objekt per toString()-Methode, würde also leider auch nicht geholfen haben.

Ich habe also den Parameter angepasst:

<CMS_VALUE_PARAM name="category" value="stCategory.getLabel(#global.language)" />

Damit erhalte ich den tatsächlichen String-Wert der Auswahl, und das Content-Select funktioniert (es gibt im Projekt glücklicherweise nur eine Sprache, würde diese Lösung auch mit mehreren Sprachen gehen?).

Trotzdem danke für die Antwort.

0 Kudos

Vieleicht verstehe ich die Fragestellung auch falsch? Was soll mit dem ContentSelect erreicht werden?

Gruß

Stefan

0 Kudos

Es gibt bei mir Tabellen news und news_categories. Die news sind über einen Fremdschlüssel mit news_categories verbunden (jede news hat eine Kategorie). Im Template-Formular soll eine Kategorie ausgewählt werden, und damit dann im ContentSelect die News gefiltert werden. Ich wollte in der Query per

<EQ attribute="news_category.name" parameter="category" />

die String-Werte (Fremdschlüssel-Wert und Formular-Auswahl) vergleichen. Im Nachhinein betrachtet, ist es viel sinnvoller, dort direct die IDs zu verwenden, also etwas zu schreiben wie

<EQ attribute="news_category.fs_id" parameter="category" />

Damit kann man dann auch direkt schreiben:

<CMS_VALUE_PARAM name="category" value="stCategory" />

Also: ich habe mir selbst das Leben schwer gemacht...

0 Kudos