CakePHP1.3で作る会員管理システム(25) 検索結果CSVダウンロード
検索結果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 だけ引き継いで検索し直してる感じですかね。