В какой-то момент я обнаружил необходимость изменить запрос SQL, сгенерированный представлениями, в конце я переопределил views_pre_execute
и изменил запрос для этого конкретного представления.
Это похоже на уродливый хак для меня, и мне интересно, есть ли более элегантный и удобный способ сделать это. Идеальный вариант - это способ, позволяющий мне напрямую изменять запрос из пользовательского интерфейса Views.
Ответы:
Вы также можете использовать
hook_views_query_alter()
для изменения запроса перед его выполнением. Я думаю, что это похоже наhook_views_pre_execute
, но облегчает изменение запроса. Вы в основном получаете доступ к каждой части запроса через массив ключей. Я не нашел много официальной документации, но есть хороший пример на https://www.appnovation.com/blog/using-hook-views-query-alter . Это также подход, который я должен был использовать, чтобы исправить ошибку даты в модуле Календарь.источник
hook_views_pre_execute()
простого пользовательского модуля.В целом это зависит от вашего варианта использования.
Если вы хотите иметь поле / фильтр / аргумент, который должен вести себя определенным образом, рекомендуется написать обработчик для него. См. Расширенную справку представлений для получения дополнительной информации.
Если вы хотите изменить некоторые части запроса, вы также можете использовать hook_views_query_alter () . Плохая вещь в
hook_views_query_alter()
том, что вы не можете действительно использовать код там.Это пример кода, показанного в документации. Это дает пример того, что может сделать крюк.
источник
Я использовал
hook_views_query_alter()
для изменения представления MySQL запрос. Следующий пример протестирован под Drupal 7 с7.x-3.0
, он добавляет пользовательскоеORDER BY
предложение к запросу:источник
Я не знаю, можете ли вы напрямую изменить sql, но вы можете написать свой собственный обработчик полей и создать свой собственный запрос.
источник