在Symfony 1.0中获取batch_action功能

时间:2010-03-19 12:45:50

标签: php symfony1

我目前正在开发一个用Symfony编写的网络应用程序。我应该在应用程序的后端/管理部分为某些模块添加“导出到CSV”功能。在列表视图中,应该有一个“导出”按钮,该按钮应该为用户提供显示元素的csv文件(考虑过滤条件)。

我在模块的actions类中创建了一个方法,该方法采用逗号分隔的id列表并生成CSV,但我不确定如何在视图中添加链接。问题是视图在任何地方都不存在,它是从generator.yml配置文件中的数据动态生成的。我已经发布了下面文件的相关部分。

我是Symfony的新手,所以任何帮助都会受到赞赏:)。

谢谢,
亚历

更新


list:
  display: [id, =name, indemn, _status, _participants, _approved_, created_at]
  title: Lista acţiuni
  object_actions:
    _edit: ~
    _delete: ~
  actions:
    _create: ~
    export_csv:
      name: Export to CSV
      action: CSVExport
      params: id=csvActionSubmit
  filters: [name, county_id, _status_filter, activity_id]
  fields:
    id:
      name: Nr. crt.
  ...

感谢您的建议,我设法添加了一个与我的操作相关联的按钮。问题是我还需要向动作发送一些参数,因为我可能不想要所有的元素 - 过滤器可能已被使用。不幸的是,该项目使用的是Symfony 1.0,它不支持batch_actions

目前,我正在使用Javascript解决这个问题(我解析DOM以获取数字ID(来自显示表),然后构建按钮的链接。我真的认为可能有更好的方法。

3 个答案:

答案 0 :(得分:1)

如果您希望将其保留在管理生成器中,那么您要查找的是“批处理操作”(有关详细信息,请参阅the Symfony docs)。基本上这将显示在下拉菜单中(如果您使用的是默认管理主题),并且可以勾选您感兴​​趣的行,从下拉菜单中选择该选项并单击“开始”。

您的generator.yml看起来如下所示:

list:
  display: [=name, indemn, _status, _participants, _approved_, created_at]
  title: Lista acţiuni
  object_actions:
    _edit: ~
    _delete: ~
  batch_actions:
    exportcsv:
      label: "Export to CSV
...

这将在actions.class.php中查找executeBatchExportcsv()方法。它会在您的方法中传递sfWebRequest对象中的一组ID,因此您应该可以非常轻松地将其插入到现有代码中。

答案 1 :(得分:1)

正如您所说,将此添加到您的list参数:

  actions:
    exportToCsv:
      name: Export to CSV
      action: exportToCsv

在模块的executeExportToCsv()中创建action.class.php file操作,您就完成了。如果你想要一个漂亮的按钮图标,你可以添加:

      icon: /images/icons/page_excel.png

或某些行动参数。

答案 2 :(得分:0)

我最终成功实现了我想要的目标。

Javascript解决方案的问题在于我只能在页面上导出显示的结果。如果需要分页,则仅导出显示的结果(当前页面)。

我在布局模板中添加了以下内容:

<?php 
if (isset($filters['csv-export-link'])) {
    echo '<a href="'$filters['csv-export-link']).'">Export to CSV</a>';
}
?>

我修改了已经覆盖的addFiltersCriteria

public function addFiltersCriteria($c) {
    // [...]
    parent::addFiltersCriteria($c);

    if (isset($this->filters['csv-export'])) {
        $idList = array();
        $results = ActionnPeer::doSelect($c);
        foreach ($results as $result) {
            $idList[] = $result->getId();
        }
        $this->filters['csv-export-link'] = '[...]/CSVExport/idList/'.implode(',', $idList);
    }
}

最后,但并非最不重要:),我删除了“常规”操作,因为它不再需要了,并将csv-export“过滤器”添加到generator.yml。

filters: [..., _csv_export_filter]

过滤器模板具有以下内容:

<input type="hidden" name="filters[csv-export]" value="true" /> Active

这个解决方案几乎可以重复使用:),更不用说它实际上按预期工作了。适应其他模块的开销很小。

谢谢大家的帮助。

干杯!
亚历