LoginSignup
0
0

More than 5 years have passed since last update.

phpをテンプレートにした時に偏らないページネーション

Last updated at Posted at 2017-04-17

自分メモ 変数とかきたねえ
というかこれリスト全部出力してjqueryあたりで表示範囲切り替えたほうがいいのではって思ったけど
探したんだけど良さそうなのなかったので、なんかもっと綺麗ないい方法あったら教えてください;w;

本題
こういう偏らないようになるやつ(これは前後4つ、合わせて9個表示される)

スクリーンショット 2017-04-17 20.59.49.png

スクリーンショット 2017-04-17 20.59.55.png

テンプレートの方

// 定数
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."&amp;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."&amp;p=".$pi; ?>"><?php print $pi; ?></a></li>
    <?php } ?>
    <li>
        <a href="/search/result?<?php print $_search_querys."&amp;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);
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0