2009/12/30

ET withwithにCSVダウンロード機能を追加しました

以前、いつもお世話になっている方に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) {
print
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 "rn";
}
return;
}

注意点は、本文に「,」を入れていると、CSVが区切られてしまうので、$buf[‘Content’][‘title’]の前後に「”」を入れることで解決しています。

最後の最後に良い機能を追加できました。満足満足。

(2012-10-5)
売り上げランキング: 14,705
100円

加藤 康祐 / 企画・設計

1980年1月12日生まれ。フリーランス歴15年。プランナー、デザイナー。加藤康祐企画設計代表。学生時代にデザイン会社でWebデザインを経験。2005年よりフリーランスとしてキャリアスタート。これまでに個人から上場企業まで、100以上のクライアントとのプロジェクトを経験。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの編集・運営、社会的養護の子どもたちの自立を支援するNPOのサポート等。趣味はラグビーと料理。Keep the head up, Bind tight & Stay low.

加藤康祐企画設計

是非、フォローしてください!
Twitter / Instagram