質問
PHPを使用してテーブルのページネーションを作成しています。次のコードを使用してページネーションリンクを作成します
<a class='page-numbers' href='$href&pagenum=$i'>$i</a>
$ hrefで
$href = $_SERVER['REQUEST_URI'];
うまく機能しますが、アドレスバーを台無しにして、新しいPagenumパラメーターを追加するたびに追加されます。したがって、それはpagenum = 1&pagenum = 3&pagenum = 4になります。
それを改善する方法は?
解決
これはどう?確かに行ってテストしました:)
<?php
$new_get = $_GET; // clone the GET array
$new_get['pagenum'] = $i; // change the relevant parameter
$new_get_string = http_build_query($new_get); // create the foo=bar&bar=baz string
?>
<a class="page-numbers" href="?<?php echo $new_get_string; ?>">
<?php echo $i ?>
</a>
また、全体に注意してください $href
ビットは不要です。あなたがあなたを始めたら href
と ?
, 、ブラウザは、クエリ文字列を現在のパスに適用します。
ただし、ループすることになると確信しているので、10,000ページの番号リンクを作成するために最適化されたバージョンを次に示します。私のベンチマークは、完全なHTTPクエリビルドの代わりに文字列連結を行っているだけなので、多数のリンクでそれをわずかに速くしていると考えていますが、心配する価値があるだけではないかもしれません。違いは、5つまたは6つがパラメーターを取得する場合にのみ非常に重要ですが、ある場合、この戦略は私のマシンで約半分の時間で完了します。
<?php
$pageless_get = $_GET; // clone the GET array
unset($pageless_get['pagenum']); // remove the pagenum parameter
$pageless_get_string = http_build_query($pageless_get); // create the foo=bar&bar=baz string
for($i = 0; $i < 10000; $i++):
// append the pagenum param to the query string
$page_param = "pagenum=$i";
if($pageless_get_string) {
$pageful_get_string = "$pageless_get_string&$page_param";
} else {
$pageful_get_string = $page_param;
}
?>
<a class="page-numbers" href="?<?php echo $pageful_get_string; ?>">
<?php echo $i ?>
</a>
<?php endfor ?>
他のヒント
$url = $_SERVER['REQUEST_URI'];
$urlparams = parse_url($url);
if(isset($urlparams['query']){
parse_str($urlparams['query'],$vars);
$vars['pagenum'] = $i;
$urlparams['query'] = http_build_query($vars);
} else {
$urlparams['query'] = 'pagenum='.$i;
}
$url = http_build_url($urlparams);
//http_build_url() is in PECL, you might need to manually rebuild the
//url by looping through it's components:
/*
$url=(isset($urlparams["scheme"])?$urlparams["scheme"]."://":"").
(isset($urlparams["user"])?$urlparams["user"]:"").
(isset($urlparams["pass"])? ":".$urlparams["pass"]:"").
(isset($urlparams["user"])?"@":"").
(isset($urlparams["host"])?$urlparams["host"]:"").
(isset($urlparams["port"])?":".$urlparams["port"]:"").
(isset($urlparams["path"])?$urlparams["path"]:"").
(isset($urlparams["query"])?"?".$urlparams["query"]:"").
(isset($urlparams["fragment"])?"#".$urlparams["fragment"]:"");
*/
所属していません StackOverflow