Will_Paginate - How to add a separator between the inner_window and outer_window values?
I have implemented the following custom link renderer class:
class PaginationListLinkRenderer < WillPaginate::LinkRenderer
def to_html
links = @options[:page_links] ? windowed_links : []
links.unshift(page_link_or_span(@collection.previous_page, 'previous', @options[:previous_label]))
links.push(page_link_or_span(@collection.next_page, 'next', @options[:next_label]))
html = links.join(@options[:separator])
@options[:container] ? @template开发者_StackOverflow社区.content_tag(:ul, html, html_attributes) : html
end
protected
def windowed_links
visible_page_numbers.map { |n| page_link_or_span(n, (n == current_page ? 'current' : nil)) }
end
def page_link_or_span(page, span_class, text = nil)
text ||= page.to_s
if page && page != current_page
page_link(page, text, :class => span_class)
else
page_span(page, text, :class => span_class)
end
end
def page_link(page, text, attributes = {})
@template.content_tag(:li, @template.link_to(text, url_for(page)), attributes)
end
def page_span(page, text, attributes = {})
@template.content_tag(:li, text, attributes)
end
end
which is mostly the work of http://thewebfellas.com/blog/2008/8/3/roll-your-own-pagination-links-with-will_paginate
One issue I have though, there are 70 pages to be paginated, I have set the :inner_window=>2 and :outer_window=>2 and the pagination produces:
1 2 3 4 5 65 66 67
How can I add a "..." seperator between 5 and 65 in the page numbers?
Try using the following
# pagination_list_renderer.rb
protected
def gap_marker; '...'; end
def windowed_links
prev = nil
visible_page_numbers.inject [] do |links, n|
# detect gaps:
links << gap_marker if prev and n > prev + 1
links << page_link_or_span(n)
prev = n
links
end
end
精彩评论