Em algum momento, descobri a necessidade de modificar uma consulta SQL gerada pelo Views, no final, views_pre_execute
substituí e alterei a consulta para essa exibição específica.
Isso parece um truque feio para mim e me pergunto se existe uma maneira mais elegante e sustentável de fazer isso. Ideal seria uma maneira que me permitisse modificar diretamente a consulta na interface do usuário do Views.
Respostas:
Você também pode usar
hook_views_query_alter()
para alterar a consulta antes de executá-la. Eu acho que isso é semelhantehook_views_pre_execute
, mas facilita a modificação da consulta. Você basicamente obtém acesso a cada parte da consulta por meio de uma matriz com chave. Não encontrei muita documentação oficial, mas há um bom exemplo disso em https://www.appnovation.com/blog/using-hook-views-query-alter . Essa também é a abordagem que tive que usar para corrigir um erro de data no módulo Calendário.fonte
hook_views_pre_execute()
um módulo personalizado simples.Em geral, isso depende do seu caso de uso.
Se você deseja ter um campo / filtro / argumento que deve se comportar de uma certa maneira, é recomendável escrever um manipulador para ele. Consulte a ajuda avançada de visualizações para obter mais informações.
Se você deseja alterar algumas partes da consulta, também pode usar hook_views_query_alter () . A coisa ruim sobre
hook_views_query_alter()
é que você não pode realmente reutilizar o código lá.Este é o código de exemplo mostrado na documentação. Ele fornece um exemplo do que o gancho pode fazer.
fonte
Eu usei o
hook_views_query_alter()
para alterar uma consulta mysql views. O exemplo a seguir é testado no Drupal 7 com7.x-3.0
, ele adiciona umaORDER BY
cláusula personalizada à consulta:fonte
Não sei se você pode alterar diretamente o sql, mas você pode escrever seu próprio manipulador de campo e criar sua própria consulta.
fonte