Frank_HLP
Returning Observer

Dynamische contentSelect-Funktion

Jump to solution

Hallo zusammen!

Ich möchte mittels define eine contentSelect-Funktion aufbauen, um mehrere Vergleichswerte aus einer FS_LIST dynamisch der Abfrage hinzuzufügen. Ich habe eine einfache Funktion erstellt, die nur die Sortierung beeinträchtigt, um die contentSelect Funktion zu testen. Leider wird der Inhalt aus der define-Funktion ignoriert. Kann man etwas in der Art überhaup umsetzen?

<CMS_FUNCTION name="define" resultname="fr_query">
     <CMS_CDATA_PARAM name="source">
        <![CDATA[
           <ORDERCRITERIA attribute="date" descending="1" />]]>
   </CMS_CDATA_PARAM>
</CMS_FUNCTION>

   

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

   <CMS_PARAM  name="schema" value="test_news" />
   <CMS_VALUE_PARAM name="cat" value="st_category_list_global.value.fs_id" />
   <QUERY entityType="news">fr_query</QUERY>

    </CMS_FUNCTION>

Ich bin bei der Suche hier auf diesen Beitrag gestoßen https://community.e-spirit.com/message/19995#1999 . Wenn ich danach gehe, müsste doch auch mein Problem lösbar sein?

Viele Grüße

Frank

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Frank,

Spontan denke ich dass das so nicht funktioniert, weil Du (wenn ich es richtig verstehe) hier die Query mit einer variablen Anzahl von Kriterien dynamisch erzeugen und nicht nur einen ihrer Werte setzen willst.

Du könntest alternativ ein Renderscript benutzen. Nicht um die Ausgabe zu erzeugen, sondern um eine übergebene leere Liste zu füllen. Das Template würde dann auf der gefüllten Liste statt auf dem Ergebnis des ContentSelect arbeiten.

Dem Renderscript übergibst Du neben der leeren Liste (die brauchst Du als "Rückgabewert-Container") auch die FS_LIST. Der Aufruf im Template wäre dann in etwa:

$CMS_SET(set_results,[])$

$CMS_RENDER(script:"dyn_query",resultContainer:set_results,list:st_myList)$

Im Script "dyn_query" kannst Du Dir dann anhand der Infos aus der FS_LIST per API dynamisch eine Query bauen (de.espirit.or...) und ausführen. Die einzelnen Ergebnisse legts Du dabei in die Variable "resultContainer". Das Script würde selbst KEINE Ausgabe erzeugen:

result.setValue("");

Nach dem $CMS_RENDER$-Aufruf kannst Du dann im Template z.B. über die Ergebnisliste iterieren:

$CMS_FOR(for_resultEntry,set_results)$

...

Viele Grüße

Michael

View solution in original post

0 Kudos
2 Replies
mbergmann
Crownpeak employee

Hallo Frank,

Spontan denke ich dass das so nicht funktioniert, weil Du (wenn ich es richtig verstehe) hier die Query mit einer variablen Anzahl von Kriterien dynamisch erzeugen und nicht nur einen ihrer Werte setzen willst.

Du könntest alternativ ein Renderscript benutzen. Nicht um die Ausgabe zu erzeugen, sondern um eine übergebene leere Liste zu füllen. Das Template würde dann auf der gefüllten Liste statt auf dem Ergebnis des ContentSelect arbeiten.

Dem Renderscript übergibst Du neben der leeren Liste (die brauchst Du als "Rückgabewert-Container") auch die FS_LIST. Der Aufruf im Template wäre dann in etwa:

$CMS_SET(set_results,[])$

$CMS_RENDER(script:"dyn_query",resultContainer:set_results,list:st_myList)$

Im Script "dyn_query" kannst Du Dir dann anhand der Infos aus der FS_LIST per API dynamisch eine Query bauen (de.espirit.or...) und ausführen. Die einzelnen Ergebnisse legts Du dabei in die Variable "resultContainer". Das Script würde selbst KEINE Ausgabe erzeugen:

result.setValue("");

Nach dem $CMS_RENDER$-Aufruf kannst Du dann im Template z.B. über die Ergebnisliste iterieren:

$CMS_FOR(for_resultEntry,set_results)$

...

Viele Grüße

Michael

0 Kudos
Frank_HLP
Returning Observer

Hallo Michael,

ich konnte das Problem mit dem von Dir vorgeschlagenen Ansatz lösen. Danke!

Viele Grüße

Frank

0 Kudos