代码之家  ›  专栏  ›  技术社区  ›  smokris

如何向Drupal视图添加摘要行?

  •  6
  • smokris  · 技术社区  · 14 年前

    我已经构建了一个视图(Drupal6.x,视图2.x)。我希望能够在这个视图的末尾添加一个摘要行,合计几个列,并将合计包括在摘要行中。

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

    (注意我不能用 views_calc 因为这个视图中的一些数据来自视图关系,而 VIEWSK-CALC 写作时不支持。)

    5 回复  |  直到 11 年前
        1
  •  6
  •   smokris    14 年前

    几个小时后回答我自己的问题…一种方法是实施 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;
        }
      }
    }
    
        2
  •  4
  •   John Fiala    14 年前

    环顾四周,看起来 Views Calc 可以做你想做的。

        3
  •  2
  •   Simon Yost    11 年前

    Views Calc 有很多开放的错误。 View Summarize 似乎更稳定。

        4
  •  1
  •   mpdonadio    14 年前

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

    另一个选项是为同一视图创建另一个显示,然后创建 views-view-unformatted.tpl.php 计算并打印出摘要,不执行 print $row; 避免调用字段模板。添加使用视图在需要时显示。

        5
  •  1
  •   smokris    11 年前

    如果其他人遇到这个问题,你可以使用 Views Summarize 这将添加汇总表显示。您只需设置显示,然后选择每个列的汇总方式。我还不能让它与视图数据导出一起工作,但是如果您只想在站点上查看数据,它就可以工作。