Pagination des commentaires en AJAX avec Typo (ou n'importe quelle autre application en Ruby on Rails)
Quand j’ai lu il y a une vingtaine de minutes que Wordpress 2.7 proposait (enfin) la pagination des commentaires, mon sang n’a fait qu’un tour : si Wordpress le fait, pas question que Typo, le blogware en Ruby on Rails qui équipe ce site et bien d’autres ne le fasse pas. 10 minutes plus tard, j’avais un truc fonctionnel, que je ne peux m’empêcher de partager avec vous, parce que vous le valez bien ©
Ce didacticiel s’applique à la version en cours de développement de Typo, qui utilise pour la pagination will_paginate au lieu de classic_pagination.
Dans un premier temps, nous allons ajouter le support des liens en AJAX à will_paginate, en réutilisant le code proposé par Redline Software. Nous allons tout simplement surcharger la classe LinkRenderer utilisée par will_paginate afin d’afficher les liens.
# 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
endNous allons ensuite ajouter la pagination aux commentaires d’un billet. Pour cela, nous allons éditer la méthode show du contrôleur Articles :
# 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...")
endIl 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 => { :update => 'commentList'} %>Et la cerise sur le gâteau, c’est que si vous n’avez pas Javascript activé, ça marche aussi. Quant à moi, il ne vous reste plus qu’à aller écrire quelques specs, tester un peu, et commiter tout ça avant de sombrer dans les bras de Morphée.
Publié le 07 décembre 2008 à 22h13 Publié sous Typo
Mots clés développement, ajax, accessibilité, ruby, rubyonrails, rails
Si cet article vous a plu, suivez-moi sur Twitter
0 commentaire sur Pagination des commentaires en AJAX avec Typo (ou n'importe quelle autre application en Ruby on Rails) »
Trackbacks sur Pagination des commentaires en AJAX avec Typo (ou n'importe quelle autre application en Ruby on Rails)
Les trackbacks sont fermés pour cause de spam.
L'ergonomie web, l'utilisabilité et la qualité des logiciels sont trois grandes passions mises au services de ma profession.