【问题标题】:Jump to the midde with Kaminari pagination使用 Kaminari 分页跳到中间
【发布时间】:2016-04-15 13:58:12
【问题描述】:

假设我有 30 页正在使用 Kaminari 进行分页:

#800 books, 25 per page
=paginate @books, :outer_window => 3, :window => 3

看起来像这样:

1 2 3 4 … 30 31 32

不点击 5 次就无法到达第 16 页。

  1. 1* 2 3 [ 4 ] … 30 31 32
  2. 1 2 3 4* 5 6 [ 7 ] … 30 31 32
  3. 1 2 3 4 5 6 7* 8 9 [ 10 ] … 30 31 32
  4. 1 2 3 … 7 8 9 10* 11 12 [ 13 ] … 30 31 32
  5. 1 2 3 … 10 11 12 13* 14 15 [ 16 ] … 30 31 32

(* 当前页面,[] = 点击)

要到达堆栈的中间似乎需要做很多工作。

  1. 如何在单击间隙 (...) 时扩展 Kaminari 以转到第 16 页?
  2. 是否可以扩展 Kaminari 以从一开始就显示中间?

1 2 3 4 ... 15 16 17 ... 30 31 32

【问题讨论】:

  • 你试过这个section of readme吗?我没有任何使用 kaminari 的项目,但我认为一旦你有了视图,定制它们应该很简单
  • 我生成了视图,但似乎没有任何方法可以获取间隙之前或之后的页面。您可以像@kacz 所说的那样执行 num_page/2 ,但这仅在您位于第一页时才有效。当您有两个间隙时,我很想看看间隙之前和之后链接的页面,然后您可以做一些简单的算术来获得中点。

标签: ruby-on-rails pagination kaminari


【解决方案1】:

扩展 kaminari 视图元素非常简单。需要自定义分页助手,https://github.com/amatsuda/kaminari#customizing-the-pagination-helper

具体来说,假设您使用的是 ERB,您需要编辑新的 app/views/kaminari/_gap.html.erb 文件。

<%
  url,data = url.split('?')
  url += '?page=' + (num_pages/2)
%>
<span class="page gap">
  <%= link_to_unless page.current?, page, url %>
</span>

这会创建一个链接到您的中间(实际上是num_pages/2-th)页面。

【讨论】:

  • 你是如何在间隙视图中获得 url 的?此外,无论间隙标签在哪里,它都会跳到中间。有时有两个间隙标签(1 2 3 4 ... 15 16 17 ... 30 31 32),单击 4 '...' 15 并在第 16 页结束是没有意义的。
  • url是从已有的url构造的,并添加了指向gap中间的page参数。那是在第 2 行和第 3 行。如果单击 4 和 5 之间的省略号,您想转到哪个页面?如果您也想涵盖这种情况,您需要打开app/views/kaminari/ _paginator.html.erb 并在此行github.com/amatsuda/kaminari/blob/master/app/views/kaminari/… 删除|| page.inside_window?,将其移至它自己的特殊if 子句并处理左右间隙分开。
【解决方案2】:

您可以使用内部和外部窗口选项 (link),但我认为这不会解决您的问题。

正如@Michal Szyndel 的评论所提到的,您将需要使用生成器(rails g kaminari:views THEME 注意:您可以通过 -e 来生成不同的模板语言)。生成文件后,您可以使用一些自定义逻辑编辑“分页器”部分。有关如何执行此操作的介绍,请观看 Ryan 的 railscast(从 4:53 开始)

希望这能让您走得更远,因为当您不在分页的开头或结尾时,中间窗口的工作方式将取决于您的窗口大小和您想要的内容。 (例如,如果你有一个 3 的外部窗口和一个 2 的内部窗口,有 50 页,当你在第 15 页时,分页器链接应该是什么样子?)

如果您需要更多帮助,请回复评论,我会更具体地回答。

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 2012-02-18
    • 2012-02-04
    • 2013-01-10
    • 1970-01-01
    • 2012-11-24
    • 2011-07-06
    • 2011-08-02
    相关资源
    最近更新 更多