我目前正在开发一个用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(来自显示表),然后构建按钮的链接。我真的认为可能有更好的方法。
答案 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
这个解决方案几乎可以重复使用:),更不用说它实际上按预期工作了。适应其他模块的开销很小。
谢谢大家的帮助。
干杯!
亚历