Kartik Export —— 自动从filterModel中得到标题文字

Yii的Model是自带Label的,显示表格时会自动从Model中获取Label并显示,可是在导出到文件时,却并不能自动获取Label,通过跟踪发现,问题出在以下代码:php

public function initExport()
{
    ...... 
    $this->setDefaultStyles('header');
    $this->setDefaultStyles('box');
    $this->filterModel = null;
    $this->setDefaultExportConfig();
    ...... 
}

注意到这里有个$this->filterModel = null,这就致使后面想根据filterModel获取字段标题的时候,就没有办法获得了。yii

修改方案,首先从Kartik Export继承一个子类,而后在子类重载initExport和getColumnHeader接口,代码以下:ide

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;
    }
相关文章
相关标签/搜索