Avoir un comportement de facettes sur des filtres exposés de vue

Créé le 25/01/2015

Dernière mise à jour le 25/01/2015

Ayant récemment testé le module Views Reference Filter, je me suis rendu compte que celui-ci permet d'obtenir un comportement de facettes sur des filtres exposés de vues. Le module manque de documentation qui est en cours d'élaboration dans une issue Drupal.org il est donc difficile de comprendre où il agit.

J'utilise ici le terme "comportement de facette" dans le sens où il est possible d'affiner les options des filtres en fonction du choix d'autres filtres de manière à pouvoir toujours proposer un résultat.

Principe

Il est basé sur le module Entity reference qui permet d'avoir un type de champ entityreference permettant de faire référence à n'importe quelle type d'entité. Mais le module Entity reference fournit également un affichage de vue (view display) "entityreference".

Views Reference Filter ajoute un nouveau type de filtre de vues à tous les champs référence (entityreference, term reference, etc.). Avec ce nouveau filtre, vous pouvez choisir un affichage de vue de type entityreference dont les résultats seront les valeurs possibles du filtre exposé. Et il est possible de passer en argument de l'affichage entityreference des arguments ET des valeurs de filtres de la vue.

Alors oui, il faut être à l'aise avec les notions de views et d'entityreference, notamment les "relations" et les "filtres contextuels" pour comprendre ce qui se passe.

Exemple

Sur les captures écrans, vous pouvez voir un exemple.

Voici les configurations des vues au cas où :

Un type de contenu de base avec 3 champs "term reference" pointant vers 3 vocabulaires distincts.

J'utilise un contexte basique pour placer un bloc de vue sur les pages de terme de taxonomie du vocabulaire 1.

Dans le bloc de vue, il y a :

  • un filtre contextuel sur le champ vocabulaire 1 pour que cela filtre sur le terme du vocabulaire 1 que l'on est en train de consulter.
  • 2 filtres exposés utilisant 2 affichages entityreferences (ces affichages sont symétriques donc je n'en détaillerai qu'un seul à chaque fois), je leur passe en argument :
    • l'argument du bloc "!1" qui correspond au tid du terme de taxonomie actuellement regardé, mais j'ai l'impression que l'argument passe mal donc dans les affichage entityreference je met comme valeur par défault le tid à partir de l'URL.
    • la valeur de l'autre filtre exposé "[field_vocabulary_3_tid_entityreference_filter]"

Dans les affichages entityreference, précision importante, leur table de base doit être celle du type d'entité servant dans le filtre, ici dans mes filtres exposés se sont des termes de taxonomie donc je dois faire une vue sur des termes de taxonomie :

  • comme on part des termes de taxonomie, il faut une relation vers les noeuds utilisant le vocabulaire de l'affichage
  • avec cette relation on peut obtenir les termes des autres vocabulaires
  • Il faut ensuite ajouter 2 filtres contextuels :
    • un pour le terme de vocabulaire consulté
    • un autre pour le terme de vocabulaire choisi dans l'autre filtre exposé

Que ce soit dans la vue block ou les affichage entityreference, il faut utiliser l'option "distinct" voir même "pure distinct" vu le nombre de jointures. S'agissant d'une vue block, les filtres n'apparaîtront pas s'en utiliser l'option ajax.

Conclusion

J'ai dans un test précédent utilisé un affichage de vue de type EVA, niveau ajax s'était moyen.

Le top serait de pouvoir ajouter un widget de type hierarchical select et là ça répondrait à un besoin que beaucoup de clients ont j'ai l'impression.

Commentaires

Soumis par ftorregrosa le dim, 02/01/2015 - 16:39 - Permalien

Je viens de découvrir et tester le module Views Selective Filters et il permet de faire ce que je détaille dans l'article de manière bien plus simple. Voici un article qui explique comment utiliser le module.

Je n'ai eu aucun problème d'ajax avec une soumission automatique des filtres exposés et l'utilisation d'ajax sur la vue que ce soit une vue page ou une vue block.

En revanche, toujours pas moyen, de faire de la sélection hiérarchique dans une taxonomie.

Ajouter un commentaire