検索結果CSVダウンロード
検索結果をCSVでダウンロードする処理を追加します。 検索の処理部分は全く同じで言い訳ですから、同じadmin_serchアクションに、またモードを指定して、ダウンロードモードの時はCSVにするようにします。 まず、レイアウトとビューを用意しておきます。 /app/views/layouts/csv.ctp を新規作成して、
<?php
header('content-type: text/plain');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=member.csv");
?>
<?php echo $content_for_layout; ?>
とします。 ビューは、 /app/views/members/admin_download.ctpとして、
<?php foreach ($members as $member): ?>
<?php
echo $member['Member']['id'];
echo $member['Member']['email'];
echo $member['Member']['password'];
echo $member['Type']['name'];
echo $this->Time->format($format = 'Y/m/d', $member['Member']['birthday']);
echo $this->Time->format($format = 'Y/m/d', $member['Member']['created']);
?>
<?php endforeach; ?>
このように書いておきます。 で、会員検索のビュー、admin_search.ctp に以下を追加しておきます。
<p><?php echo $this->Paginator->link(__('CSVダウンロード', true), array('mode'=>'DL')); ?></p>
こうするとリンクに引数を渡せます。 で、コントローラ members_controller.php のadmin_searchアクションの一番下に、
if ((isset($this->passedArgs['mode'])) && ($this->passedArgs['mode'] == 'DL')) {
Configure::write('debug', 0);
$this->layout = 'csv';
$data = $this->Member->find('all', array(
'order'=>array('Member.id'),
'conditions' => $conditions
));
$this->set("members", $data);
$this->render('admin_download');
}
を追加します。 mode=”DL” で来た時は $conditions だけ引き継いで検索し直してる感じですかね。
