DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Snippets has posted 5883 posts at DZone. View Full User Profile

Ajax_pagination_links

06.14.2005
| 9617 views |
  • submit to reddit
        Put in a helper somewhere, and use like this:
<%= ajax_pagination_links @client_pages, {:update => 'search_results', :params => {:search_query => @params[:search_query]} } %>
and just update the div your results (and the above line) are in.
       def ajax_pagination_links(paginator, options={})
         
         options.merge!(ActionView::Helpers::PaginationHelper::DEFAULT_OPTIONS) {|key, old, new| old}
         
         window_pages = paginator.current.window(options[:window_size]).pages
 
         return if window_pages.length <= 1 unless
           options[:link_to_current_page]
         
         first, last = paginator.first, paginator.last
         
         returning html = '' do
           if options[:always_show_anchors] and not window_pages[0].first?
             html << link_to_remote(first.number, :update => options[:update], :url => { options[:name] => first }.update(options[:params] ))
             html << ' ... ' if window_pages[0].number - first.number > 1
             html << ' '
           end
           
           window_pages.each do |page|
             if paginator.current == page && !options[:link_to_current_page]
               html << page.number.to_s
             else
               html << link_to_remote(page.number, :update => options[:update], :url => { options[:name] => page }.update(options[:params] ))
             end
             html << ' '
           end
           
           if options[:always_show_anchors] && !window_pages.last.last?
             html << ' ... ' if last.number - window_pages[-1].number > 1
             html << link_to_remote(paginator.last.number, :update => options[:update], :url => { options[:name] => last }.update( options[:params]))
           end
         end
       end
    

Comments

Snippets Manager replied on Thu, 2007/05/31 - 2:46pm

Disregard my May 31 comment. Bug was on my end. Sorry for pulluting the comments. Great feature. Thanks again.

Snippets Manager replied on Thu, 2007/05/31 - 2:46pm

Thanks for this. It's working nicely with one problem: My controller side call to "paginate" uses the :order, :conditions, :include, and :per_page attributes. ajax_pagination_links picks up all attributes except for the :order one. How come? pagination_links picks up the :order attribute. Sorry I couldn't understand your code to propose a fix.

Snippets Manager replied on Tue, 2006/12/26 - 10:58am

You could also add the rest of the options: link_to_remote(first.number, :update => options[:update], :url => { options[:name] => first }.update(options[:params] ), :loading => options[:loading], :complet => options[:complete]) /Carl

Snippets Manager replied on Tue, 2006/10/31 - 3:25pm

Thank u very much........i was badly in need of it :-)

Snippets Manager replied on Fri, 2006/06/09 - 4:49am

If your ajax_pagination_links call is inside the generated content, try def ajax_pagination_links(paginator, options={}) options.merge!(ActionView::Helpers::PaginationHelper::DEFAULT_OPTIONS) {|key, old, new| old} # Name parameter must be nullified in order to make pagination links work when they embedded in the updated element options[:params].delete(options[:name])

Snippets Manager replied on Mon, 2012/05/07 - 2:12pm

Could you add some "code" and "/code" tags around this to tidy it up? It looks like a great snippet otherwise.