←Terug naar het blog

Hoe dubbele items te verwijderen in Drupal Views met taxonomie-relaties

2023-08-10‱2 minuten leestijd

Bij het werken met Drupal is een van de krachtigste tools die we tot onze beschikking hebben Views. Het biedt een flexibele manier om inhoud te presenteren, vooral wanneer inhoud is gekoppeld aan taxonomieën. Soms komen we echter een vervelend probleem tegen: duplicaten. Ik heb deze uitdaging vandaag persoonlijk ondervonden.

Het Probleem:
Ik heb een Drupal View met de naam 'resources' gemaakt. In deze view toon ik items samen met hun bijbehorende taxonomie-termen, dankzij de relaties die ik heb ingesteld. Ik heb ook blootgestelde taxonomie-filters ingeschakeld, waardoor gebruikers gemakkelijk door de inhoud kunnen filteren. Ik merkte echter een probleem op: sommige items verschijnen meerdere keren omdat ze aan verschillende taxonomie-termen zijn gekoppeld.

Ik heb de opties 'Distinct' en 'Aggregate' in Drupal Views geprobeerd, in de hoop op een snelle oplossing. Ze hebben het probleem echter niet opgelost. Na wat onderzoek heb ik een oplossing gevonden die werkte, die ik hieronder zal delen.

Hoe het op te lossen:

  1. Voeg een unieke identifier toe aan elk item:
    Ga eerst naar uw 'resources'-view in Drupal. Voeg het veld Content: id toe aan de view.
  2. Wijzig de query van de view:
    Implementeer een aangepaste hook om de query van de view aan te passen. Dit zorgt ervoor dat resultaten worden gegroepeerd op de unieke ID van de inhoud.
/**
 * 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 simpele woorden:
Wat we hier doen is simpel. We vertellen Drupal om naar elk item in onze view te kijken en ze te groeperen op hun unieke inhouds-ID. Op deze manier, zelfs als een stuk inhoud gerelateerd is aan meerdere taxonomie-termen en normaal gesproken meer dan eens zou verschijnen, zal het nu slechts één keer worden weergegeven.

Veel debugplezier!