自定义will_paginage输出_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > 自定义will_paginage输出

自定义will_paginage输出

 2012/4/18 23:20:30  sitoto  程序员俱乐部  我要评论(0)
  • 摘要:will_paginate是Rails中比较常用的分页插件,但是有时候我们可能想要自定义它的输出,这可以通过扩展WillPaginate::LinkRenderer类来实现,比如,下面的renderer将会去除Next和Previous链接(来自这里):classCustomPaginationRenderer<WillPaginate::LinkRendererdefto_htmllinks=@options[:page_links]?windowed_links
  • 标签:输出 自定义

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
????<input type="text" maxlength="5" size="3" id="page#{@@id}" />
????<input type="submit" onclick="goto_page#{@@id}()" value="Goto"/>
????<script type="text/javascript"&gt
??????function goto_page#{@@id}()
??????{
????????page = Number($('page#{@@id}').value)
????????total = #{total_pages}
????????if(page < 1 || page > total)
????????{
??????????alert('Please enter a number between 1 and ' + total + '!')
??????????return;
????????}
????????var link = '#{@template.url_for(url_options("_page"))}'
????????var new_link = link.replace("_page", page)
????????window.location.assign(new_link)
??????}
????</script>
????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中找到。

发表评论
用户名: 匿名