Zurück zum Blog

So entfernen Sie Duplikate in Drupal Views mit Taxonomie-Beziehungen

2023-08-102 Min Lesezeit

Wenn Sie mit Drupal arbeiten, ist Views eines der mächtigsten Werkzeuge, die uns zur Verfügung stehen. Es bietet eine flexible Möglichkeit, Inhalte darzustellen, insbesondere wenn Inhalte mit Taxonomien verknüpft sind. Manchmal stoßen wir jedoch auf ein ärgerliches Problem: Duplikate. Ich persönlich stand heute vor dieser Herausforderung.

Das Problem:
Ich habe eine Drupal View namens 'resources' erstellt. In dieser Ansicht zeige ich Elemente zusammen mit ihren zugehörigen Taxonomiebegriffen an, dank der von mir eingerichteten Beziehungen. Ich habe auch exponierte Taxonomie-Filter aktiviert, die es den Benutzern ermöglichen, Inhalte einfach zu filtern. Ich bemerkte jedoch ein Problem: Einige Elemente erscheinen mehrmals, da sie mit mehreren Taxonomiebegriffen verknüpft sind.

Ich habe die Optionen „Distinct“ und „Aggregate“ in Drupal Views ausprobiert, in der Hoffnung auf eine schnelle Lösung. Sie lösten das Problem jedoch nicht. Nach einiger Recherche fand ich eine Lösung, die funktionierte und die ich unten teilen werde.

So beheben Sie es:

  1. Fügen Sie jedem Element eine eindeutige Kennung hinzu:
    Gehen Sie zuerst zu Ihrer 'resources'-Ansicht in Drupal. Fügen Sie das Feld Content: id zur Ansicht hinzu.
  2. Ändern Sie die Abfrage der Ansicht:
    Implementieren Sie einen benutzerdefinierten Hook, um die Abfrage der Ansicht zu ändern. Dadurch wird sichergestellt, dass die Ergebnisse nach der eindeutigen ID des Inhalts gruppiert werden.
/**
 * 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 einfachen Worten:
Was wir hier tun, ist einfach. Wir weisen Drupal an, jeden Eintrag in unserer Ansicht zu betrachten und ihn nach seiner eindeutigen Inhalts-ID zu gruppieren. Auf diese Weise wird ein Inhaltselement, auch wenn es mit mehreren Taxonomiebegriffen verknüpft ist und normalerweise mehr als einmal erscheinen würde, jetzt nur noch einmal angezeigt.

Viel Spaß beim Debuggen!