Назад к блогу

Как удалить дубликаты в представлениях Drupal с помощью связей таксономии

2023-08-102 минуты чтения

Работая с Drupal, одним из самых мощных инструментов в нашем распоряжении являются Представления (Views). Они предлагают гибкий способ представления контента, особенно когда контент связан с таксономиями. Однако иногда мы сталкиваемся с неприятной проблемой: дубликатами. Я лично столкнулся с этой проблемой сегодня.

Проблема:
Я создал представление Drupal под названием «ресурсы». В этом представлении я отображаю элементы вместе с их связанными терминами таксономии благодаря установленным связям. Я также включил раскрывающиеся фильтры таксономии, позволяя пользователям легко фильтровать контент. Однако я заметил проблему: некоторые элементы появляются несколько раз, потому что они связаны с несколькими терминами таксономии.

Я попробовал опции «Уникальные» (Distinct) и «Агрегировать» (Aggregate) в представлениях Drupal, надеясь на быстрое решение. Однако они не решили проблему. Поэтому, после некоторых поисков, я нашел решение, которое сработало, и которым я поделюсь ниже.

Как исправить:

  1. Добавьте уникальный идентификатор к каждому элементу:
    Сначала перейдите к вашему представлению «ресурсы» в Drupal. Добавьте поле Content: id к представлению.
  2. Измените запрос представления:
    Реализуйте пользовательский хук для изменения запроса представления. Это гарантирует, что результаты будут сгруппированы по уникальному идентификатору контента.
/**
 * Реализует hook_views_query_alter().
 */
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
  // Целевое представление 'resources'.
  if ($view->id() == 'resources') {
    // Добавьте поле nid с функцией groupby.
    $query->addField('node_field_data', 'nid', '', ['function' => 'groupby']);
    // Группируйте результаты по ID узла.
    $query->addGroupBy('node_field_data.nid');
  }
}

Простыми словами:
То, что мы здесь делаем, просто. Мы говорим Drupal посмотреть на каждую запись в нашем представлении и сгруппировать их по их уникальному идентификатору контента. Таким образом, даже если часть контента связана с несколькими терминами таксономии и обычно появляется более одного раза, теперь она будет отображаться только один раз.

Удачной отладки!

Категории: