PEARのpagerライブラリを使用していたが、色々と微妙だったので、簡単に自分でコーディング。
phpからのreturnを表示するエリアをjavascritで記述し、そのreturnの中にさらにそのエリアで表示を行うhtmlを表示。
そうすることで、最初に表示されたエリア内のフォーム等をクリックすることで、さらにページ遷移の無い表示エリアで表示の切り替えが可能。
表示エリアの記述はこんな感じ。
<div id="search_result_area_ff">検索結果表示エリア</div>
遷移無しにそのエリアにphpのreturnを表示するJavascriptはこんなの。
function formPostClick() { new Ajax.Request ( './test.php', { method : 'post', parameters : Form.serialize('ajaxForm'), onComplete : function( httpObj ) { $('search_result_area_ff').innerHTML = httpObj.responseText; } } ); } function formPostClickNext() { new Ajax.Request ( './test.php', { method : 'post', parameters : Form.serialize('ajaxNextForm'), onComplete : function( httpObj ) { $('search_result_area_ff').innerHTML = httpObj.responseText; } } ); } function formPostClickPrev() { new Ajax.Request ( './test.php', { method : 'post', parameters : Form.serialize('ajaxPrevForm'), onComplete : function( httpObj ) { $('search_result_area_ff').innerHTML = httpObj.responseText; } } ); }
で、最後にReturn表示エリアに表示エリア内でさらなるReturnを表示しなおすPHPでの
Pager実装は以下。
### PAGER Setting ### $pagelimit = 50; $name = $_POST['name']; $currentPageID = $_POST['page']; $sort = $_POST['sort']; $next_page = $currentPageID + 1; $prev_page = $currentPageID - 1; if ($prev_page > 0) { printf(' <table><tr><td> <form method="post" id="ajaxPrevForm"> <input type="hidden" name="name" id="name" value="'.$name.'"> <input type="hidden" name="page" id="page" value="'.$prev_page.'"> <input type="hidden" name="sort" id="sort" value="'.$sort.'"> <input id = "search_button_fff" type = "button" value = "prev" onclick = "formPostClickPrev();"> </form> </td><td> '); } printf(' <form method="post" id="ajaxNextForm"> <input type="hidden" name="name" id="name" value="'.$name.'"> <input type="hidden" name="page" id="page" value="'.$next_page.'"> <input type="hidden" name="sort" id="sort" value="'.$sort.'"> <input id = "search_button_fff" type = "button" value = "next" onclick = "formPostClickNext();"> '); if ($prev_page > 0) { printf('</form></td></tr></table>'); } $index = ($currentPageID - 1) * $pagelimit + 1; $min_hit_num = $index; if ($rowNum < $index + $pagelimit) { $max_hit_num = $rowNum; } else { $max_hit_num = $index + $pagelimit - 1; } printf("<div id=resultNum>検索結果(%d?%d件目):%dヒット</div>", $min_hit_num, $max_hit_num, $rowNum);
これで、簡単ではあるが、ページ遷移なしのPagerが使用できる。