码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-11-30 15:28:37      阅读:5      评论:0      收藏:0      [点我收藏+]

标签:代码   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!