PHPでCSVファイルやTSVファイルのダウンロードファイルを生成するシチュエーション。
EthnaのSmartyテンプレートを利用する。このことを応用しているEthna_MailSenderで可能。
APPID/ja_JP/Format/AddressCSV.tpl
このテンプレート形式でデータファイルをダウンロードするにはアクションなどで次のように使う。
EthnaのSmartyテンプレートを利用する。このことを応用しているEthna_MailSenderで可能。
APPID/ja_JP/Format/AddressCSV.tpl
作成日時:{$smarty.now|date_format:"%Y/%m/%d %H:%M:%S"} 生成元機:{$cfg.url} 合計{$row[0]}件 氏名,電話,都道府県,住所 {foreach from=$row[1] item=a} "{$a.name}","{$a.tel}","{$a.prefecture}","{$a.address}" {/foreach}データ取得の仕様が変わらなければ、このテンプレートだけで簡単に書式を変更できる。
このテンプレート形式でデータファイルをダウンロードするにはアクションなどで次のように使う。
$formatter =& new Ethna_MailSender( $this->backend ); $formatter->mail_dir = 'Format'; $data = $formatter->send( null , 'OperatesTSV.tpl' , array( 'cfg' => $this->config->get(), 'row' => $row, ) ); header( 'Content-Disposition: attachment; filename="download.csv"' ); header( 'Content-Length: '.strlen( $data ) ); header( 'Connection: close' ); header( 'Content-Type: application/octet-stream' ); echo $data; exit();return すると view へ遷移しヘッダーが重複して出力されてしまうので exit() する。
メール送信するわけでなくテンプレート展開後のテキストを取得するには Ethna_MailSender::send() の第一パラメータ(送信先アドレス)をnullにとして戻りを取得すればよい。
メール用とは区別するためテンプレートディレクトリ(mail_dir)を APPID/ja_JP/Format と指定している。
シンボル名などがメールに特化した実装の為 Ethna_MailSender を継承してもよいかもしれない(メール送信もできてしまうフォーマッターになるが・・・)。