Argumente mit between
am 31.07.2009 - 18:30 Uhr in
Ich habe einen Inhaltstyp mit einem Feld für eine Jahreszahl.
In einem View sollen nun diejenigen Elemente dieses Typs angezeigt werden, bei denen diese Jahreszahl zwischen zwei durch Argumente zu übergebenden Werten liegt. VIEW/1950/1960 etwa sollte also alle Objekte mit einer Jahreszahl zwischen 1950 und 1960 anzweigen.
Nun kann ich bei den argumenten leider keine anderen Operatoren als = einstellen. Ebensowenig kann ich eine Möglichkeit finden, den Wert eines Arguments in einen Filter zu laden. Weder konnte ich eine einfache Möglichkeit finden, Argumente direkt aus dem Filter heraus zu referenzieren, noch waren meine Versuche, die min und max Werte des Filters aus dem Validierungscode des Arguments heraus zu setzen, von Erfolg gekrönt:
$handler->view->display['default']->filters['field_pub_year_value']['value']['min'] = $argument;
return TRUE;
tut dies ebensowenig wie
$view->display['default']->filters['field_pub_year_value']['value']['min'] = $argument;
return TRUE;
Was mache ich falsch oder welche Möglichkeit habe ich übersehen?
Besten Dank im Voraus.
- Anmelden oder Registrieren um Kommentare zu schreiben
Lösung
am 01.08.2009 - 13:12 Uhr
Um mir schnell selbst zu antworten:
Da der query an der relevanten Stelle im Prozess des Erzeugens eines Views schon fertig zusammengestzt ist, ist die einzige Möglichkeit das Ziel in der hier versuchten Weise zu erreichen, den query direkt zu verändern. Dies ist verhältnismäßig einfach, weil er noch nicht als Zeichenkette, sondern nur als Objekt existiert.
$view->query->where[0]['args'][1] = $argument;
ist daher die Lösung. Ein Problem nur: ändert sich irgendetwas an den Filtern (Reihenfolge, Operator etc.), ändert sich potentiell auch die Nummer des Arguments (hier die 1) und der Code muss manuell angepasst werden.