自分メモ 変数とかきたねえ
というかこれリスト全部出力してjqueryあたりで表示範囲切り替えたほうがいいのではって思ったけど
探したんだけど良さそうなのなかったので、なんかもっと綺麗ないい方法あったら教えてください;w;
本題
こういう偏らないようになるやつ(これは前後4つ、合わせて9個表示される)
テンプレートの方
// 定数
define("SY_SEARCH_PAGING_PN_MAX",4); // 前後のページ数
// コントローラから受け取った有効なクエリを結合したもの
$_search_querys="";
foreach($searchResult['param'] as $key=>$val){
if($key=="q"){
$val=implode(" ",$val);
}
$_search_querys.=($_search_querys!=""?"&":"").spc($key."=".$val);
}
// ここ別のコントローラから受け取るデータ入ります(あらかじめ$searchResultで返り値入るようにしてたそのままですごめんね。都度環境に合わせて変える)
$searchResult['nav']=array("total"=>50,"now"=>4);
// テンプレートphpに突っ込むやつ
<ul class="pagination">
<li>
<a href="/search/result?<?php print $_search_querys."&p=1"; ?>" aria-label="最初のページへ">
<span aria-hidden="true"><i class="fa fa-fw fa-angle-double-left nm"></i></span>
</a>
</li>
<?php
// for回す範囲を設定
$_pg_for_start = 1;
$_pg_for_now = $searchResult['nav']['now'];
$_pg_for_end = $searchResult['nav']['total'];
$_pg_diff_start = 0; // start寄りの値だった時、startへ減算する値
$_pg_diff_end = 0; // end寄りの値だった時、endへ加算する値
if(SY_SEARCH_PAGING_PN_MAX<$_pg_for_now){
$_pg_for_start=$_pg_for_now-SY_SEARCH_PAGING_PN_MAX;
}else{
$_pg_diff_end=SY_SEARCH_PAGING_PN_MAX-$_pg_for_now+1;
}
if($_pg_for_now+SY_SEARCH_PAGING_PN_MAX<=$_pg_for_end){
$_pg_for_end=$_pg_for_now+SY_SEARCH_PAGING_PN_MAX;
}else{
$_pg_diff_start=SY_SEARCH_PAGING_PN_MAX-abs($_pg_for_now-$_pg_for_end);
}
for($pi=$_pg_for_start-$_pg_diff_start;$pi<=$_pg_for_end+$_pg_diff_end;$pi++){
?>
<li<?php print ($pi==$searchResult['nav']['now']?' class="active"':""); ?>><a href="/search/result?<?php print $_search_querys."&p=".$pi; ?>"><?php print $pi; ?></a></li>
<?php } ?>
<li>
<a href="/search/result?<?php print $_search_querys."&p=".$searchResult['nav']['total']; ?>" aria-label="最後のページへ">
<span aria-hidden="true"><i class="fa fa-fw fa-angle-double-right nm"></i></span>
</a>
</li>
</ul>
// spc()ってなんだよって思って忘れてた
// この処理なので、htmlspecialcharsに置き換えればいいです
function spc($getStr){
return htmlspecialchars($getStr);
}