`
xf986321
  • 浏览: 163960 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自定义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
    <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中找到。

分享到:
评论

相关推荐

    will_paginate 2.2.2

    `will_paginate`是Rails框架中非常流行的一个分页插件,版本2.2.2是它的一个历史版本。在本文中,我们将深入探讨`will_paginate`的使用方法、功能特性以及它如何与Rails集成,帮助提升Web应用的性能和用户体验。 一...

    will_paginate分页插件

    **will_paginate分页插件详解** 在Web开发中,数据分页是一项常见的需求,它可以帮助用户更有效地浏览大量信息,提高用户体验。Rails框架中,`will_paginate`是一个非常流行且强大的分页插件,它简洁易用,功能强大...

    scaffolding+will_paginate+提供will_paginate下载

    6. **自定义分页样式**:如果你想要自定义分页链接的样式,可以创建一个名为`will_paginate.css`的CSS文件,并在项目中引用它。 除了基本的分页功能,`will_paginate`还提供了一些高级特性,如:跳过特定页码、分页...

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成.zip

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成 will_paginate-bootstrap不再维护我不再使用 Bootstrap 来使用 Rails,所以不幸的是,我不再接受请求请求或者维护这个库。 为了发布你...

    will_paginate插件下载

    《will_paginate插件详解与应用》 在Web开发中,数据分页是常见的功能,尤其是在处理大量数据时,为了提高用户体验和加载速度,我们通常会将数据分页展示。will_paginate是一款广受欢迎的Ruby on Rails插件,用于...

    will_paginate v2.3.11

    《will_paginate v2.3.11:Rails分页插件详解》 在Web开发中,处理大量的数据是常见的需求,特别是在使用Ruby on Rails框架时。为了优化用户体验,提高页面加载速度,分页功能显得尤为重要。这时,will_paginate...

    will_paginate 2.1.0

    2. **灵活的配置**:`will_paginate` 允许开发者自定义分页参数,如默认每页记录数,以及如何处理分页链接的样式和结构。 3. **与ActiveRecord集成**:`will_paginate` 无缝集成于 ActiveRecord,这意味着你可以...

    WILL_VAL - MetaTrader 5脚本.zip

    “WILL_VAL”指标可能是基于著名的威廉姆斯百分比范围(Williams' %R)的自定义技术分析工具。威廉姆斯百分比范围由Larry Williams创造,它是一个超买/超卖指标,衡量价格在特定时间段内的最高价与收盘价之间的相对...

    IRST_Intel_14.5.0.1081_W10x64_A_Will_Abintiocalcualtion_

    这个压缩包"IRST_Intel_14.5.0.1081_W10x64_A_Will_Abintiocalcualtion_"似乎包含了一个特定版本的IRST,版本号为14.5.0.1081,并且是专为64位的Windows 10操作系统设计的。"Will Abintiocalcualtion"标签可能指的是...

    DMIEDIT_utility_DMIEDIT_utility_DMIUTILITY_DMIEDIT_Will_源码.zip

    【标题】"DMIEDIT_utility_DMIEDIT_utility_DMIUTILITY_DMIEDIT_Will_源码.zip" 提供的是 DMIEDIT 工具相关的源代码。DMIEDIT 是一个用于管理并修改DMI(Desktop Management Interface)数据的实用程序。DMI 是一种...

    forth_Will_zip_forth_

    标题“Forth_Will_zip_forth_”似乎与编程语言Forth有关,同时结合描述中的“get it to use your stuff”,可能是指一个项目或程序,其中整合了Forth语言的某些功能,目的是为了使用户能够利用这些功能。标签“Will ...

    bandwidth_test_Will_voicezvv_webrtc_bandwidthmonitor_

    "bandwidth_test_Will_voicezvv_webrtc_bandwidthmonitor_"项目专注于测试WebRTC环境下的带宽使用情况,这对于优化视频通话、语音通话和数据共享等实时通信应用至关重要。 在WebRTC中,带宽测试是关键环节,因为它...

    Day Bar Info_Will_mt4_

    综上所述,"Day Bar Info_Will_mt4_"是一个针对MetaTrader 4平台的自定义技术分析工具,专注于每日K线数据的解读,提供交易收益跟踪和目标管理功能,有助于交易者优化他们的交易策略并进行有效的风险管理。...

    stm32f205rb_python_Will_

    标题中的"stm32f205rb_python_Will_"暗示了这个压缩包内容与STM32F205RB微控制器以及Python编程语言有关,可能是关于如何使用Python与这款微控制器进行通信或开发固件的教程或者资料。"Will_"可能是一个人名,代表了...

    wdt.rar_Will_watchdog reset

    ** wdT.rar_Will_watchdog_reset ** 在嵌入式系统和计算机硬件领域,"Watchdog Timer"(看门狗定时器)是一个重要的组件,它主要用于确保系统的稳定性和可靠性。当系统出现异常或死机时,看门狗定时器能够执行复位...

    PSHNewsLetterMailer2_carefully8iz_Will_Emailnotification_

    【标题】"PSHNewsLetterMailer2_carefully8iz_Will_Emailnotification_" 提供的信息表明,这是一个关于电子邮件通知的程序,可能是一个用于发送新闻通讯的邮件系统。"carefully8iz"可能代表项目的特定版本或者开发者...

    BibliographieCN_happilysai_Will_SIMULINK_

    标题"BibliographieCN_happilysai_Will_SIMULINK_"表明这可能是一个关于SIMULINK技术的中文参考文献集合,由用户"happilysai"和"Will"共同整理或涉及。SIMULINK是MATLAB环境中的一个强大工具,用于建立动态系统的...

    EMailReporter_email_Will_generator_

    总的来说,"EMailReporter_email_Will_generator_"是一款旨在提高企业内部或对外通信效率的工具,通过自动化邮件生成和发送,降低了人工操作的负担,提升了办公自动化程度。同时,它的设计和实现也涵盖了多方面的IT...

Global site tag (gtag.js) - Google Analytics