Yii提供的CGridView組件沒有內(nèi)置數(shù)據(jù)導(dǎo)出功能,不過我們可以通過擴(kuò)展該組件來添加該功能。
具體方法如下:
1、首先派生一個子類,添加一個action成員,在該視圖的init函數(shù)中判斷是瀏覽動作還是數(shù)據(jù)導(dǎo)出動作,如果是瀏覽動作者則保持默認(rèn)行為,否則輸出csv文件。
html' target='_blank'>public function init() { if($this->action == 'export') { parent::init(); $this->genCsv(); } else { parent::init(); } }
2、處理csv文件的輸出:
        protected function genCsv()        {            header("Content-Type: text/csv; charset=GB2312");            header('Content-Disposition: attachment; filename="'.$this->fileName.'"');                        //add your content dump codes here            flush();        }		3、然后在表格控件界面上添加一個csv導(dǎo)出按鈕 www.it165.net
覆蓋其renderItems()方法如下:
        public function renderItems()        {            if(Yii::app()->user->checkAccess('administrator'))            {                echo '<div class="toolBar">';                echo '<form action="'.CHtml::normalizeUrl(array($this->action)).'&id='.$this->id.'" method="post">';                foreach($this->getController()->getActionParams() as $name => $value)                {                    echo '<input type="hidden" name="'.addcslashes($name,'"').'" value="'.addcslashes($value,'"').'" />';                }                echo '<input type="image" title="'.Yii::t('ifCMS','Export to CSV').'" src="'.Yii::app()->theme->BaseUrl.'/images/ico-csv.png" alt="Submit">';                echo '</form>';                echo '</div>';            }            parent::renderItems();        }		4、然后在點(diǎn)擊CSV的動作處理比如actionCsv()中render單個表格視圖,模板如下
注意上述第2步csv輸出函數(shù)中的header設(shè)置語句之前不要有任何的輸出,包括如下函數(shù):
print, echo, printf, trigger_error, vprintf, ob_flush, var_dump, readfile, passthru
否則內(nèi)容只會在瀏覽器中輸出,但不會出現(xiàn)文件下載。
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選