开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜