min-oさん、こんにちは
私もつい最近、同じようなことがあり、ちょうどブログに書こうと思っていたところです。
結論から言うと、Dittoにはそのあたりをコントロールする仕組みは無いようです。
ですので、私の場合は、直接Dittoのpaginateのソースに手を加えました。
仕様としては、min-oさんのような仕様やGoogleも候補にあがりましたが、
結果的に、以下のようなYahoo!Japanの仕様にあわせることにしました。
--------
・全体で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 次へ>
:
--------
仕様が違いますので、参考になるかわかりませんが、私が手を加えた箇所を書いておきますね。
assets/snippets/ditto/classes/ditto.class.inc.php
のpaginateメソッドの以下の2箇所にコードを追加挿入しました。
1)
(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;
}
上記の場合は、表示するページ番号(リンク)の範囲を狭めるだけですが、
もし、min-oさんのように、コントロールするなら、
表示するページ番号の範囲計算を変えて、ブロック移動用のプレイスフォルダも作ると良いかと思います。