返回博客

如何在 Drupal 视图中使用分类关系去除重复项

2023-08-102 分钟阅读

在使用 Drupal 时,我们最强大的工具之一就是 Views。它提供了一种灵活的内容呈现方式,尤其是在内容与分类相关联时。然而,有时我们会遇到一个令人烦恼的问题:重复项。我今天就遇到了这个挑战。

问题:
我创建了一个名为“resources”的 Drupal 视图。在此视图中,由于我建立了关系,我显示了项目及其关联的分类术语。我还启用了公开的分类过滤器,允许用户轻松地筛选内容。然而,我注意到一个问题:一些项目出现了多次,因为它们与多个分类术语相关联。

我尝试了 Drupal Views 中的“Distinct”和“Aggregate”选项,希望能快速解决问题。然而,它们并没有解决问题。因此,经过一番研究,我找到了一个有效的解决方案,我将在下面分享。

如何修复:

  1. 为每个项目添加唯一标识符:
    首先,在 Drupal 中转到您的“resources”视图。将字段 Content: id 添加到视图中。
  2. 修改视图的查询:
    实现一个自定义钩子来修改视图的查询。这将确保结果按内容的唯一 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 对它们进行分组。这样,即使一个内容项与多个分类术语相关联并且通常会显示多次,它现在也只会显示一次。

祝调试愉快!