Wie filtert man mit Views eine Liste von Nodes nach Monaten ?

am 14.01.2012 - 10:27 Uhr in
Hallo ihr Lieben,
genauere Problembeschreibung:
Es gibt einen Event, z.b. Heiligabend 2011, der findet natürlich am 24.12.2011 statt.
Dieser Event wird in einer "Eventliste" (bestehend aus Event-Nodes) mit dem Datum 24.12.2011 eingetragen (nicht Post-Date sondern ein separates Datum bei Event).
Nun möchte ich die Eventliste nach diesem Event-Datum mit Views filtern.
Das ganze soll nicht tageweise passieren, sondern monatsweise.
Also ich hätte gerne eine Select-Box
z.B. mit
Januar 2011
Februar 2011
.....
Dezember 2011
und wenn ich Dezember 2011 auswähle, dann sehe ich den Eintrag von Heiligabend in der Eventliste und die anderen Events, die es noch im Dezember gab.
In der Select-Box sollten nur die Monate aufauchen, in denen es überhaupt Events gibt.
Genau an diesem Problem arbeite ich zur Zeit und komme nicht weiter :-(
Folgendermaßen bin ich an die Sache herangegangen.
ich habe ein Computed-Field hergenommen und dort immer aus dem Event-Datum den Monat und das Jahr herausgenommen und in das Computed Field geschrieben.
Aus dem 24.12.2011 wurde dann automatisch Dezember 2011.
Dann wollte ich mit Exposed Filters auf dieses Computed-Field die Eventliste filtern.
Da geht auch ganz problemlos, nur wird mir dieser Exposed-Filter immer als Textbox dargestellt und in die müßte ich dann "Dezember 2011" eingeben. Aber das ist natürlich eine unsinnige Lösung.
Wenn die Eingabe für den Filter an dieser Stelle keine Textbox wäre, sondern eine Select-Box, dann hätte ich genau das, was ich gerne möchte, aber das geht so wohl nicht.
Ein Exposed Filter direkt auf das Event-Datum hat leider immer mindestens zwei Select-Boxen (Jahr und Monat), und außerdem ist des nicht auf die Monate beschränkt, wo es überhaupt Events gibt.
Also das ist auch keine gute Lösung.
Wie kann man denn das machen, das Problem scheint mir nicht besonders exotisch zu sein, ich denke eher, ich mache da grundsätzlich einen Denkfehler.
Update: ich habe auch schon mit Better exposed Filter experimentiert, aber leider brachte dieses Zusatzmodul auch nicht den gewünschten Erfolg.
Man müßte so einen Auswahlfilter (Select-Box) so mit Werten füllen können, wie das bei einer Eingabe-Select-Box auch geht, also z.B. direkt Werte aus einer MySQL-Tabelle auslesen und diese dann in einer Select-Box darstellen.
Ich komme da echt nicht weiter.... :-(
Vielleicht weiß ja jemand Rat :-)
lieben Gruß
Daniela
- Anmelden oder Registrieren um Kommentare zu schreiben
Hat denn keiner eine
am 14.01.2012 - 21:09 Uhr
Hat denn keiner eine Idee...
es brennt mir etwas unter den Nägeln :-)
lieben Gruß
Daniela
Hallo Daniela,du bist mit
am 15.01.2012 - 02:05 Uhr
Hallo Daniela,
du bist mit deiner Vorgehensweise genau auf dem richtigen Weg....
Du mußt nur, wie du schon selbst beschrieben hast, aus dem Textfeld eine Select-Box machen und das geht z.B. so:
Du ergänzt die Funktion XXXXXThemenameXXXX_form_alter(&$form, &$form_state, $form_id) in der template.php (oder halt neu einfügen, wenn es die Funktion noch nicht gibt)
<?php
if ($form_id == 'views_exposed_form') {
$view = &$form_state['view'];
$display = &$form_state['display'];
if ($view->name == 'eventliste' && $display->id == 'page')
{
$form['field_monat_jahr_value']['#type']="select";
$form['field_monat_jahr_value']['#size']=NULL;
$form['field_monat_jahr_value']['#defalut_value']="";
$form['field_monat_jahr_value']['#options']=$options;
}
}
?>
Voraussetzungen:
Deine View heißt eventliste und ist die ein page Display und dein Computed-Field heißt : field_monat_jahr
Dann brauchst du nur noch bei $options die einzelnen Einträge festlegen, die in der Select-Box auftauchen sollen.
@$options
nun einfach die Einträge, die du in dem Computed-Field stehen hast, aus der DB auslesen und dort einfügen.
noch ein Tipp:
ich würde das Computed-Field noch etwas anders füllen, als du es oben vorgeschlagen hast, nämlich:
aus dem Datum für Weihnachten würde ich z.B.
2011-12-24T00:00:00&Dezember 2011 machen.
Dann hast du weiterhin die Möglichkeit, bei Auslesen der Werte aus der DB diese auch zu ordnen, z.B. aufsteigend, was bei deiner Konstellation ja sinnvoll wäre, es ist ja im Wesentlichen ein Datum.
Bei der Select-Box hast du ja immer die Möglichkeit, zwei Werte einzutragen, einmal einen Value, der den bei der SQL-Abfrage deiner View tatsächlich verglichen wird und einem ein Label, was in der Select-Box angezeigt wird. Mit einem "eindeutigen" Trenner (Delimiter) kannst du dann den ausgelesenen Eintrag einfach in zwei Teile splitten und dann den zweiten Teil, also in dem oberen Fall: Dezember 2011 als Label und den gesamten ersten Teil "2011-12-24T00:00:00&Dezember 2011" als Value für die SQL-Abfrage deiner View verwenden.
Das müßte eigentlich ganz gut funktionieren.
liebe Grüße
Berthold
vielen lieben Dank für deine
am 16.01.2012 - 02:03 Uhr
vielen lieben Dank für deine Mühe Berthold.
Ich habe es noch nicht alles verstanden, aber ich werde diesen Weg auf jeden Fall ausprobieren.
Das ist genau die Richtung, die ich auch einschlagen wollte, aber mit dem Abändern des Textfeldes in eine Selectbox, tja, da habe ich gedacht, dass das gar nicht geht.
Auch der Tipp mit dem Sortieren des Computed-Fields ist super. Ich hatte auch schon darüber nachgedacht, wie ich die Einträge wohl sortieren könnte, aber das war erst Punkt 134 auf meiner Problemliste.
Also nochmals vielen vielen Dank. Du hast mir schon so oft geholfen.
So langsam habe ich das Gefühlt, ich schulde dir was :-)
lieben Gruß
Daniela