ET withwithにCSVダウンロード機能を追加しました
Posted on | 2009/12/30 20:30:10 | Comments
以前、いつもお世話になっている方にET withwithを見ていただきまして、アドバイスをいただいたデータのCSVダウンロード対応、この年の瀬にようやくできました。エクセルで好きにデータを整形できるようにとのことで(WEB上で色々見せ方は工夫できるにしても、最終的にユーザ側の自由度を確保するのには、CSVダウンロード機能を付加するのが一番手っ取り早いという指摘に納得)。
CakePHPでCSVファイルをダウンロードさせたいときの作法 – IDEA*IDEA ~ 百式管理人のライフハックブログ
こちらの記事をベースにやったのですが、思う通りいかず、同様の問題を他の方が解決してくださってました。
Yahoo!ブログからの移民 : CakePHP :データをCSVで落とす
で、結論は例によってソースを晒しますが、以下のような感じです。
contents_controller.php
function download() {
$this->autoRender = false;
Configure::write(’debug’, 0);
$csv_file = sprintf("users_%s.csv", date("Ymd-hi"));
header ("Content-disposition: attachment; filename=" . $csv_file);
header ("Content-type: application/octet-stream; name=" . $csv_file);
$organname = $this->Session->read(’organization’);
$organname = $this->Content->Organization->field(’id’, array("Organization.organization" => $organname));
$buf = $this->Content->find(’all’, array(’conditions’ => array("Content.organization_id" => $organname)));
foreach ($buf as $buf) {
mb_convert_encoding($buf['Content']['id'],’SJIS’,'UTF-8′).’,’.
mb_convert_encoding($buf['Category']['category'],’SJIS’,'UTF-8′).’,’.
mb_convert_encoding($buf['Client']['client'],’SJIS’,'UTF-8′).’,’.
mb_convert_encoding($buf['Content']['title'],’SJIS’,'UTF-8′).’,"’.
mb_convert_encoding($buf['Content']['content'],’SJIS’,'UTF-8′).’",’.
mb_convert_encoding($buf['Content']['benefit'],’SJIS’,'UTF-8′).’,’.
mb_convert_encoding($buf['Content']['cost'],’SJIS’,'UTF-8′).’,’.
mb_convert_encoding($buf['Content']['date'],’SJIS’,'UTF-8′)
;
print "\r\n";
}
return;
}
注意点は、本文に「,」を入れていると、CSVが区切られてしまうので、$buf['Content']['title']の前後に「”」を入れることで解決しています。
最後の最後に良い機能を追加できました。満足満足。

