10

カミナリで、ページネーション コントロールを使用して固定数でページネーション リンクを表示するようにしたいと考えています。たとえば、各ナビゲーション ページに 10 個のリンクがあります。カミナリのデフォルトでは、最初のページに 6 つのページ リンクが表示され、閲覧を続けるとページ リンクは 9 項目に到達するまで成長し続けます。

ここに写真を示します。最初にロードすると、合計で 5 つのリンクが表示されます。

ここに画像の説明を入力

ブラウジングを続けると、それは成長します。

ここに画像の説明を入力

5 番目のリンクを参照するまで、合計 9 個のリンクしか表示されません。

ここに画像の説明を入力

カミナリとのナビゲーションの最初でも最後でも、リンク数を常に 10 にする方法を教えてください。私はKaminari config.windowを試しましたが、それは私が望むものではありません.

4

3 に答える 3

10

カミナリPaginatorPageProxyクラスにモンキー パッチを適用できます。relevant_pages、、、、などのメソッドをオーバーライドすることinside_window?left_outer?right_outer?ページ リンクがページ ビュー ヘルパーに表示されるタイミングを制御できます。

config/initializers開始するには、 calledで新しいファイルを作成kaminari.rbし、次のコードを貼り付けます。

module Kaminari
  module Helpers
    class Paginator < Tag
      def relevant_pages(options)
        1..options[:total_pages]
      end

      class PageProxy
        def inside_window?
          if @options[:current_page] <= @options[:window]
            @page <= (@options[:window] * 2) + 1
          elsif (@options[:total_pages] - @options[:current_page].number) < @options[:window]
            @page >= (@options[:total_pages] - (@options[:window] * 2))
          else
            (@options[:current_page] - @page).abs <= @options[:window]
          end
        end
      end
    end
  end
end

それはきれいではありませんが、それは仕事を成し遂げます。ビューで設定window: 5すると、常に合計 10 個のリンクと<span>現在のページの別のリンクが表示されます。

詳細については、ソース コードを確認してください https://github.com/amatsuda/kaminari/blob/master/lib/kaminari/helpers/paginator.rb

于 2013-04-05T21:25:47.667 に答える
2

上記の答えを得ることができませんでした。私がしたことは、ウィンドウのサイズを計算し、それをページネーションのパーシャルに渡すことでした。

コントローラ

  window = @items.current_page < 5 ? 5 - @items.current_page : 1
  render partial: 'pagination; locals: {items: @items, window: window}

_pagination.html.slim

.col-lg-6.pull-right
  ...
  = paginate items, remote: true, window: window
  ...
于 2015-06-09T17:38:21.633 に答える