自定义will_paginage输出

阅读更多

自定义will_paginage输出

will_paginate 是Rails中比较常用的分页插件,但是有时候我们可能想要自定义它的输出,这可以通过扩展WillPaginate::LinkRenderer类来实现,比如,下面的renderer将会去除Next和Previous链接(来自这里 ):

class CustomPaginationRenderer < WillPaginate::LinkRenderer
  def to_html
    links = @options[:page_links] ? windowed_links : []    
    html = links.join(@options[:separator])
    @options[:container] ? @template.content_tag(:div, html, html_attributes) : html
  end  
end

要在view中使用这个自定义的renderer,只需要加上:renderer参数即可:


<%= will_paginate @items, :renderer => 'CustomPaginationRenderer' %>

下面给出一个更复杂的自定义Renderer,它会在分页链接后显示一个文本框,以及一个‘Goto’按钮,允许用户直接跳转到某一页:


class CustomPaginationRenderer < WillPaginate::LinkRenderer
  @@id = 1
  def to_html
    links = @options[:page_links] ? windowed_links : []
    # previous/next buttons
    links.unshift page_link_or_span(@collection.previous_page, 'disabled', @options[:prev_label])
    links.push    page_link_or_span(@collection.next_page,     'disabled', @options[:next_label])
    html = links.join(@options[:separator])
    html += goto_box
    @options[:container] ? @template.content_tag(:div, html, html_attributes) : html
  end
  private
  def goto_box
    @@id += 1
    @@id = 1 if @@id > 100
  <<-GOTO
    
    
    
    GOTO
  end
end

@@id的作用是因为一个view中有可能多次调用will_paginate,需要对inputbox进行区分,这个renderer还用到了一些继承自WillPaginate::LinkRenderer的方法:

  • url_for(page), 返回指向某页的链接,比如url_for(1) => ‘/posts?page=1′
  • total_pages, 返回总页数
  • page_link_or_span,返回指向某页面的链接

更多方法可以在WillPaginate的view_helper.rb中找到。

你可能感兴趣的:(Rails,HTML,JavaScript)