2009-08-20 10 views
1

Je travaille avec le plugin Rails mislav-will_paginate pour paginer mes enregistrements. Je veux produire la sortie suivante, que il y avait plusieurs pages:Overriding Rails plugin mislav-will_paginate

X - Y of Z 
1 - 100 of 1826 

will_paginate dans WillPaginate :: nil si les rendements aides de vue il n'y avait qu'une seule page d'enregistrements. Je veux remplacer ceci de la manière la plus propre possible pour produire la sortie ci-dessus s'il n'y avait qu'une seule page, ou la sortie ci-dessus entourée de la sortie habituelle s'il y avait plusieurs pages.

J'ai remplacé la méthode toPathinate :: LinkRenderer to_html pour produire cette sortie, mais je n'arrive pas à comprendre comment la produire s'il n'y a qu'une seule page d'enregistrements. Dois-je déplacer le code pour produire X-Y de Z ailleurs et l'appeler à la fois de ma méthode to_html de dépassement de capacité, et de l'endroit où je fais mon appel will_paginate s'il renvoie zéro? Si oui, où devrait-il vivre?

+0

Je suppose que ces chiffres représentent le nombre d'éléments affichés sur la page en cours et combien sont-ils totaux? Et vous voulez toujours afficher ceci, que les liens de pagination existent ou non? Dans ce cas, pourquoi ne pas le garder en dehors de l'appel will_paginate et l'implémenter dans votre vue ou méthode d'assistance personnalisée? – ryanb

+0

Les deux hypothèses sont correctes. Je suis désireux de les rouler ensemble parce qu'ils sont logiquement liés; chaque fois que j'appelle will_paginate, je veux aussi afficher les totaux. Je veux aussi afficher les totaux entre les liens de pages que will_paginate produit, par exemple Gmail. Le moyen le plus propre de le faire semble être d'obtenir will_paginate pour afficher les totaux dans sa méthode to_html. – nfm

Répondre

1

Ok, voici ce que je l'ai fait:

  • Création d'un module Paginator
  • Inclus le module Paginator dans l'aide de mon modèle
  • appelé Paginator.paginate dans mes vues
  • définies Paginator.paginate à appelez Paginator.produce_totals s'il n'y avait qu'une seule page ou appelez will_paginate (la méthode normale) pour plusieurs pages
  • Défini Paginator.produce_totals pour afficher les totaux "XY de Z" ci-dessus
  • Inclus le module Paginator dans mon WillPaginate :: LinkRenderer classe dominante
  • Paginator.produce_totals Appelée au point approprié dans mon primordial to_html méthode

Ouf! Peut poster du code si c'est utile à tout le monde - il suffit de demander.

+0

Pourquoi ne pas en faire un plugin qui étend will_paginate, ou fork/branch will_paginate pour inclure ce support et soumettre une pull-request? –