Search the FirstSpirit Knowledge Base
Hallo,
damit Detailseiten für die Ausgabe von einzelnen News-Datensätzen nicht in alle Ewigkeit stets neu generiert werden, möchte ich die Abfrage für die auszuwählenden Datensätze um ein maximales Alter erweitern.
Die bisherige Abfrage lautet so:
<QUERY entityType="news">
<FILTERPARAM parameter="id" datatype="java.lang.Integer" value="833"/>
<AND>
<EQ attribute="rubrikenList.fs_id" parameter="id"/>
<LTE attribute="datum" datatype="de.espirit.common.Now" value="1288341564861"/>
<OR>
<IS_NULL attribute="datum_archivierung"/>
<GT attribute="datum_archivierung" datatype="de.espirit.common.Now" value="1288341564861"/>
</OR>
</AND>
</QUERY>
Diese Abfrage soll so erweitert werden, dass News, die älter als ein Jahr sind, unabhängig vom (teilweise leeren) Archivierungsdatum, nicht mehr ausgewählt werden, also ungefähr so:
<QUERY entityType="news">
<FILTERPARAM parameter="id" datatype="java.lang.Integer" value="833"/>
<FILTERPARAM parameter="Datum" datatype="java.util.Date" value="#global.now-31536000000"/>
<AND>
<EQ attribute="rubrikenList.fs_id" parameter="id"/><LTE attribute="datum" datatype="de.espirit.common.Now" value="1288341564861"/>
<GT attribute="datum" parameter="Datum"/><OR>
<IS_NULL attribute="datum_archivierung"/>
<GT attribute="datum_archivierung" datatype="de.espirit.common.Now" value="1288341564861"/>
</OR>
</AND>
</QUERY>
Wie zu erwarten war, funktioniert "#global.now-31536000000" nicht. Wie kann ich diese Abfrage definieren?
Wohlgemerkt, es handelt es sich nicht um einen Query in einem ContentSelect, sondern dieser wird beim Datenbankschema definiert, um im Bereich "Daten" der Detailseite verwendet zu werden.
Hallo Herr Thalmann,
ich fürchte, dass das nur "indirekt" funktionieren wird. Und zwar indem Sie in dem entsprechenden Auftrag ein Skript einhängen, welches in den entsprechenden Queries die untere Grenze auf "vor einem Jahr" setzt.
Aber vielleicht hat ja jemand eine bessere Idee?
Viele Grüße aus Dortmund,
Holger Höbbel
Jetzt hab ich's gelöscht, obwohl es vllt. trotzdem hilft.
Also, hier nochmal neu!
Mir hat das hier geholfen. Vllt. ist das bei Ihrem Fall auch anwendbar.
Grüße!
Nein, das ist auf meinem Fall leider nicht anwendbar.
<CMS_VALUE_PARAM/> kann nur in einer ContentSelect-Funktion verwendet werden, weil es außerhalb von <QUERY>...</QUERY> liegen muss.
Trotzdem danke für den Tipp!
Aber Sie können doch
<FILTERPARAM parameter="Datum" datatype="java.util.Date" value="#global.now-31536000000"/>
definieren.
Ich würde versuchen "#startdate + (-365 * 24 * 60 * 60 * 1000)" an Stelle von "#global.now -
31536000000
" zu verwenden. Oder ist "startdate" in dem Context nicht verfügbar? Auf einen Versuch kann man es ankommen lassen, oder?
Nein, das funktioniert leider nicht. Beim Speichern erscheint ein Fehler: "For input string: "#startdate"".
Die Systemobjekte lassen sich nur bei <CMS_VALUE_PARAM/> ansprechen, jedoch nicht bei <FILTERPARAM/>.
Hallo Herr Höbbel,
ich fürchte, dass das nur "indirekt" funktionieren wird.
das habe ich befürchtet.
Ihren Vorschlag, in den Generierungsauftrag ein Skript einzuhängen, habe ich noch nicht verstanden. Was müsste ich tun, um die Queries über ein Skript nachträglich zu verändern?
Einen ersten Ansatz finden Sie unter javascript:;.
Funktioniert denn #global.now ohne Berechnungsversuch hinten dran ? Dann würde ich noch als Möglichkeit sehen, den Datensätzen ein "gültig bis" zu verpassen. Das ist zwar auch nicht schön und erfordert Nachpflege sämtlicher Datensätze, aber könnte technisch besser funktionieren.
In ihrer ersten Abfrage verwenden Sie bereits eine solche Überprüfung:
<LTE attribute="datum" datatype="de.espirit.common.Now" value="1288341564861"/>