Où et comment placer hook_views_query_alter ?

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai besoin d'altérer une requête d'une vue. Ma question ne porte pas sur le contenu de la fonction hook_query_alter mais sur son implémentation.

Je ne sais pas exactement où la placer pour qu'elle soit auto-loadée. La doc dit :

This hook should be placed in MODULENAME.views.inc and it will be auto-loaded. MODULENAME.views.inc must be in the directory specified by the 'path' key returned by MODULENAME_views_api(), or the same directory as the .module file, if 'path' is unspecified.

Pour l'instant, j'ai compris qu'il fallait créer un module particulier pour altérer les requêtes des vues. Ce module contient en plus des fichiers habituels un .views.inc qui contiendra le hook_views_query_alter. Pour que la vue reconnaisse le module, il faut aussi utiliser le hook_views_api() dans le .module.

J'ai donc créé un nouveau module qui contient le .info basique, le .module avec la fonction hook_views_api() et le .views.inc contenant le hook_views_query_alter.

Voici à quoi ressemble mon .module, j'ai un doute sur le fait de savoir si on doit mettre l'extension du fichier ou pas pour le deuxième argument de drupal_get_path :

function modulename_views_api() {
    return array(
        'api' => 3,
        'path' => drupal_get_path('module', 'modulename.views.inc') . '/inc/',
    );
}

Après avoir glissé un die() dans hook_view_query_alter et vidé les caches, le chargement de la page contenant la vue en question s'affiche...donc je suppose que mon module n'est pas pris en compte.

Qu'ai-je fait de travers ? Quelqu'un aurait plus de précisions sur la manière d'implémenter ce hook ?

a+

Forum : 
Version de Drupal : 

Bonjour,

J'ai le même soucis sous Drupal 8, c'est ma première tentative de faire un hook sur une vue.

As tu trouvé une solution ?

Merci.