【PHP】学習メモ一覧⑦
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となるため通過。
- 1 < 1+2+1 && 1 > 1-2-1 となる。
→現在ページ数にあたるため、遷移不可のページ番号表記。
- かつ$i=2のとき
- 2 < 1+2+1 && 2 > 1-2-1
- 両方trueとなるため通過。
- 2 < 1+2+1 && 2 > 1-2-1
→遷移可のページ番号
- かつ$i=3のとき
- 3 < 1+2+1 && 3 > 1-2-1
- 両方trueとなるため通過。
- 3 < 1+2+1 && 3 > 1-2-1
→遷移可のページ番号
- かつ$i=4のとき
- 4 < 1+2+1 && 4 > 1-2-1
- $i < $paged+$range+1がfalseとなるため非通過。
- 4 < 1+2+1 && 4 > 1-2-1
→ページ番号自体表記されない。
- かつ$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となるため非通過。
- 1 < 4+2+1 && 1 > 4-2-1 となる。
→ページ番号自体表記されない。
- かつ$i=2のとき
- 2 < 4+2+1 && 2 > 4-2-1
- 両方trueとなるため通過。
- 2 < 4+2+1 && 2 > 4-2-1
→遷移可のページ番号
- かつ$i=3のとき
- 3 < 4+2+1 && 3 > 4-2-1
- 両方trueとなるため通過。
- 3 < 4+2+1 && 3 > 4-2-1
→遷移可のページ番号
- かつ$i=4のとき
- 4 < 4+2+1 && 4 > 4-2-1
- 両方trueとなるため通過。
- 4 < 4+2+1 && 4 > 4-2-1
→現在ページ数にあたるため、遷移不可のページ番号表記。
- かつ$i=5のとき
- 5 < 4+2+1 && 5 > 4-2-1
- 両方trueとなるため通過。
- 5 < 4+2+1 && 5 > 4-2-1
→遷移可のページ番号
- かつ$i=6のとき
- 6 < 4+2+1 && 6 > 4-2-1
- 両方trueとなるため通過。
- 6 < 4+2+1 && 6 > 4-2-1
→遷移可のページ番号
- かつ$i=7のとき
- 7 < 4+2+1 && 7 > 4-2-1
- $i < $paged+$range+1がfalseとなるため非通過。
- 7 < 4+2+1 && 7 > 4-2-1
→ページ番号自体表記されない。
- かつ$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となるため非通過。
- 4 < 7+2+1 && 4 > 7-2-1
→ページ番号自体表記されない。
- かつ$i=5のとき
- 5 < 7+2+1 && 5 > 7-2-1
- 両方trueとなるため通過。
- 5 < 7+2+1 && 5 > 7-2-1
→遷移可のページ番号
- かつ$i=6のとき
- 6 < 7+2+1 && 6 > 7-2-1
- 両方trueとなるため通過。
- 6 < 7+2+1 && 6 > 7-2-1
→遷移可のページ番号
- かつ$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となる。
- $i < $paged+$range+1(1 < 8)がtrueとなる。
→遷移不可のページ番号