Je viens de terminer la mise en place d’options de filtrage sur les différents tableaux de classement de l’administration de Typo, pour les billets, les pages, et les pièces jointes.

tableau de classement de Typo

Une des difficultés était de passer les paramètres de filtrage d’une page à l’autre via la plugin classic_pagination, sans ajouter une quantité considérable de code. Chaque tableau dispose en effet de ses propres filtres, et si on peut retrouver certaines similitudes d’un controller à l’autre, ce n’est pas toujours le cas.

Pour ce faire, j’ajoute un helper nommé params_qsa dans chaque controller à traiter. Ce dernier contiendra l’ensemble des paramètres à ajouter à la requête GET pour effectuer la recherche. Lesdits paramètres sont ensuite traités dans le module de recherche pour éviter les attaques.

def params_qsa
  { 'search[category]' => @search[:category], 
    'search[user_id]' => @search[:user_id], 
    'search[published_at]' => @search[:published_at], 
    'searched[published]' => @search[:published] }
end

Dans chaque controller à traiter, j’ai déclaré une variable de class @search, qui contient la liste des paramètres envoyés par le formulaire de recherche.

@search = params[:search]

Pour finir, je vais utiliser un partial, que j’appellerai en bas de chacun des tableaux, et qui affichera les liens précédent, suivant, et les liens vers les différentes pages.

link_to "Page précédente", :id => pages.current.previous, :params => params_qsa  if pages.current.previous    
pagination_links pages, {:name => 'id' , :params => params_qsa}
link_to "Page suivante", :id => pages.current.next, :params => params_qsa  if pages.current.next

Et voilà, c’est fait. Si vous avez plus propre, je suis évidemment preneur, sachant que je ne suis en aucun cas adepte du refactoring par le vide ;-).

Perry the Platypus wants you to subscribe now! Even if you don't visit my site on a regular basis, you can get the latest posts delivered to you for free via Email: