2009-08-20 8 views
1

Ich arbeite mit dem Rails mislav-will_paginate Plugin um meine Datensätze zu paginieren. Ich möchte folgende Ausgabe erzeugen, und zwar unabhängig davon, ob es gab mehrere Seiten:Override Rails mislav-will_paginate plugin

X - Y of Z 
1 - 100 of 1826 

will_paginate in WillPaginate :: Viewhelper gibt nil zurück, wenn nur eine Seite der Aufzeichnungen war. Ich möchte dies in der saubersten möglichen Weise überschreiben, um die obige Ausgabe zu erzeugen, wenn es nur eine Seite gibt, oder die obige Ausgabe von der üblichen Ausgabe umgeben wäre, wenn es mehrere Seiten gäbe.

Ich habe WillPaginate :: LinkRenderer to_html Methode überschrieben, um diese Ausgabe zu erzeugen, aber ich kann nicht herausfinden, wie man es produziert, wenn es nur eine Seite von Datensätzen gibt.

Sollte ich den Code verschieben, um X - Y von Z woanders zu erzeugen und es sowohl von meiner überschreibenden to_html Methode, als auch von der Stelle, an der ich meinen will_paginate Aufruf mache, wenn es Null zurückgibt? Wenn ja, wo sollte es leben?

+0

Ich gehe davon aus, dass diese Zahlen die Anzahl der Elemente auf der aktuellen Seite darstellen und wie viele es insgesamt sind? Und Sie möchten immer anzeigen, ob die Paginierungsverknüpfungen vorhanden sind oder nicht? Warum sollte es dann nicht vollständig außerhalb des Aufrufs von will_paginate bleiben und es in Ihrer Ansicht oder benutzerdefinierten Hilfsmethode implementieren? – ryanb

+0

Beide Annahmen sind richtig. Ich möchte sie zusammenrollen, weil sie logisch miteinander verwandt sind. Jedes Mal, wenn ich will_paginate anrufe, möchte ich auch die Summen anzeigen. Ich möchte auch die Summen zwischen den Seitenlinks anzeigen, die wille_paginate produziert, ala Gmail. Der sauberste Weg, dies zu tun, scheint zu sein, wille_paginate zu bekommen, um die Summen in seiner to_html Methode auszugeben. – nfm

Antwort

1

Ok, hier ist was ich getan habe:

  • ein Modul Paginator Erstellt
  • das Paginator Modul Im Helfer meines Modells des
  • Genannt Paginator.paginate in meinen Ansichten
  • Defined Paginator.paginate zu Rufen Sie Paginator.produce_totals auf, wenn nur eine Seite vorhanden war, oder rufen Sie paginate (die normale Methode) für mehrere Seiten auf
  • Definierte Paginator.produce_totals um "X - Y von Z" als Summe auszugeben oben
  • das Paginator Modul in meinem WillPaginate :: LinkRenderer übergeordnete Klasse
  • Genannt Paginator.produce_totals an der entsprechenden Stelle in meinem übergeordneten to_html Methode

Puh inklusive! Kann Code schreiben, wenn es für irgendjemanden nützlich ist - fragen Sie einfach.

+0

Warum nicht ein Plugin machen, das will_paginate erweitert, oder fork/branch will_paginate, um diese Unterstützung einzuschließen und eine Pull-Anfrage zu senden? –