标签:代码 null attr 自带 tst ade ret 处理 表格
Yii的Model是自带Label的,显示表格时会自动从Model中获取Label并显示,但是在导出到文件时,却并不能自动获取Label,经过跟踪发现,问题出在如下代码:public function initExport()
{
......
$this->setDefaultStyles(‘header‘);
$this->setDefaultStyles(‘box‘);
$this->filterModel = null;
$this->setDefaultExportConfig();
......
}
注意到这里有个$this->filterModel = null,这就导致后面想根据filterModel获取字段标题的时候,就没有办法得到了。
修改方案,首先从Kartik Export继承一个子类,然后在子类重载initExport和getColumnHeader接口,代码如下:
public function initExport()
{
// 这样处理,使得列标题可以跟grid一样,从filterModel中获取
$filterModel = $this->filterModel;
parent::initExport();
$this->filterModel = $filterModel;
}
/** 通过filterModel的属性,获得字段的标题文字
* @param \yii\grid\DataColumn $col
* @return string
*/
public function getColumnHeader($col)
{
$label = parent::getColumnHeader($col);
if ($col->label === null) {
if ($this->filterModel !== null && $this->filterModel instanceof Model) {
$label = $this->filterModel->getAttributeLabel($col->attribute);
}
}
return $label;
}
Kartik Export —— 自动从filterModel中获得标题文字
标签:代码 null attr 自带 tst ade ret 处理 表格
原文地址:https://blog.51cto.com/lancelot/2554126