Yiiフレームワーク拡張CGridViewはCSV機能を導出する方法を追加する

3096 ワード

この例では、Yiiフレームワーク拡張CGridViewがCSV機能の導出を増やす方法について説明する.皆さんに参考にしてあげます.具体的には以下の通りです.
Yiiが提供するCGridViewコンポーネントにはデータエクスポート機能が内蔵されていませんが、このコンポーネントを拡張することで追加できます.
具体的な方法は以下の通りです.
1、まずサブクラスを派生し、actionメンバーを追加し、そのビューのinit関数でブラウズ動作かデータエクスポート動作かを判断し、ブラウズ作成者であればデフォルト動作を維持し、そうでなければcsvファイルを出力する.

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エクスポートボタンを追加するrenderItems()をカバーする方法は、次のとおりです.

public function renderItems()
{
  if(Yii::app()->user->checkAccess('administrator'))
  {
    echo '
'; echo '
'; foreach($this->getController()->getActionParams() as $name => $value) { echo ''; } echo ''; echo '
'; echo '
'; } parent::renderItems(); }
4、次にCSVをクリックする動作処理、例えばactionCsv()においてrender単一テーブルビュー、テンプレートは以下の通りである.

widget('application.extensions.grid.MyGridView', array(
  'id'=>'grid',
  'action'=>'export',
  'dataProvider'=>$dp,
  'columns'=>array(
    array(
      'header'=>Yii::t('Statistics','Phone'),
      'name'=>'phone',
    ),
    array(
      'header'=>Yii::t('Statistics','Count'),
      'name'=>'count',
    ),
  )
));?>

注意上記第2ステップcsv出力関数のヘッダー設定文には、次の関数を含む出力はありません.print , echo , printf , trigger_error , vprintf , ob_flush , var_dump , readfile , passthru
そうでなければ、コンテンツはブラウザでのみ出力されますが、ファイルのダウンロードは表示されません.
Yiiの関連内容についてもっと興味のある読者は、「Yiiフレームワーク入門及び常用技術総括」、「php優秀開発フレームワーク総括」、「smartyテンプレート入門基礎教程」、「phpオブジェクト向けプログラム設計入門教程」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門教程」及び「php一般データベース操作テクニック要約」
本稿では,Yiiフレームワークに基づくPHPプログラムの設計に役立つことを期待する.