Comment éliminer les doublons d'une vue avec Drupal (views)

J'ai utilisé une vue (module views) pour afficher une liste de critères. Mais ces critères correspondaient à un champ CCK. Je n'ai donc pas pu utiliser la fonction "distinct", avec le module views cette fonction ne porte que sur le "nid". J'ai recherché des modules me permettant d'utiliser la clause "group by" de la requête, malheureusement les seuls modules que j'ai trouvé ne pouvait pas l'appliquer au champs mais seulement aux arguments de la vue.

J'ai trouvé une astuce grâce au site drupalfr.org, j'ai un peu modifié la solution proposée par le module de Stephen Musgrave. J'ai retiré la condition sur "current_display" car je voulais que le traitement s'effectue systématiquement sur ma vue.

Le module s'appelle "viewsremoveduplicates" il suffit donc de créer les deux fichiers "viewsremoveduplicates.info" et "viewsremoveduplicates.module" dans un dossier "viewsremoveduplicates" placé dans le dossier sites/all/modules de 'linstallation de Drupal.
Voici le contenu des deux fichiers :

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 = 6.x
dependencies = views


viewsremoveduplicates.module :
function viewsremoveduplicates_views_pre_render(&$view)
{
$used_nids = array();

if ($view->name == 'block_event_dpt')
{

foreach ($view->result as $row)
{
if (!in_array($row->node_data_field_event_dpt_field_event_dpt_value , $used_nids))
{
$new_view_result = $row;
$used_nids = $row->node_data_field_event_dpt_field_event_dpt_value ;
}
}

$view->result = $new_view_result;

}
}

J'applique le traitement seulement pour la vue que je désire, dans ce cas elle s'appelle "block_event_dpt".
Le champ que je sélectionne porte le nom "node_data_field_event_dpt_field_event_dpt_value".
Vous devez modifier ces valeurs afin qu'elle conviennent à votre cas.

La prochaine fois je ferais un module sans utiliser views !

Vus : 1157
Publié par 4LW : 25