我希望Kaminari能够通过分页控制显示固定计数的分页链接,例如每个导航页面上的10个链接。 Kaminari默认在第一页显示6个页面链接,当您继续浏览直到达到9个项目时,页面链接会继续增长。
我在这里展示的图片,当我第一次加载时,它总共会有5个链接。
当我继续浏览时,它会增长。
在您浏览第5个链接之前,它仅显示9个链接。
即使在使用Kaminari导航的开头或结尾,我如何始终保持链接数为10。我尝试过Kaminari config.window,但这不是我想要的。
答案 0 :(得分:9)
你可以修补Kaminari的Paginator
和PageProxy
类。通过覆盖relevant_pages
,inside_window?
,left_outer?
和right_outer?
等方法,您可以控制何时在分页视图助手中显示页面链接。
要开始使用,请在名为config/initializers
的{{1}}中创建一个新文件并粘贴以下代码:
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
,那么当前页面总共会显示10个链接和另一个window: 5
。
要了解详情,请查看源代码https://github.com/amatsuda/kaminari/blob/master/lib/kaminari/helpers/paginator.rb
答案 1 :(得分:1)
我无法得到上面的答案。我所做的是计算窗口大小并将其传递给我的分页部分。
window = @items.current_page < 5 ? 5 - @items.current_page : 1
render partial: 'pagination; locals: {items: @items, window: window}
.col-lg-6.pull-right
...
= paginate items, remote: true, window: window
...
答案 2 :(得分:0)
使用自定义主题的人:
视图中(超薄文件):
...other code...
- each_side = 4 # in case want to show 10 pages
= paginate items, left: each_side * 2 + 1, right: each_side * 2 + 1, theme: 'your-theme'
在app / views / kaminari / your-theme / _paginator.html.slim中:
ruby:
each_side = 4 # in case want to show 10 pages
if current_page - each_side < 1
top_page = 1
bottom_page = top_page + each_side * 2 + 1 > total_pages ? total_pages : top_page + each_side * 2 + 1
elsif current_page + each_side + 1 > total_pages
bottom_page = total_pages
top_page = bottom_page - each_side * 2 - 1 < 1 ? 1 : bottom_page - each_side * 2 - 1
else
top_page = current_page - each_side
bottom_page = current_page + each_side + 1
end
= paginator.render do
nav.pagination
ul.pagination-list
# for rendering first_page link
# == first_page_tag unless current_page.first?
== prev_page_tag unless current_page.first?
- each_page do |page|
- if page <= bottom_page && page >= top_page
== page_tag page
== next_page_tag unless current_page.last?
# for rendering last_page link
# == last_page_tag unless current_page.last?