j_mueller
Elite Observer

Sprachabhängige Queries / CMS_VALUE_PARAM in Content-Pojektion

Hallo eSpirit-Community,

wir stehen vor dem Problem, dass wir in einem durch Strukturvariablen befüllten ContentSelect eine Paginierung benötigen. Die kurzfrisitg implementierte JavaScript-Paginierung eignet sich nun langsam nicht mehr, da die Anzahl der Einträge stetig steigt.

Anhand dieses Beitrages konnte ich mich schon vergewissern, dass Paginierung bei einem ContentSelect nicht möglich ist:

https://community.e-spirit.com/message/1655#1655

Da  die Parameter der Abfrage in sprachabhängiger Form vorliegen haben, fragen wir uns ob wir die Parameter einer Content-Projektion auch aus den Strukturvariablen befüllen können.

Konkret geht es um ein Statement, dass so aussieht:

<CMS_VALUE_PARAM name="news" value="ss_news" />

<CMS_VALUE_PARAM name="news_base" value="ss_news_base" />

<CMS_VALUE_PARAM name="type" value="ss_type" />

<QUERY entityType="news">

     <FILTERPARAM parameter="news" datatype="java.lang.String"/>

     <FILTERPARAM parameter="news_base" datatype="java.lang.String"/>

     <FILTERPARAM parameter="type" datatype="java.lang.String"/>

     <AND>

          <OR>

               <EQ attribute="locale" parameter="news"/>

               <EQ attribute="locale" parameter="news_base"/>

          </OR>

          <EQ attribute="type" parameter="type"/>

          <LTE attribute="date_time" datatype="de.espirit.common.Now" value="1331048432511"/>

     </AND>

</QUERY>

Sinn und Zweck ist es einem Markt News eines anderen Marktes zuordnen zu können (AT/CH erhalten DE-News) sowie einen Fallback für Märkte zu haben, die nur wenig eigene News besitzen (z.B. BR erhält BR & EN).

Die Abfrage lässt sich problemlos in einer ContentSelect-Funktion verwenden, in Form eines Filters für die Content-Projektion spuckt FirstSpirit jedoch eine Nullpointer Exception aus.

Wer kann uns helfen? 🙂

Schöne Grüße

Julius Müller

0 Kudos
4 Replies
stephan
I'm new here

Hallo Herr Müller,

lassen sie mich zum Verständnis den aktuellen Stand nochmal kurz zusammenfassen:

- aktuell gibt es ein ContentSelect (mit Parametern aus Strukturvariablen) mit JavaScript-Paging

- Paging von FS gibt es bei ContentSelect nicht

- Parameter sind sprachabhängig

- Parameter sollen aus Strukturvariablen kommen

das Szenario ist folgendes:

- ein Markt erhält News eines anderen Marktes

- Märket ohne News erhalten News aus einem Fallback-Markt

Wie sie bereits festgestellt haben, ist es nicht möglich die Parameter für eine Content-Projektion aus den Strukturvariablen zu lesen. Dafür ist auch eigentlich der Datenreiter vorgesehen, wo die Abfrage ausgewählt und die entsprechenden Parameter gepflegt werden können.

Was würde dagegen sprechen eine generische Abfrage zu erstellen, die die News des eigentlichen Marktes und die News des Fallback-Marktes anzeigt?

Für den Fall das man nur die News eines Marktes (des aktuellen oder des Fallback-Marktes) anzeigen möchte, könnte man dann eine zweite Abfrage erstellen, die nur die News eines Marktes anzeigt.

Viele Grüße

Jörg Stephan

0 Kudos

Hallo Herr Stephan,

vielen Dank für das Feedback, leider bestätigen Sie meine Befürchtungen.

Wenn ich Sie richtig verstehe, müssen hierfür unterschiedliche Strukturseiten angelegt werden - das kam mir auch schon in den Sinn. Natürlich könnten unterschiedliche Abfragen erstellt werden, das sollte nicht das Problem sein.

Das Problem ist eher, dass die Märkte als Sprachvarianten angelegt sind und wir über eine Sprachwahl zwischen den Märkten hin und her springen können, ohne z.B. die News-Übersichtsseite zu verlassen.

Verwendet man nun mehrere Seiten, legt man also zunächst die Sprachwahl lahm.

Ich frage mich, ob es für derartige Fälle eine "Best Practice" gibt.

Schöne Grüße

Julius Müller

0 Kudos

Hallo Herr Müller,

für meine beschriebene Lösung wären in der Tat mehrere Strukturseiten notwendig.

Wenn ich ihr Problem richtig verstehe sollen also auf der gleichen Seite je nach Sprachreiter unterschiedliche Märkte angezeigt werden.

Eine Möglichkeit das zu erreichen wäre dem Markt eine Fremdschlüsselbeziehung (Language) hinzuzufügen, die dann z.B. auf "DE" oder "EN" gesetzt wird, analog zu den Sprachkürzeln der Sprachkanäle.

Im Query kann man dann eine Abfrage in folgender Art machen:

<QUERY entityType="Market">

          <EQ attribute="language.name" datatype="java.lang.String" value="%lang%"/>

</QUERY>

Der Platzhalter %lang% wird dann bei der Generierung durch das aktuelle Sprachkürzel ersetzt, so dass auf der DE-Seite alle Märkte mit dem Fremdschlüsselattribut "DE" erscheinen und auf "EN" dann analog mit "EN". Das Szenario lässt sich natürlich in beliebiger Weise erweitern und kombinieren.

Viele Grüße

Jörg Stephan

Hallo Herr Stephan,

vielen dank für Ihre Antwort und entschuldigen Sie bitte die späte Rückmeldung. Ihr Vorschlag geht auf jeden Fall in die richtige Richtung! Mann muss es irgendwie über die Datenbank abbilden.

Für unseren Anwendungsfall müsste die Abfrage aber umgekehrt lauten. Nochmal zur aktuellen Version:

  • News sind einer Sprache (bzw. einem Markt) zugeordnet (Combobox #global.language).
  • Im Normalfall werden alle News der aktuellen Sprache ausgegeben.
  • Es gibt jedoch den Fall, dass die angezeigten News mit denen einer anderen Sprache gemischt werden sollen.

Normalerweise würde ich nun hierfür eine weitere Tabelle anlegen in der die aktuelle Sprache, die Ziel-Sprache und z.B. eine sekundäre bzw. Fallback-Sprache angegeben sind. Zum Beispiel für Kanada:

CA, EN, FR

...bedeutetet im Markt Kanada würden die englischen News sowie die französischen News angezeigt. Mit normalem SQL könnte man also die aktuelle Sprache/Markt auswählen und die News deren Sprache einer der beiden Zielsprachen entspricht dazu "joinen".

Wie lässt sich das in FirstSpirit bzw. über dessen Abfragesprachen realisieren?

(Am Rande sei noch erwähnt, dass die Begriffe Sprache und Markt hier synonym verwendet werden. Im angesprochenen Projekt wurden für alle Ziel-Märkte entsprechende Sprachvarianten angelegt. Master-Sprache jedoch ist Englisch.)

Vielen Dank und beste Grüße

Julius Müller

0 Kudos