注册
 找回密码
 注册
江西广告网
查看: 362|回复: 0
打印 上一主题 下一主题

自定义will_paginage

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-2-12 09:00:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
自定义will_paginage输出 ill_paginate是Rails中比较常用的分页插件,但是有时候我们可能想要自定义它的输出,这可以通过扩展WillPaginate:inkRenderer类来实现,比如,下面的renderer将会去除Next和Previous链接: Ruby代码 class CustomPaginationRenderer < WillPaginate:inkRenderer 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 class CustomPaginationRenderer < WillPaginate:inkRenderer 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 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参数即可: Html代码 <%= will_paginate @items, ;:renderer => ‘CustomPaginationRenderer’ %> view plaincopy to clipboardprint? <%= will_paginate @items, ;:renderer => ‘CustomPaginationRenderer’ %> <%= will_paginate @items, ;:renderer => ‘CustomPaginationRenderer’ %> 下面给出一个更复杂的自定义Renderer,它会在分页链接后显示一个文本框,以及一个‘Goto’按钮,允许用户直接跳转到某一页: Ruby代码 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" value="Goto"/> <script type="text/javascript"> 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 [1] [2] 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" value="Goto"/> <script type="text/javascript"> 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 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" value="Goto"/> <script type="text/javascript"> 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中找到。 上一页 [1] [2]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表