Drupal 7 : Créer un filtre spécifique pour une view

Posted by on Mai 6, 2013 in Drupal, PHP | No Comments

Le module views de Drupal est une petite merveille qui est incontournable sur la plupart des sites. Dans l’interface graphique du module, il existe tous un tas de filtres permettant d’affiner les critères d’affichage du contenu, mais il arrive que ça ne suffisse pas. Dans le cas ou l’on a besoin de créer un filtre spécifique pour une view, il faut mettre les mains dans le code pour modifier la requêtes de la view comme bon nous semble.

1 – Le hook view data

La première étape est de signaler à son module qu’il va devoir utiliser l’API de views. Cela se fait  très simplement grâce au hook views api :

Ensuite il faut créer un fichier MY_MODULE.views.inc dans le dossier de son module pour déclarer les nouveaux filtres, et utiliser le hook view data à l’intérieur:

Ce bout de code déclare un nouveau filtre nommé My Filter dans le groupe Global, en revanche, le code du filtre en lui même doit être contenu dans ce que l’on appelle un ‘handler’. Ici, le handler spécifié est : My_MODULE_handler_filter.
Pour que Drupal détecte automatiquement votre handler, il faut créer un dossier handler dans votre module pour y placer votre fichier .inc (ici My_MODULE_handler_filter.inc).

2 – Le Handler

Le handler est ce qui va contenir le code du filtre.
On doit créer une nouvelle classe qui hérite de la classe views_handler_filter et écrire une fonction query qui va nous permettre de modifier la requête de la view.

Dans la fonction query, je modifie la requête pour qu’elle ne me renvoie que les nœuds appartenant à l’utilisateur actuel.
Pou utiliser ce nouveau filtre, il suffit de se rendre dans l’interface de view et de l’ajouter comme tout autre filtre.

Ceci n’est qu’un tout petit exemple de ce qu’on peut faire grâce aux views, je vous conseille d’en apprendre le plus possible sur l’utilisation de ce module indispensable.