Irgendwann stellte ich fest, dass eine von Views generierte SQL-Abfrage views_pre_execute
geändert werden musste. Am Ende habe ich die Abfrage für diese bestimmte Ansicht überschrieben und geändert.
Das fühlt sich für mich wie ein hässlicher Hack an und ich frage mich, ob es einen eleganteren und wartbareren Weg gibt, das zu tun. Ideal wäre eine Möglichkeit, mit der ich die Abfrage über die Ansichts-Benutzeroberfläche direkt ändern kann.
Antworten:
Sie können
hook_views_query_alter()
die Abfrage auch ändern, bevor sie ausgeführt wird. Ich denke, dass dies ähnlich isthook_views_pre_execute
, aber es einfacher macht, die Abfrage zu ändern. Grundsätzlich erhalten Sie Zugriff auf jeden Teil der Abfrage über ein verschlüsseltes Array. Ich habe nicht viel offizielle Dokumentation gefunden, aber es gibt ein ziemlich gutes Beispiel dafür unter https://www.appnovation.com/blog/using-hook-views-query-alter . Dies ist auch der Ansatz, den ich verwenden musste, um einen Datumsfehler im Kalendermodul zu beheben.quelle
hook_views_pre_execute()
einem einfachen benutzerdefinierten Modul.Im Allgemeinen hängt dies von Ihrem Anwendungsfall ab.
Wenn Sie ein Feld / Filter / Argument haben möchten, das sich auf eine bestimmte Weise verhalten soll, wird empfohlen, einen Handler dafür zu schreiben. Weitere Informationen finden Sie in der erweiterten Hilfe der Ansichten.
Wenn Sie einige Teile der Abfrage ändern möchten, können Sie auch hook_views_query_alter () verwenden . Das Schlimme daran
hook_views_query_alter()
ist, dass Sie den Code dort nicht wirklich wiederverwenden können.Dies ist der in der Dokumentation gezeigte Beispielcode. Es gibt ein Beispiel dafür, was der Hook kann.
quelle
Ich habe die verwendet
hook_views_query_alter()
, um eine Ansicht MySQL-Abfrage zu ändern. Das folgende Beispiel wurde unter Drupal 7 mit getestet7.x-3.0
und fügtORDER BY
der Abfrage eine benutzerdefinierte Klausel hinzu :quelle
Ich weiß nicht, ob Sie die SQL direkt ändern können, aber Sie könnten Ihren eigenen Feld-Handler schreiben und Ihre eigene Abfrage erstellen.
quelle