DittoのページングをYahoo!Japanっぽくシンプルにする
modxスニペット「Ditto」のページングは、ページ数が少ない間は良いのですが、ページ数が多くなってくると、そのままページ番号がずらずらと並ぶだけで、使いにくくなってきます。
現状のDittoには、10ページ毎にまとめる等の機能がありませんので、直接ソースに手を加えて改造するしかありません。
まず、ページングの仕様ですが、(Google仕様も検討しましたが、最大20ページ出るのは、ちょっと多すぎだと思うので、)以下のような現在のYahoo!Japanの仕様を参考にしました。(Bingになったらどうなるかわかりませんが)
-
-
-
-
-
-
- -
-
-
-
-
-
・全体で10ページ以上ある場合、10ページ分の番号表示
・現在のページより小さい側に5ページ、大きい側に4ページあれば、これを表示
つまり、7ページ目から全体がシフトする
例) [1] 2 3 4 5 6 7 8 9 10 次へ>
<前へ 1 [2] 3 4 5 6 7 8 9 10 次へ>
:
<前へ 1 2 3 4 5 [6] 7 8 9 10 次へ>
<前へ 2 3 4 5 6 [7] 8 9 10 11 次へ>
:
-
-
-
-
-
-
- -
-
-
-
-
-
■改造方法
modxに同梱のソース
assets/snippets/ditto/classes/ditto.class.inc.php
のpaginateメソッドの以下の2箇所にコードを追加挿入します。
1)
if ($inc != $start) {
(modx1.0.0Jの場合は1123行目、0.9.6.3の場合は1113行目)の直前に
if ($x < $min_x) { continue; } if ($x > $max_x) { continue; }
を追加挿入。
2)
for ($x = 0; $x <= $totalpages -1; $x++) {
(modx1.0.0Jの場合は1120行目、0.9.6.3の場合は1110行目)の直前に
$max_paginate = 10; $max_previous = 5; $cur_x = floor($start / $summarize); $min_x = $cur_x - $max_previous; if ($min_x < 0) { $min_x = 0; } $max_x = $min_x + $max_paginate - 1; if ($max_x > $totalpages - 1) { $max_x = $totalpages - 1; $min_x = $max_x - $max_paginate + 1; }
を追加挿入。