Google先生で、以下のように検索すますた。
「cakephp CSV」
すると、以下のサイトがありますた。
▼IDEA*IDEA 様
CakePHPでCSVファイルをダウンロードさせたいときの作法 | IDEA*IDEA
簡単そうだったので、上記URLの通り、早速やってみますた。
CSV落とせた!と思いきや、中身が真っ白。
そこでもう一度、ソースをよく見てみる。
$buf = "";
// ごにょごにょして$bufにUserの内容を追加
// 注意点は二つ。
// 1. 一つにまとめたい文字列は""で囲む。
// 2. 文字列内に"がある場合は""としてエスケープ
ん?
あー、なるほど、「$buf」が空っぽなのですな!
※データが空なのだから、CSVが空なのは当然でつよね…(;´Д`)
なので、データを突っ込んでみますた。
$buf = $this->Hoge->findAll(null,null,"Hoge.created DESC");
これでどーじゃー!と、再アクセス、CSVダウンロード!
「array」
え?
あー、なるほど、配列だからってことかぃ?
んー、どうやって書いたらいいのかなー。
再びGoogle先生に聞いてみる。
以下のサイトを発見。
▼拓かれた世界へ向かって 様
AXS3でCakePHPを使うための備忘録5
ふむふむ、この部分が使えそうではないでつか?
というわけで、以下を追加。
foreach ($hoge as $hoge) {
print implode(',', $hoge['hoge']);
print "\r\n";
}
再びアクセス、CSVダウンロード!
のわ!文字化けだ!
んー、てことは「mb_convert_encoding()」とか使う感じなのかすぃら…。
先のソースを以下のように変更。
foreach ($hoge as $hoge) {
print implode(',', mb_convert_encoding($hoge['hoge'],'SJIS','UTF-8'));
print "\r\n";
}
これでどーよ!
のわ!まだ文字化け!
んー…。
何でだべ…。
個別に「mb_convert_encoding()」してみまつか。
foreach ($buf as $buf) {
print
mb_convert_encoding($buf['Hoge']['id'],'SJIS','UTF-8').','.
mb_convert_encoding($buf['Hoge']['created'],'SJIS','UTF-8').','.
mb_convert_encoding($buf['Hoge']['name'],'SJIS','UTF-8').','.
mb_convert_encoding($buf['Hoge']['age'],'SJIS','UTF-8').','.
mb_convert_encoding($buf['Hoge']['sex'],'SJIS','UTF-8')
;
print "\r\n";
そして再度アクセス!CSVダウンロード!
ヽ(´ー`)ノ
文字化けせずに、CSVが落とせますたー!
これ、CSVの上に各項目タイトルみたいなのは入れれないのかな?と思って、追加してみますた。
print mb_convert_encoding('No.,作成日時,名前,年齢,性別','SJIS','UTF-8');
print '\r\n';
そして再びアクセス!CSVダウンロード!
あらーーー。
項目タイトルの行、改行してない…。
各行とタイトル行、何が違うのだ…。
20分ぐらい悩みますた。
ソースをよーく見ると以下の違いがあることに気づきますた。
▼各行の場合
print "\r\n";
▼タイトル行の場合
print '\r\n';
えー、まさかこれを「'」から「"」に変更したって、変わらないよねー。
と思ったのでつが、違いはこれぐらいしかわからないし、試しにやってみることに。
再びアクセス、CSVダウンロード。
えーーー!ソコか!ソコだったのかYO!
てなわけで、無事、CSVの上の行をタイトル行にし、2行目以下がデータという具合にできますた。
…簡単かと思っていたのでつが、かなり苦戦すますた。つが、もっと簡単なんだろうか、本当は。
…実はこの記事も2回目なんでつよね(書いてる途中で消えてしもて…)。