まず、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');とし、CSVヘルパーを読み込むようにする。
もちろん、
var $helpers = array('Html', 'JavaScript');などか書かれていれば、配列にCsvを追加する。
これでコントローラ内でCSVヘルパーが使えるようになった。
■アクションの作成
同コントローラ内に、csvというアクションメソッドを作ってみる。
ブラウザ上のリクエストURIとして実行するものなので、アクションとした。
※ちょっとした関数などはアクションにしないで、ただの関数にしておくと良い。もちろん関数名の先頭にアンダーバーをつければ、ブラウザから読み込めなくなるのでセキュリティ的にも良い
CSVファイルに出力したい内容に、デバッグ情報が入ってしまうのを防ぐことと、実際にブラウザ上ではCSVファイルの中味は表示しないという、二つの設定をアクション内に記述しておく。
function csv() { Configure::write('debug', 0); // デバッグ情報不要 $this->layout = false; // layout 不要 }アクションメソッドでは、仮にHistoryモデルから全レコードを抽出することとする。
あらかじめコントローラ側で
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');1行目、コントローラから渡されたHistoryモデルの全データを、addGridメソッドで適用させる。
2行目、出力するファイル名を設定する。
3行目、大抵Excelで見ることになるので、UTF-8からShift_JISに変換して出力
これでOK。
■確認
http://example.com/histories/csv などとブラウザ上でアクセスしてみる。
正しくブラウザがダウンロードを開始すれば成功だ。
facebook
twitter
google+
fb share