【PHP】学習メモ一覧⑦

  • 2022/09/23
  • コラム

4.ページネーションの詳細について(以下コードが難解のため記載)

  for ($i=1; $i <= $pages; $i++) {
    if (1 != $pages &&(!($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
      if ($paged == $i) {
        echo ‘<li class=”active”>’ .$i. ‘</li>’;
      } else {
        echo ‘<li><a href=”‘ . esc_url(get_pagenum_link($i)) . ‘”>’ .$i. ‘</a></li>’;
      }
  }

$pages = 7//Maxページ数(変更可)

$paged//現在のページ番号

$ranged = 2//一定数のページ数を超えた際に、表記させるページ番号の範囲設定(変更可)

$showitems = 5//ページ番号を全て表記する限度数($showitems = ($range * 2) + 1’)

詳細解説:

(!($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))

について

!($i >= $paged+$range+1 || $i <= $paged-$range-1)

もしくは

$pages <= $showitems

ならばtrueを返す。

  • $pages <= $showitemsについて解説

→『最大ページ数』 <= 5となる。

  • 合計ページが5ページ以内の場合:該当コードがtrueとなり、

どのページを開いていてた場合でも、全てのページ番号を表記する。

  • 合計ページが6ページ以上ある場合:は$pages <= $showitemsがfalseとなるため、

!($i >= $paged+$range+1 || $i <= $paged-$range-1)の判定に入る。

  • !($i >= $paged+$range+1 || $i <= $paged-$range-1)について解説。

→上記簡潔にすると!(A || B)となり、(!A && !B)と同じになる。

つまり、

$i < $paged+$range+1 && $i > $paged-$range-1となる。

  • 上記を踏まえると最大ページが6ページ以上ある場合は、

$i < $paged+$range+1 && $i > $paged-$range-1

の処理を通るため、こちらのページネーション処理について解説。

①$paged=1のとき

  • かつ$i=1のとき
    • 1 < 1+2+1 && 1 > 1-2-1 となる。
      • 両方trueとなるため通過。

→現在ページ数にあたるため、遷移不可のページ番号表記。

  • かつ$i=2のとき
    • 2 < 1+2+1 && 2 > 1-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=3のとき
    • 3 < 1+2+1 && 3 > 1-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=4のとき
    • 4 < 1+2+1 && 4 > 1-2-1
      • $i < $paged+$range+1がfalseとなるため非通過。

→ページ番号自体表記されない。

  • かつ$i=5,6,7のとき
    • $i=4のときと同様 $i < $paged+$range+1がfalseとなるため非通過。

→ページ番号自体表記されない。

➡︎結論:$paged=1のときは、1,2,3のページ番号が表記され、2,3は該当ページへ遷移可能

②$paged=4のとき

  • かつ$i=1のとき
    • 1 < 4+2+1 && 1 > 4-2-1 となる。
      • $i > $paged-$range-1がfalseとなるため非通過。

→ページ番号自体表記されない。

  • かつ$i=2のとき
    • 2 < 4+2+1 && 2 > 4-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=3のとき
    • 3 < 4+2+1 && 3 > 4-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=4のとき
    • 4 < 4+2+1 && 4 > 4-2-1
      • 両方trueとなるため通過。

→現在ページ数にあたるため、遷移不可のページ番号表記。

  • かつ$i=5のとき
    • 5 < 4+2+1 && 5 > 4-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=6のとき
    • 6 < 4+2+1 && 6 > 4-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=7のとき
    • 7 < 4+2+1 && 7 > 4-2-1
      • $i < $paged+$range+1がfalseとなるため非通過。

→ページ番号自体表記されない。

  • かつ$i=5,6,7のとき
    • $i=4のときと同様 $i < $paged+$range+1がfalseとなるため非通過。

→ページ番号自体表記されない。

➡︎結論:$paged=4のときは、2,3,4,5,6のページ番号が表記され、2,3,5,6は該当ページへ遷移可能

$paged=7のとき

  • かつ$i=1,2,3のとき
    • $i=4のときと同様 $i < $paged+$range+1がfalseとなるため非通過。

→ページ番号自体表記されない。

  • かつ$i=4のとき
    • 4 < 7+2+1 && 4 > 7-2-1
      • $paged-$range-1がfalseとなるため非通過。

→ページ番号自体表記されない。

  • かつ$i=5のとき
    • 5 < 7+2+1 && 5 > 7-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=6のとき
    • 6 < 7+2+1 && 6 > 7-2-1
      • 両方trueとなるため通過。

→遷移可のページ番号

  • かつ$i=7のとき
    • 7 < 7+2+1 && 7 > 7-2-1
  • 両方trueとなるため通過。

→現在ページ数にあたるため、遷移不可のページ番号表記。

➡︎結論:$paged=7のときは、5,6,7のページ番号が表記され、5,6は該当ページへ遷移可能

②$paged=5のとき

  • かつ$i=1のとき
    • $i < $paged+$range+1(1 < 8)がtrueとなる。
      • かつ$paged == $iのためactiveとなる。

→遷移不可のページ番号

本ページをご一読頂きありがとうございます。
今後はポートフォリオや技術記事、その他プライベートな記事などを投稿していく予定です。
また、AWSのサービスを利用しておりますので、そちらを利用した環境構築の際にはサポートも可能となっております。
その他、ご依頼等ございましたらお気軽にコンタクトフォームより必要項目をご記入頂き内容を送信して頂けますと幸いです。
(投稿している記事の実際のページにつきましては、一部サーバーに移していないものもありますので、そちらにつきましては移し次第URLを添付致します。)