Torna al blog

Come Rimuovere Duplicati nelle Viste di Drupal con Relazioni di Tassonomia

2023-08-102 min di lettura

Quando si lavora con Drupal, uno degli strumenti più potenti a nostra disposizione sono le Viste. Offrono un modo flessibile per presentare i contenuti, specialmente quando i contenuti sono associati a tassonomie. Tuttavia, a volte ci imbattiamo in un problema fastidioso: i duplicati. Personalmente ho affrontato questa sfida oggi.

Il Problema:
Ho creato una Vista di Drupal chiamata ‘risorse’. In questa vista, visualizzo elementi insieme ai loro termini di tassonomia associati, grazie alle relazioni che ho stabilito. Ho anche abilitato filtri di tassonomia esposti, consentendo agli utenti di filtrare facilmente i contenuti. Tuttavia, ho notato un problema: alcuni elementi appaiono più volte perché sono collegati a diversi termini di tassonomia.

Ho provato le opzioni “Distinti” e “Aggrega” nelle Viste di Drupal, sperando in una soluzione rapida. Tuttavia, non hanno risolto il problema. Quindi, dopo alcune ricerche, ho trovato una soluzione che ha funzionato, che condividerò di seguito.

Come Risolvere:

  1. Aggiungere un Identificatore Univoco a Ciascun Elemento:
    Innanzitutto, vai alla tua vista ‘risorse’ in Drupal. Aggiungi il campo Contenuto: id alla vista.
  2. Modificare la Query della Vista:
    Implementa un hook personalizzato per modificare la query della vista. Questo garantirà che i risultati siano raggruppati per l'ID univoco del contenuto.
/**
 * Implements hook_views_query_alter().
 */
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
  // Target the 'resources' view.
  if ($view->id() == 'resources') {
    // Add the nid field with a groupby function.
    $query->addField('node_field_data', 'nid', '', ['function' => 'groupby']);
    // Group results by node ID.
    $query->addGroupBy('node_field_data.nid');
  }
}

In Parole Semplici:
Quello che stiamo facendo qui è semplice. Diciamo a Drupal di guardare ogni voce nella nostra vista e raggrupparle per il loro ID di contenuto univoco. In questo modo, anche se un contenuto è correlato a più termini di tassonomia e normalmente apparirebbe più di una volta, ora verrà visualizzato solo una volta.

Buon debugging!