TUTORIEL/PRATIQUE
 
11/12/2008

Blog : pagination des commentaires en Ajax, avec Ruby on Rails

Voici comment aboutir à une pagination des commentaires dans une application Ruby on Rails. Exemple avec Typo : un outil de blogs basé sur cette infrastructure de développement.
  Envoyer Imprimer  

En savoir plus

Si Wordpress propose la pagination des commentaires, alors pourquoi pas Typo, le blogware en Ruby on Rails qui équipe de nombreux sites ? Ce didacticiel s'applique à la version en cours de développement de Typo, qui utilise pour la pagination willpaginate au lieu de classicpagination, mais pourrait être étendu à toute application reposant sur Ruby on Rails.

Dans un premier temps, nous allons ajouter le support des liens en Ajax à willpaginate, en réutilisant le code proposé par Redline Software.

# app/helpers/remote_link_renderer.rb 


class RemoteLinkRenderer < WillPaginate::LinkRenderer
  def prepare(collection, options, template)
     @remote = options.delete(:remote) || {}
    super 
  end





protected
   def page_link(page, text, attributes = {})      
@template.link_to_remote(text, {:url => url_for(page), :method => :get}.merge(@remote))
    end
end

 

Nous allons tout simplement surcharger la classe LinkRenderer utilisée par willpaginate afin d'afficher les liens.

 # app/controllers/articles_controller.rb 
def show 
  @article = this_blog.requested_article(params)

@comment = Comment.new
  @comments = @article.published_comments.paginate(:page => params[:page], :per_page => 10)
  @page_title = @article.title
  article_meta





auto_discovery_feed
  respond_to do |format|
    format.html { render :action => ?read? }
    format.atom { render :partial => ?articles/atom_feed?, :object => @article.published_feedback }
    format.rss { render :partial => ?articles/rss20_feed?, :object => @article.published_feedback }
    format.xml { redirect_to :format => ?atom? }
  end 
  rescue ActiveRecord::RecordNotFound 
    error("Post not found?")
end

 

Il ne nous reste plus qu'à modifier le rendu des commentaires, côté vues, cette fois. Je pars du principe que vous utilisez un des thèmes par défaut, sinon il vous faudra adapter.

 # themes/votretheme/views/articles/_comment_list.html.erb 
<ol id="commentList" class="comments"> 
  <% if @comments.any? -%> 
    <%= render(:partial => "comment", :collection => @comments) %> 
  <% else -%> 
    <li class="dummy_comment" style="display:none"><%= _("No comments")%></li> 
  <% end -%>





</ol>
<%= will_paginate @comments, :renderer => ?RemoteLinkRenderer? , :remote => {

 

En savoir plus

Et la cerise sur le gâteau, c'est que si vous n'avez pas JavaScript activé, ça marche aussi.

 

 

Tutoriel réalisé par Frédéric de Villamil, sous licence Creative Commons


JDN Développeur Envoyer Imprimer Haut de page
Votre avis sur cette publicité

Sondage

Quelle est votre technologie de RIA préférée ?

Tous les sondages

BOURSE

RUBRIQUES