« Ethna_MailSender 例 | メイン | Ethna-2.5.0-preview5 のバグ? »

ethna

テンプレート機能を使ったファイルダウンロード

 PHPでCSVファイルやTSVファイルのダウンロードファイルを生成するシチュエーション。
 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 を継承してもよいかもしれない(メール送信もできてしまうフォーマッターになるが・・・)。

トラックバック

このエントリーのトラックバックURL:
https://www.remix.asia/cgi/mt/mt-tb.cgi/6576

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)