We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19592
    • 56 Posts
    こんにちは。

    Ditto paginate で1ページ10件表示でページ分割しています。
    [+myDittoCall_previous+] [+myDittoCall_pages+] [+myDittoCall_next+]


    [+myDittoCall_pages+]の部分には、分割した全てのページが表示・リンクされますが
    分割ページが数多くなった場合に
    ---------
    前へ 1 2 3 4 5 6 7 8 9 10 次へ
    ---------
    次へクリックすると
    ---------
    前へ 2 3 4 5 6 7 8 9 10 11 次へ
    ---------
    のように分割ページを、常に10ページ分表示する、というふうにできないでしょうか?

    ---------
    前の10ページ 前へ 1 2 3 4 5 6 7 8 9 10 次へ 次の10ページ
    ---------
    のような形でもかまいません。

    現在分割ページが21ページになってしまい、ちょっと見づらくなってしまったので、こちらでご相談します。
    よろしくお願いします。

    modx 0.9.6.3
    ditto 2.1.0
    です。
    • paginateファンクションのあたりを少しさわればなんとかなりそうですね。近いうちに見てみます。
        • 15497
        • 117 Posts
        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)
        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;
        		}
        

        上記の場合は、表示するページ番号(リンク)の範囲を狭めるだけですが、
        もし、min-oさんのように、コントロールするなら、
        表示するページ番号の範囲計算を変えて、ブロック移動用のプレイスフォルダも作ると良いかと思います。
          ★日本公式フォーラム2009年9月1日本格始動!★
          http://modxcms-jp.com/bb/

          ▼ウェブ屋のCMS→modxヒキダス流(備忘録)
          http://d.hatena.ne.jp/hikidas_ikeda/
          ▼制作済みHTMLページをmodxで更新するデモ
          http://www.hikidas.com/hikidas/modx_document/modx_demo_osc2009kansai.php
          • 19592
          • 56 Posts
          >kazuikeさん
          やはりdittoそのままではこの機能はなかったのですね。

          ご提案の修正、やってみたところ、大変すっきり見やすくなりました。 laugh
          細かい表示方法については、こだわりはなかったので、ご提案のyahooスタイルで行こうと思います。

          ありがとうございました。

          >yamaさん
          ソースをいじらなくても出来たりすると、大変便利なので、よろしくお願いします。
          またこういったページ移動ナビゲーションの方法は、スニペットごとではなく、modx全体である程度統一されてたりするとわかりやすいですね。
          • ども。僕が考えてたのもkazuikeさんと同じです。全体をシフトさせるイメージとか、kazuikeさんのほうがずっと具体的ですが。
            Ditto改善案として持ち込むのがよさそうですね。