如何将摘要行添加到Drupal视图?

时间:2010-10-25 02:24:33

标签: drupal drupal-6 drupal-views

我已经构建了一个视图(Drupal 6.x,Views 2.x)。我希望能够在此视图的末尾添加摘要行 - 总计几列,并在摘要行中包含总计。

我该怎么做?是否有一些视图数据更改钩子我可以实现,更改构造的数据(在它获得主题之前)?

(请注意,我无法使用views_calc,因为此视图中的某些数据来自视图关系,views_calc在撰写本文时不支持。)

5 个答案:

答案 0 :(得分:6)

几小时后回答我自己的问题......一种方法是实施hook_views_pre_render()

/**
 * Implementation of hook_views_pre_render().
 */
function mymodule_views_pre_render(&$view) {
  if ($view->name == 'myview') {
    // perform calculations on each row
    $pointsEarned = $pointsPossible = 0;
    foreach($view->result as $submission) {
      if (is_numeric($submission->node_data_field_pointsearned_field_pointsearned_value)) {
        $pointsEarned += $submission->node_data_field_pointsearned_field_pointsearned_value;
        $pointsPossible += $submission->node_node_data_field_pointspossible_field_pointspossible_value;
      }
    }


    // insert a 'total' row
    $row = new stdClass();
    $row->node_data_field_pointsearned_field_pointsearned_value = $pointsEarned;
    $row->node_node_data_field_pointspossible_field_pointspossible_value = $pointsPossible;
    $view->result[] = $row;

    if ($pointsPossible > 0) {
      // insert an 'average' row
      $row = new stdClass();
      $row->users_name = 'Average:';
      $row->node_data_field_pointsearned_field_pointsearned_value = round($pointsEarned/$pointsPossible * 100) . "%";
      $view->result[] = $row;
    }
  }
}

答案 1 :(得分:4)

瞥了一眼,看起来Views Calc可以做你想做的事。

答案 2 :(得分:2)

Views Calc有很多漏洞。 View Summarize似乎更稳定。

答案 3 :(得分:1)

就个人而言,我会在视图模板中处理这个问题。为您的视图创建views-view.tpl.php,然后编辑它计算并打印摘要。

另一种选择是为同一视图创建另一个显示,然后创建一个views-view-unformatted.tpl.php并计算并打印出没有print $row;的摘要,以避免调用字段模板。添加使用视图显示在需要的位置。

答案 4 :(得分:1)

如果有其他人遇到此问题,您可以使用添加汇总表格显示的Views Summarize。您只需设置显示,然后选择您希望每列汇总的方式。我还没有能够将它与Views Data Export一起使用,但如果您只是想查看网站上的数据,它就可以使用。