Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得drupal视图alterhook中的总行数?_Drupal_Drupal 8_Drupal Views - Fatal编程技术网

如何获得drupal视图alterhook中的总行数?

如何获得drupal视图alterhook中的总行数?,drupal,drupal-8,drupal-views,Drupal,Drupal 8,Drupal Views,我必须避免在视图中出现重复的搜索结果,所以我尝试使用pre-render hook来更改视图。移除重复项工作正常,但问题在于结果的计数。它显示执行的查询的计数,这也包括重复项。此外,我还启用了分页,页面中的分页限制为5。然后计数似乎很奇怪,它计算了每个页面中显示的元素的计数 function search_helper_views_pre_render(\Drupal\views\ViewExecutable $view) { if ($view->id() == "all_new

我必须避免在视图中出现重复的搜索结果,所以我尝试使用pre-render hook来更改视图。移除重复项工作正常,但问题在于结果的计数。它显示执行的查询的计数,这也包括重复项。此外,我还启用了分页,页面中的分页限制为5。然后计数似乎很奇怪,它计算了每个页面中显示的元素的计数

function search_helper_views_pre_render(\Drupal\views\ViewExecutable $view) {
    if ($view->id() == "all_news" || $view->id() == "all_publications" || $view->id() == "all_events" || $view->id() == "global_search") {
      $unique_nids = $d_nids = $new_results = array();

      // Loop through results and filter out duplicate results.
      foreach($view->result as $key => $result) {
        if(!in_array($result->nid, $unique_nids)) {
          $unique_nids[] = $result->nid;
        }
        else {
          unset($view->result[$key]);
        }
      }

      $view->total_rows = count($view->result);
      //$view->pager->total_items = count($view->result);
      $view->pager->updatePageInfo();
  }
}

$view->total\u行的预期输出必须是结果的总计数,而不是页面中显示的元素计数。

您以错误的方式进行了总计。正如您所看到的(从其名称可以清楚地看出),它是
hook\uuuu views\u pre\u render
,在渲染之前运行。所以很难操纵视图结果和计数器,在那里分页

正如我在查询中看到的,您只需删除重复的NID,所以您可以通过独特的drupal视图特性轻松地完成这项工作

在“高级”的“查询设置”下,单击“设置”

您将获得此弹出窗口,现在选中Distinct