Verständnisproblem mit hook_views_query_alter

am 06.03.2012 - 17:06 Uhr in
Hallo zusammen,
um ein anderes Problem lösen zu können, wollte ich jetzt tiefer in die API von views einsteigen...entweder finde ich nicht die richtigen
Quellen oder aber es gibt noch nicht viele Beschreibungen MIT Beispielcode. Ich bin ehrlich und muss gestehen das sich das Thema
Hooks mir noch nicht ganz erschließt. Jedenfalls habe ich jetzt mal angefangen ein View von Hand in einem eigenem Modul zu erstellen.
Dies ist mir gelungen jetzt wollte ich ein bissl mit views_query_alter die Ausgabe manipulieren...allerdings weiß ich nicht wie ich z.B. die
WHERE-Klausel einbauen muss...hier mal mein bisheriger (stümperhafter) Code:
function buschcsv_views_query_alter(&$view, &$query) {
// example code here
if ($view->name == 'busch_csv') {
//$view->query->add_where("kdnr = '60620600'",1);
//$query->where[0]['kdnr'][] = '60620600';
$query->where[0]['args'][0] = "kdnr = '60620600'";
}
Ich habe vieles aus dem Inet versucht so einzubauen wie ich es verstanden habe..wie man sieht ist das anscheinend nicht viel.
Danke
Ati
- Anmelden oder Registrieren um Kommentare zu schreiben
Und was genau ist jetzt deine
am 06.03.2012 - 18:54 Uhr
Und was genau ist jetzt deine Frage?
Um das Ding besser zu verstehen, solltest du dir vielleicht mal Devel installieren und in deinem hook_views_query_alter ein
dsm($query)
machen, dann siehst du mal, wie das aufgebaut ist.Nun ich möchte zu Testzwecken
am 06.03.2012 - 19:24 Uhr
Nun ich möchte zu Testzwecken das view auf die angegeben Kundennummer einschränken. Devel ist installiert...werde Deinen Hinweis dann morgen mal testen.
Ati
So ich habe jetzt mit dsm mal
am 07.03.2012 - 16:24 Uhr
So ich habe jetzt mit dsm mal den Aufbau untersucht und die function sieht jetzt wie folgt aus
function buschcsv_views_query_alter(&$view, &$query) {
// example code here
if ($view->name == 'busch_csv') {
$query->where[0]['kdnr'][0] = '60620600';
dsm($query);
}
Danach nochmal per Devel untersucht und es sieht dort jedenfalls richtig aus:
#
where (Array, 1 element)
0 (Array, 1 element)
kdnr (Array, 1 element)
0 (String, 8 characters ) 60620600
Es werden mir aber trotzdem noch alle Kunden angezeigt...wo mache ich noch einen Fehler?
Ati
Hab es jetzt durch einen
am 07.03.2012 - 16:51 Uhr
Hab es jetzt durch einen wirklich dummen Zufall hinbekommen. Die entsprechende Codezeile muss wie folgt lauten:
$view->query->add_where('advf_filter','kdnr','60620600');
Das mit dem advf_filter war pures Glück. Ich finde die Doku diesbezüglich naja möchte jetzt keine Kraftausdrücke gebrauchen.
Kann mir das mal jemand vernünftig erklären?
Ati