如何在 Drupal 视图中使用分类关系去除重复项
2023-08-10•2 分钟阅读
在使用 Drupal 时,我们最强大的工具之一就是 Views。它提供了一种灵活的内容呈现方式,尤其是在内容与分类相关联时。然而,有时我们会遇到一个令人烦恼的问题:重复项。我今天就遇到了这个挑战。
问题:
我创建了一个名为“resources”的 Drupal 视图。在此视图中,由于我建立了关系,我显示了项目及其关联的分类术语。我还启用了公开的分类过滤器,允许用户轻松地筛选内容。然而,我注意到一个问题:一些项目出现了多次,因为它们与多个分类术语相关联。
我尝试了 Drupal Views 中的“Distinct”和“Aggregate”选项,希望能快速解决问题。然而,它们并没有解决问题。因此,经过一番研究,我找到了一个有效的解决方案,我将在下面分享。
如何修复:
- 为每个项目添加唯一标识符:
首先,在 Drupal 中转到您的“resources”视图。将字段Content: id
添加到视图中。 - 修改视图的查询:
实现一个自定义钩子来修改视图的查询。这将确保结果按内容的唯一 ID 进行分组。
/**
* 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');
}
}
简单来说:
我们在这里做的事情很简单。我们告诉 Drupal 查看我们视图中的每个条目,并按其唯一的 content ID 对它们进行分组。这样,即使一个内容项与多个分类术语相关联并且通常会显示多次,它现在也只会显示一次。
祝调试愉快!