今回はView側のお話。
検索画面を想定した場合、検索条件を指定して検索を行った後、
検索結果画面が表示され、件数が多い場合ページ番号が表示されます。
ではではと2ページ目をクリックして表示すると検索条件がすっ飛びます。
続きはwebで。
結論からいうとそりゃそうなるわけです。
2ページ目のリンクはただのAタグです。
メソッドへ渡されるパラメータはオフセットの数値のみ。
はぁ、じゃー引数に検索条件持たせればいいじゃない。
そんなバカな!検索条件が多大なページだったらURLがとんでもないことになりますし、なんかスマートじゃない。
てことで。
解決方法は色々(セッションを利用する、Paginationクラスを直接いじる)ありますが比較的簡単に出来る方法かなと思うので共有します。
まずは前提として、View側に検索条件のhiddenを持ちます。
<?php echo form_open('フォーム先', array('id' => 'form'));?> <input type="hidden" name="jouken1" value="<?php echo $jouken1;?>"> <input type="hidden" name="jouken2" value="<?php echo $jouken2;?>">
次にController側のPaginationの設定を追加します。
// Viewで表示した時にこのタグでPagination全体を囲みます $config['full_tag_open'] = "<div id='pagination'>"; $config['full_tag_close'] = "</div>";
最後にView側にjQueryを追加。
<script type="text/javascript" src="/js/jquery-1.7.1.js"></script> <script type="text/javascript"> <!-- jQuery(function($){ // ページネーションのアンカークリックされたらフォームsubmitにするよ $('#pagination').find('a').click(function(e) { // hrefの制御をキャンセル e.preventDefault(); // フォーム先を指定 $('#form').attr('action', e.target.href); // Submit $('#form').submit(); }); }); //--> </script>こうすることで、Paginationで生成したAタグのリンクをクリックすると
hrefの遷移をキャンセルして遷移先にPOSTすることになります。
Controller側の書き方によりますが、POSTして受け取った値を使って
クエリ条件を生成して実行していた場合に、条件を引き継いでページ遷移が出来るようになります。
セッションでやればいいんでしょうけど、セッションで持つのはなんかなぁ…て思う場合はいい方法かな、と思います。
0 件のコメント:
コメントを投稿