47.15.7.2. Will Paginate

47.15.7.2.1. Vlastní zobrazení paginátoru

Odkazy:

Instalace:

$ script/plugin install will_paginate

Když máme plugin will_paginate nainstalován, můžeme přistoupit k jeho použití. V následujícím příkladu máme tabulku listy s datovým modelem List. V metodě index řadiče chceme vyhledat a zobrazit paginátorem seznam listů.

Poznámka

Připomínám že vztah mezi list a listy je definován v inflektoru.

Použítí stránkovače (paginator) v příkladu rovnou protlačím z řadiče do modelu, a zobrazení provedu v tabulce.

Tak tedy nějdřív model a použití stránkovače. V třídě modelu definuji metodu search jenž nedělá nic jiného než že volá vlastní paginátor

Popíši rovnou řešení s stránkovačem (pagniator) v modelu. Ušetří nám to čas. Takže v modelu definujeme vyhledávací metodu která bude provádět stránkování. Všechny parametry budu do této metody předávat v hashi options. Uvnitř přidáme předané parametry k defaultním hodnotám. Tyto definovat nepotřebujeme, ale je vhodné podle dat v modelu a podle plánovaného použití si je připravit.

    # Vyhledávání a paginátor
    def self.search(options = {})
        paginate({ :per_page => 5, :order => 'id'}.merge options)
    end

Vytvořenou metodu pro vyhledání zázanmů nyní použijeme v řadiči. Místo standardního

    def index
        listy = List.find(:all, …)
    end

Použijeme novou metodu search. Jediným rozdílem je vypuštění symbolu :all, který nemá v této situaci smysl. Všechny ostatní parametry zachováme. Výsledný kód bude nyní vypadat takto:

    def index
        listy = List.search({…}, :params => params[:page])
    end

Zbývá nám ještě napsat pohled. V tom od začátku použiji partials a tak bude rozdělen do dvou souborů. Rovněž vyjdu ze zobrazení dat v tabulce. Nejdříve tedy app/view/lisr/index.html.erb. V tomto jsou důležité dva řádky. První vloží do pohledu navigační část paginátoru. Jedná se o volání will_paginate kterému předáme kolekci objektů získanou v řadiči. Druhý důležitý řádek je přesun zobrazení řádků do table_row pomocí render_collection_of_partials.

<table>
    <thead>
        <tr><th>#</th><th>název</th>…</tr>
    </thead>
    <tfoot>
        <tr>
            <td colspan="…"><%= will_paginate @listy%></td>
        </tr>
    </tfoot>
    <tbody>
        <%= render_collection_of_partials 'table_row', @listy%>
    </tbody>
</table>

Zobrazením řádku tabulky vše dokončíme. Toto je popsáno v souboru app/view/list/_table_row.html.erb. Zde je jen jedna „zvláštnost“, a to proužkování řádků tabulky definováním css třídy.

<tr class="<%= cycle('odd', 'even')%>">
    <td><%= table_row.id %></td>
    <td><%= table_row.name %></td>
    …další sloupce tabulky
</tr>

V příkladu jsou zapracovány i některé další techniky, jako je například proužkování tabulky. To zajišťuje ve spolupráci s nastavením v stylesheeto definování class v elementu tr

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .