【问题标题】:How to get total number of rows in a drupal view alter hook?如何在drupal视图alter hook中获取总行数?
【发布时间】:2019-07-30 09:43:05
【问题描述】:

我必须避免在视图中出现重复的搜索结果,所以我正在尝试使用预渲染挂钩来更改视图。并删除重复它工作正常,但问题在于结果的计数。它显示了执行查询的计数,这也包括重复的项目。另外,我启用了页面限制为 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_rows 的预期输出必须是结果的总计数,而不是页面中显示的元素计数。

【问题讨论】:

    标签: drupal drupal-8 drupal-views


    【解决方案1】:

    你完全做错了。如您所见(从它的名称可以清楚地看出),它是hook__views_pre_render,它在渲染之前运行。所以真的很难操纵视图结果和计数器,在那里分页。

    正如我在您的查询中看到的,您只需删除重复的 Nids ,因此您可以通过 Distinct drupal 视图功能轻松完成。

    在高级,查询设置下,点击设置。

    你会得到这个弹出窗口,现在勾选 Distinct

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多