Как удалить дубликаты в представлениях Drupal с помощью связей таксономии
Работая с Drupal, одним из самых мощных инструментов в нашем распоряжении являются Представления (Views). Они предлагают гибкий способ представления контента, особенно когда контент связан с таксономиями. Однако иногда мы сталкиваемся с неприятной проблемой: дубликатами. Я лично столкнулся с этой проблемой сегодня.
Проблема:
Я создал представление Drupal под названием «ресурсы». В этом представлении я отображаю элементы вместе с их связанными терминами таксономии благодаря установленным связям. Я также включил раскрывающиеся фильтры таксономии, позволяя пользователям легко фильтровать контент. Однако я заметил проблему: некоторые элементы появляются несколько раз, потому что они связаны с несколькими терминами таксономии.
Я попробовал опции «Уникальные» (Distinct) и «Агрегировать» (Aggregate) в представлениях Drupal, надеясь на быстрое решение. Однако они не решили проблему. Поэтому, после некоторых поисков, я нашел решение, которое сработало, и которым я поделюсь ниже.
Как исправить:
- Добавьте уникальный идентификатор к каждому элементу:
Сначала перейдите к вашему представлению «ресурсы» в Drupal. Добавьте полеContent: id
к представлению. - Измените запрос представления:
Реализуйте пользовательский хук для изменения запроса представления. Это гарантирует, что результаты будут сгруппированы по уникальному идентификатору контента.
/**
* Реализует 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 посмотреть на каждую запись в нашем представлении и сгруппировать их по их уникальному идентификатору контента. Таким образом, даже если часть контента связана с несколькими терминами таксономии и обычно появляется более одного раза, теперь она будет отображаться только один раз.
Удачной отладки!