En algún momento encontré la necesidad de modificar una consulta SQL generada por Vistas, al final anulé views_pre_execute
y cambié la consulta para esa vista específica.
Esto me parece un truco feo y me pregunto si hay una manera más elegante y fácil de hacerlo. Lo ideal sería una forma que me permitiera modificar directamente la consulta desde la IU de Vistas.
Respuestas:
También puede usar
hook_views_query_alter()
para alterar la consulta antes de que se ejecute. Creo que esto es similar ahook_views_pre_execute
, pero hace que sea más fácil modificar la consulta. Básicamente obtiene acceso a cada parte de la consulta a través de una matriz con clave. No he encontrado mucha documentación oficial, pero hay un buen ejemplo en https://www.appnovation.com/blog/using-hook-views-query-alter . Este es también el enfoque que tuve que usar para corregir un error de fecha en el módulo Calendario.fuente
hook_views_pre_execute()
en un módulo personalizado simple.En general, esto depende de su caso de uso.
Si desea tener un campo / filtro / argumento que debería comportarse de cierta manera, se recomienda escribir un controlador para él. Consulte la ayuda avanzada de vistas para obtener más información.
Si desea cambiar algunas partes de la consulta, también puede usar hook_views_query_alter () . Lo malo
hook_views_query_alter()
es que realmente no se puede reutilizar el código allí.Este es el código de ejemplo que se muestra en la documentación. Da un ejemplo de lo que puede hacer el gancho.
fuente
He usado el
hook_views_query_alter()
para modificar una consulta mysql de vistas. El siguiente ejemplo se prueba en Drupal 7 con7.x-3.0
, agrega unaORDER BY
cláusula personalizada a la consulta:fuente
No sé si puede cambiar directamente el sql, pero podría escribir su propio controlador de campo y elaborar su propia consulta.
fuente