PEAR::Pagerがきもい

http://d.hatena.ne.jp/elf/20070531/1180596453

ふいた。
オプションの「httpMethod」がPOSTの場合、生成されたリンクがjavascriptを駆使してがんばってPOSTしてた。

<?php
require_once 'Pager.php';
$items = range('a', 'z');
$options = array(
    'mode'          => 'Sliding',
    'itemData'      => $items,
    'urlVar'        => 'p',
);
$pager = Pager::factory($options);
$r_items = $pager->getPageData();
$links = $pager->getLinks();
?>
<a href="<?php print $_SERVER['SCRIPT_NAME']; ?>?p=2&hoge=hoge">get</a>
<form action="<?php print $_SERVER['SCRIPT_NAME']; ?>" method="POST">
	<input type="hidden" name="p" value="2" />
	<input type="hidden" name="hoge" value="hoge" />
	<input type="submit" value="post"/>
</form>
<?php
foreach($r_items as $item) {
    print $item . "<br />\n";
}
print $links['all'] . "<br />\n";
?>

「httpMethod」を設定しなかった場合、$_SERVER['REQUEST_METHOD']から判断するので意図しない動作になる場合があります。
検索結果をページングさせようと思った場合などに。

$options = array(
    'mode'          => 'Sliding',
    'itemData'      => $items,
    'urlVar'        => 'p',
    'httpMethod'    => 'GET',
);

オプション「httpMethod」に「GET」を指定してあげればリンクはjavascriptの怪しいリンクとはならないのですが、自動で引き回すパラメータは$_GETに存在するパラメータのみとなります。
ページ用パラメータは$_REQUESTからとってきているのに。

$options = array(
    'mode'          => 'Sliding',
    'itemData'      => $items,
    'urlVar'        => 'p',
    'httpMethod'    => 'GET',
    'importQuery'   => false,
    'extraVars'     => $_REQUEST,
);

「importQuery」でパラメータの持ちまわしをやめ、「extraVars」で持ちまわしたいパラメータ配列を設定することでこの値を自動的に引き回すようになります。


$_REQUESTは$_COOKIEも含むので$_GETと$_POSTをマージしてあげるのがいいと思います。


Pagerめんど。