6月 07
25.検索結果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']; ?> <?php echo $member['Member']['email']; ?> <?php echo $member['Member']['password']; ?> <?php echo $member['Type']['name']; ?> <?php echo $time->format($format = 'Y/m/d', $member['Member']['birthday']); ?> <?php echo $time->format($format = 'Y/m/d', $member['Member']['created']); ?> <?php endforeach; ?>
このように書いておきます。
で、会員検索のビュー、admin_search.ctp に以下を追加しておきます。
<p><?php echo $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 だけ引き継いで検索し直してる感じですかね。
