Comment supprimer les doublons dans les vues Drupal avec les relations de taxonomie
Lorsque l'on travaille avec Drupal, l'un des outils les plus puissants à notre disposition est Views. Il offre une manière flexible de présenter le contenu, surtout lorsque le contenu est associé à des taxonomies. Cependant, nous rencontrons parfois un problème ennuyeux : les doublons. J'ai personnellement été confronté à ce défi aujourd'hui.
Le Problème :
J'ai créé une vue Drupal nommée 'ressources'. Dans cette vue, j'affiche des éléments ainsi que leurs termes de taxonomie associés, grâce aux relations que j'ai établies. J'ai également activé des filtres de taxonomie exposés, permettant aux utilisateurs de filtrer facilement le contenu. Cependant, j'ai remarqué un problème : certains éléments apparaissent plusieurs fois car ils sont liés à plusieurs termes de taxonomie.
J'ai essayé les options "Distinct" et "Aggregate" dans Drupal Views, dans l'espoir d'une solution rapide. Cependant, elles n'ont pas résolu le problème. Donc, après quelques recherches, j'ai trouvé une solution qui a fonctionné, que je vais partager ci-dessous.
Comment Corriger :
- Ajouter un identifiant unique à chaque élément :
Tout d'abord, allez dans votre vue 'ressources' dans Drupal. Ajoutez le champContenu : id
à la vue. - Modifier la requête de la vue :
Implémentez un hook personnalisé pour modifier la requête de la vue. Cela garantira que les résultats sont regroupés par l'ID unique du contenu.
/**
* Implémente hook_views_query_alter().
*/
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
// Cibler la vue 'resources'.
if ($view->id() == 'resources') {
// Ajouter le champ nid avec une fonction groupby.
$query->addField('node_field_data', 'nid', '', ['function' => 'groupby']);
// Grouper les résultats par ID de nœud.
$query->addGroupBy('node_field_data.nid');
}
}
En termes simples :
Ce que nous faisons ici est simple. Nous demandons à Drupal de regarder chaque entrée de notre vue et de les regrouper par leur ID de contenu unique. De cette façon, même si un élément de contenu est lié à plusieurs termes de taxonomie et apparaîtrait normalement plusieurs fois, il n'apparaîtra désormais qu'une seule fois.
Bon débogage !