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;
    }
相關文章
相關標籤/搜索