Comment supprimer les doublons dans les vues pour des champs avec valeurs multiples

Comme j'ai été confronté à ce problème et que je suis tombé après quelques recherche sur un post de blog qui résoud le problème des doublons dans les vues pour des champs avec valeurs multiples (dans mon cas comme celui de l'auteur, un évévenement avec répétition) j'en profite pour partager avec vous ce petit module qui n'est pas sur drupal.org.

Le billet (et le code du module) se trouve ici :
http://capellic.com/blog/cure-duplicate-nodes-in-a-view

Je traduit la partie qui vous intéresse :

Tout d'abord, créez un répertoire nommé 'viewsremoveduplicates' dans le répertoire sites/all/modules/

Vous allez devoir créer deux fichiers :

1) viewsremoveduplicates.info

Code ici : http://capellic.com/blog/cure-duplicate-nodes-in-a-view

2) viewsremoveduplicates.module

Code ici : http://capellic.com/blog/cure-duplicate-nodes-in-a-view

Je n'ai pas inclu le code dans ce post parceque l'auteur a déjà fait une MAJ de celui-ci et je pense qu'il est plus pertinent de pointer vers son site.

Voilà j'espère que cela vous aura rendu un aussi grand service qu'à moi !

Merci à Stephen Musgrave !!!


ATTENTION : Ce module résoud le problème des doublons mais comme indiqué dans le billet de Stephen, les paramètres "limit" et "paging" sont affectés : i.e Views calcule le nombre d'éléments affichés sans tenir compte des doublons supprimés... Il serait intéressant que son module soit intégré dans Views afin de résoudre ce problème de doublon...

Je me suis retrouvé aussi bloqué par ce problème.

Voici ma solution pour drupal 7 et views 7.x-3.3, j'ai adapté avec ce que j'ai trouvé comme doc pour qu'il affiche bien le bon nombre d'éléments par page (soyez indulgent, j'ai que 2 semaines sur ce cms):

Pour viewsremoveduplicates.info :

name = Views Remove Duplicates
description = Removes duplicate nodes. Requires editing the module file
to identify the views you want to affect.
package = "Views"
core = 7.x
dependencies[] = views

Pour viewsremoveduplicates.module :

<?php

function viewsremoveduplicates_views_pre_execute(&$view){

  if($view->name=="recherche_dessin") {
      $view->build_info['query']->groupBy('nid');
      drupal_set_message($view->build_info['query']);  
  }

}

Bien sur, $view->name vous le remplacez par les noms des views que vous voulez trier, et groupBy pour trier le champ qui vous interesse...