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が使用できる。