まず、CakePHP1.2で使えるCSVヘルパーを落とす。
【PHP5】
http://bakery.cakephp.org/articles/view/csv-helper-php5
【PHP4互換】
http://ifunk.net/cakephp/helpers/csv.php.txt
リンク先はPHP5と、PHP4互換の2種類あるが、今回念のためPHP4互換を使ってみる。
ページを表示したらコピーして、csv.phpという名前で保存する。
※WebサーバがPHP5のみインストールされているのであれば、躊躇無くPHP5版を選ぶと良い。
というわけで、csv.phpファイルを
[/Path/To/CakePHP/App/views/helpers/csv.php]
に設置する。
これでCSVヘルパーのインストールは完了。
■CSVヘルパー事前準備
コントローラ側で
- var $helpers = array('Csv');
もちろん、
- var $helpers = array('Html', 'JavaScript');
これでコントローラ内でCSVヘルパーが使えるようになった。
■アクションの作成
同コントローラ内に、csvというアクションメソッドを作ってみる。
ブラウザ上のリクエストURIとして実行するものなので、アクションとした。
※ちょっとした関数などはアクションにしないで、ただの関数にしておくと良い。もちろん関数名の先頭にアンダーバーをつければ、ブラウザから読み込めなくなるのでセキュリティ的にも良い
CSVファイルに出力したい内容に、デバッグ情報が入ってしまうのを防ぐことと、実際にブラウザ上ではCSVファイルの中味は表示しないという、二つの設定をアクション内に記述しておく。
- function csv()
- {
- Configure::write('debug', 0); // デバッグ情報不要
- $this->layout = false; // layout 不要
- }
あらかじめコントローラ側で
- var $uses = array('History');
- function csv()
- {
- Configure::write('debug', 0); // デバッグ情報不要
- $this->layout = false; // layout 不要
- $this->set('histories', $this->History->find('all')) ;
- }
■ビューの作成
コントローラ名に準じたビューディレクトリに、csv.ctpというビュースクリプトファイルを作っておく。
ここではhistories_controller.phpを使うこととするのでviews/historiesとした
ビュースクリプトの中味は単純で、以下のようになる。
[/Path/To/CakePHP/App/views/histories/csv.ctp]
- $csv->addGrid($histories);
- $csv->setFilename('支払.csv');
- echo mb_convert_encoding($csv->render(), 'SJIS', 'UTF-8');
2行目、出力するファイル名を設定する。
3行目、大抵Excelで見ることになるので、UTF-8からShift_JISに変換して出力
これでOK。
■確認
http://example.com/histories/csv などとブラウザ上でアクセスしてみる。
正しくブラウザがダウンロードを開始すれば成功だ。
facebook
twitter
google+
fb share