À un moment donné, j'ai trouvé la nécessité de modifier une requête SQL générée par Views, à la fin j'ai views_pre_execute
remplacé et modifié la requête pour cette vue spécifique.
Cela ressemble à un vilain piratage pour moi et je me demande s'il y a une façon plus élégante et maintenable de le faire. L'idéal serait un moyen qui me permettrait de modifier directement la requête à partir de l'interface utilisateur des vues.
Réponses:
Vous pouvez également utiliser
hook_views_query_alter()
pour modifier la requête avant son exécution. Je pense que cela est similaire àhook_views_pre_execute
, mais facilite la modification de la requête. Vous avez essentiellement accès à chaque partie de la requête via un tableau à clés. Je n'ai pas trouvé beaucoup de documentation officielle, mais il y en a un assez bon exemple sur https://www.appnovation.com/blog/using-hook-views-query-alter . C'est également l'approche que j'ai dû utiliser pour corriger un bogue de date dans le module Calendrier.la source
hook_views_pre_execute()
d'un module personnalisé simple.En général, cela dépend de votre cas d'utilisation.
Si vous voulez avoir un champ / filtre / argument qui devrait se comporter d'une certaine manière, il est recommandé d'écrire un gestionnaire pour cela. Voir l'aide avancée des vues pour plus d'informations.
Si vous souhaitez modifier certaines parties de la requête, vous pouvez également utiliser hook_views_query_alter () . Le mauvais côté,
hook_views_query_alter()
c'est que vous ne pouvez pas vraiment réutiliser le code là-bas.Il s'agit de l'exemple de code illustré dans la documentation. Il donne un exemple de ce que le crochet peut faire.
la source
J'ai utilisé le
hook_views_query_alter()
pour modifier une requête mysql de vues. L'exemple suivant est testé sous Drupal 7 avec7.x-3.0
, il ajoute uneORDER BY
clause personnalisée à la requête:la source
Je ne sais pas si vous pouvez directement changer le sql, mais vous pouvez écrire votre propre gestionnaire de champs et créer votre propre requête.
la source