Module: ActionView::Helpers::PaginationHelper
- Defined in:
- lib/pagination_helper.rb
Overview
Provides methods for linking to ActionController::Pagination objects using a simple generator API. You can optionally also build your links manually using ActionView::Helpers::AssetHelper#link_to like so:
<%= link_to “Previous page”, { :page => paginator.current.previous } if paginator.current.previous %> <%= link_to “Next page”, { :page => paginator.current.next } if paginator.current.next %>
Constant Summary collapse
- DEFAULT_OPTIONS =
{ :name => :page, :window_size => 2, :always_show_anchors => true, :link_to_current_page => false, :params => {} }
Instance Method Summary collapse
-
#pagination_links(paginator, options = {}, html_options = {}) ⇒ Object
Creates a basic HTML link bar for the given
paginator
. -
#pagination_links_each(paginator, options, prefix = nil, suffix = nil) ⇒ Object
Iterate through the pages of a given
paginator
, invoking a block for each page number that needs to be rendered as a link.
Instance Method Details
#pagination_links(paginator, options = {}, html_options = {}) ⇒ Object
Creates a basic HTML link bar for the given paginator
. Links will be created for the next and/or previous page and for a number of other pages around the current pages position. The html_options
hash is passed to link_to
when the links are created.
Options
:name
-
the routing name for this paginator (defaults to
page
) :prefix
-
prefix for pagination links (i.e. Older Pages: 1 2 3 4)
:suffix
-
suffix for pagination links (i.e. 1 2 3 4 <- Older Pages)
:window_size
-
the number of pages to show around the current page (defaults to
2
) :always_show_anchors
-
whether or not the first and last pages should always be shown (defaults to
true
) :link_to_current_page
-
whether or not the current page should be linked to (defaults to
false
) :params
-
any additional routing parameters for page URLs
Examples
# We'll assume we have a paginator setup in @person_pages...
pagination_links(@person_pages)
# => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
pagination_links(@person_pages, :link_to_current_page => true)
# => <a href="/?page=1/">1</a> <a href="/?page=2/">2</a> <a href="/?page=3/">3</a> ... <a href="/?page=10/">10</a>
pagination_links(@person_pages, :always_show_anchors => false)
# => 1 <a href="/?page=2/">2</a> <a href="/?page=3/">3</a>
pagination_links(@person_pages, :window_size => 1)
# => 1 <a href="/?page=2/">2</a> ... <a href="/?page=10/">10</a>
pagination_links(@person_pages, :params => { :viewer => "flash" })
# => 1 <a href="/?page=2&viewer=flash/">2</a> <a href="/?page=3&viewer=flash/">3</a> ...
# <a href="/?page=10&viewer=flash/">10</a>
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/pagination_helper.rb', line 59 def pagination_links(paginator, ={}, ={}) name = [:name] || DEFAULT_OPTIONS[:name] params = ([:params] || DEFAULT_OPTIONS[:params]).clone prefix = [:prefix] || '' suffix = [:suffix] || '' pagination_links_each(paginator, , prefix, suffix) do |n| params[name] = n link_to(n.to_s, params, ) end end |
#pagination_links_each(paginator, options, prefix = nil, suffix = nil) ⇒ Object
Iterate through the pages of a given paginator
, invoking a block for each page number that needs to be rendered as a link.
Options
:window_size
-
the number of pages to show around the current page (defaults to
2
) :always_show_anchors
-
whether or not the first and last pages should always be shown (defaults to
true
) :link_to_current_page
-
whether or not the current page should be linked to (defaults to
false
)
Example
# Turn paginated links into an Ajax call
pagination_links_each(paginator, ) do |link|
= { :url => {:action => 'list'}, :update => 'results' }
= { :href => url_for(:action => 'list') }
link_to_remote(link.to_s, , )
end
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/pagination_helper.rb', line 93 def pagination_links_each(paginator, , prefix = nil, suffix = nil) = DEFAULT_OPTIONS.merge() link_to_current_page = [:link_to_current_page] always_show_anchors = [:always_show_anchors] current_page = paginator.current_page window_pages = current_page.window([:window_size]).pages return if window_pages.length <= 1 unless link_to_current_page first, last = paginator.first, paginator.last html = '' html << prefix if prefix if always_show_anchors and not (wp_first = window_pages[0]).first? html << yield(first.number) html << ' ... ' if wp_first.number - first.number > 1 html << ' ' end window_pages.each do |page| if current_page == page && !link_to_current_page html << page.number.to_s else html << yield(page.number) end html << ' ' end if always_show_anchors and not (wp_last = window_pages[-1]).last? html << ' ... ' if last.number - wp_last.number > 1 html << yield(last.number) end html << suffix if suffix html end |