W pewnym momencie zauważyłem potrzebę zmodyfikowania zapytania SQL wygenerowanego przez Views, w końcu przesłoniłem views_pre_execute
i zmieniłem zapytanie dla tego konkretnego widoku.
Wydaje mi się to brzydkim hackiem i zastanawiam się, czy istnieje bardziej elegancki i łatwy do utrzymania sposób. Idealny byłby sposób, który pozwoliłby mi bezpośrednio modyfikować zapytanie z interfejsu użytkownika Widoków.
Odpowiedzi:
Możesz także użyć
hook_views_query_alter()
do zmiany zapytania przed jego uruchomieniem. Myślę, że jest to podobne dohook_views_pre_execute
, ale ułatwia modyfikację zapytania. Zasadniczo uzyskujesz dostęp do każdej części zapytania za pomocą tablicy z kluczami. Nie znalazłem wiele oficjalnej dokumentacji, ale jest całkiem dobry przykład na https://www.appnovation.com/blog/using-hook-views-query-alter . Takie podejście musiałem zastosować, aby naprawić błąd daty w module Kalendarz.źródło
hook_views_pre_execute()
prosty moduł niestandardowy.Zasadniczo zależy to od przypadku użycia.
Jeśli chcesz mieć pole / filtr / argument, które powinny zachowywać się w określony sposób, zalecamy napisanie dla niego procedury obsługi. Aby uzyskać więcej informacji, zobacz zaawansowaną pomoc widoków.
Jeśli chcesz zmienić niektóre części zapytania, możesz także użyć hook_views_query_alter () . Złe
hook_views_query_alter()
jest to, że tak naprawdę nie można ponownie użyć kodu.To jest przykładowy kod pokazany w dokumentacji. Daje przykład tego, co potrafi hak.
źródło
Użyłem
hook_views_query_alter()
do zmiany kwerendy mysql widoków. Poniższy przykład jest testowany pod Drupalem 77.x-3.0
, dodaje niestandardowąORDER BY
klauzulę do zapytania:źródło
Nie wiem, czy możesz bezpośrednio zmienić kod SQL, ale możesz napisać własną funkcję obsługi pola i stworzyć własne zapytanie.
źródło