WHAT'S NEW?
Loading...

CakePHP1.2で内容をカスタマイズしたCSVをダウンロードさせる【1/3】

CakePHP1.2でDBテーブルの内容をCSVファイルとしてダウンロードさせる話を以前した。
参照:http://ameblo.jp/hyperdev/entry-10412507754.html

基本的にはCSVヘルパーを追加し、コントローラでデータを取得後、ビューファイル側である程度整形して出力するものだ。

この際、コントローラ側では、データを集計して新たなフィールドとしてCSVに追加したり、項目名をテーブルのフィールド名ではなく、日本語で設定したいなど、いろいろ業務レベルで使うには物足りないものを追加しておかないといけない。

というわけで、単純且つ富豪的に考えてみた。
DBテーブルは売上げテーブルみたいな感じを想定し、priceを合計して支払フィールドとしてやってみる。



まずテーブル定義だが、historiesテーブルを用意し、中味は

[histories]
  1. id  
  2. item_id   
  3. name  
  4. price  
  5. created  
でOKとする。
このpriceを合計して出すことにする。

実際のCSVは、
[支払.csv]
  1. 商品ID  
  2. 商品名  
  3. 金額   
  4. 個数   
  5. 合計金額  
の5つを出力するものとする。

この場合、コントローラ側では
[history_controller.php]
  1. $this->History->find('all'$conditions);  
などでHistoryモデルをつかってデータを出力するのだが、あらかじめ$conditions配列に条件などを入れておくとする。

たとえば2010年1月以前のもの、など。
なのでこのようなソースになる。
  1. $conditions = array(  
  2.   'conditions' => array(  
  3.     'created<' => '2010-01-01'  
  4.   ),  
  5. );  
  6. $this->set('histories'$this->History->find('all'$conditions);  
これでコントローラ側での処理は終わる。
後はビュー側でCSVヘルパーを使い、各フィールド名を指定すればOKだ。
[histories/csv.ctp]
  1. $csv->addGrid($histories, false);   
  2. $csv->setFilename('支払.csv');  
  3. echo mb_convert_encoding($csv->render(), 'SJIS''UTF-8');  

これがCSVダウンロードの基本。
これをカスタマイズし、自由自在にCSVファイルを扱えるようにする。

続く。