我接管了基于Symfony2
构建的Sonata Admin Bundle
应用程序的责任,并被要求用户进行一些小的更改。在列表页面的xls导出中,所有日期都显示为例如Wed, 01 Aug 2012 00:00:00 +0200
,但Excel格式为General
。用户希望此列中的数据是Excel日期类型,以便它可以排序。
我能够找到有关导出自定义的一些信息,但这主要涉及选择列表导出文件类型或要包含的字段,而不是如何更改导出文档中的格式。有一个类似的问题被问到here(我认为),但没有答案。
我认为这会(或应该)非常简单,但肯定不是很明显。任何帮助将不胜感激。
答案 0 :(得分:4)
马西亚诺的答案略有改善。 使代码更有弹性抵御奏鸣曲更新。
public function getDataSourceIterator()
{
$datasourceit = parent::getDataSourceIterator();
$datasourceit->setDateTimeFormat('d/m/Y'); //change this to suit your needs
return $datasourceit;
}
答案 1 :(得分:2)
这是我的代码。它的工作!
use Exporter\Source\DoctrineORMQuerySourceIterator;
use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
和功能:
/**
* {@inheritdoc}
*/
public function getDataSourceIterator()
{
$datagrid = $this->getDatagrid();
$datagrid->buildPager();
$fields=$this->getExportFields();
$query = $datagrid->getQuery();
$query->select('DISTINCT ' . $query->getRootAlias());
$query->setFirstResult(null);
$query->setMaxResults(null);
if ($query instanceof ProxyQueryInterface) {
$query->addOrderBy($query->getSortBy(), $query->getSortOrder());
$query = $query->getQuery();
}
return new DoctrineORMQuerySourceIterator($query, $fields,'d.m.Y');
}
答案 2 :(得分:2)
只需在您的管理员中添加此项(覆盖您正在扩展的管理类的方法)。发现它正在阅读代码。它不在文档中。
public function getDataSourceIterator()
{
$datagrid = $this->getDatagrid();
$datagrid->buildPager();
$datasourceit = $this->getModelManager()->getDataSourceIterator($datagrid, $this->getExportFields());
$datasourceit->setDateTimeFormat('d/m/Y'); //change this to suit your needs
return $datasourceit;
}
答案 3 :(得分:2)
在我的管理类EmployeeAdmin中,我使用getExportFields函数指定我们要导出的字段:
public function getExportFields() {
return array(
$this->trans('list.label_interview_date') => 'interviewDateFormatted'
);
}
interviewDateFormatted 实际上是对相应实体(Employee)方法getInterviewDateFormatted的调用,如下所示:
public function getInterviewDateFormatted() {
return ($this->interviewDate instanceof \DateTime) ? $this->interviewDate->format("Y-m-d") : "";
}
这样我可以更改日期格式或对我要导出的字段进行其他必要的更改。
答案 4 :(得分:0)
你设法让它成功吗?
日期格式定义为新DoctrineORMQuerySourceIterator.php(https://github.com/sonata-project/exporter/blob/master/lib/Exporter/Source/DoctrineORMQuerySourceIterator.php)的参数
DoctrineORMQuerySourceIterator.php
是在getDataSourceIterator
函数(https://github.com/sonata-project/SonataDoctrineORMAdminBundle/blob/2705f193d6a441b9140fef0996ca392887130ec0/Model/ModelManager.php)
Admin.php
内部有函数调用它:
public function getDataSourceIterator()
{
$datagrid = $this->getDatagrid();
$datagrid->buildPager();
return $this->getModelManager()->getDataSourceIterator($datagrid, $this->getExportFields());
}
如果您自己编写getDataSourceIterator()
,则可以更改日期格式。