Ruby on Rails

Stránkování v Ruby on Rails – Will_paginate

by petrb on Oct.05, 2009, under Pluginy, Ruby on Rails

Plugin si můžete stáhnout z následující adresy: http://github.com/mislav/will_paginate/
Na této adrese také naleznete základní informace o tom jak tento plugin využívat. Nějaké informace se dozvíte i tady :)

Aby nám plugin fungoval (rails > 2.1) je potřeba jej povolit v “config/enviroment.rb”

Rails::Initializer.run do |config|
    config.gem 'mislav-will_paginate', :version => '~> 2.3.11', :lib => 'will_paginate', :source => 'http://gems.github.com'
end

Tento plugin a chybějící dependence NAINSTALUJEME když v konzoli napíšeme následující příkaz:

rake gems:install

a nebo druhou možností je manuální instalace pomocí následujících příkazů:

gem sources -a http://gems.github.com
gem install mislav-will_paginate

POUŽITÍ:

- @clanky = Post.find(:all, :order => 'datum DESC')

Výše uvedeným dotazem vypíšeme všechny články, které vyhovují podmínkám (takže všechny). Pokud bysme chtěli tyto články nastránkovat pomocí will paginate pluginu, provedeme jen malinkatou úpravu.

- @clanky = Post.paginate(:all, :order => 'datum DESC', :page => params[:page])

Jak jste si asi všimli místo find jsem použil paginate, ten funguje stejně jako find, ale jen s tím rozdílem, že nevytáhne z DB všechny záznamy. Nesmíme ale zapomenout na parametr page, bez něj skončíme s chybou. Takto se nám výsledky nastránkují po 30 záznamech (defaultní hodnota). Tu samozřejmě můžeme změnit, když nastavíme per_page parametr. Takže stránkování po 10 záznamech by mohlo vypadat následovně.

- @clanky = Post.paginate(:all, :order => 'datum DESC', :page => params[:page], :per_page => 10)

Tak a to je v controlleru vše a teď už jen potřebujeme vypsat články a taky naše stránkování.

- <ul>
-   <% @clanky.each do |clanek| %>
-     <li><%= clanek.titulek %></li>
-   <% end %>
- </ul>

- <%= will_paginate(@clanky) %>

Stačí když zavoláme funkci will_paginate s naší proměnou a máme pěkně nastránkováno. :)

ÚPRAVY:

Pravděpodobně budou všechny trápit i anglické názvy u tlačítek NEXT a PREVIOUS (další a předchozí). I na tohle, ale existuje velmi lehké a elegantní řešení. V souboru “config/enviroment.rb” přidáme následující řádky a po restartu by mělo být tak jak má :)

require 'will_paginate'
WillPaginate::ViewHelpers.pagination_options[:previous_label] = 'Novější'
WillPaginate::ViewHelpers.pagination_options[:next_label] = 'Starší'

Takto nastavíme všechny tlačítka v aplikaci (globálně všechny přepíšeme), ale existuje ještě jedna možnost, a to lokální. Pokud chceme změnit text jen u jednoho tlačítka, tak to můžeme udělat přímo a to tak, že přidáme další dva parametry :previous_label (pro předchozí tlačítko) a pak :next_label (pro tlačítko další). Vypadalo by to následovně.

@clanky = Post.paginate( ..... , :previous_label => 'Předchozí', :next_label => 'Další')

Pokud budete chtít smazat číslování, tak úprava je taktéž jednoduchá, přidáme jen :page_links a nastavíme jej na false.

Na závěr snad už jen doplním, že ve složce examples (link: http://github.com/mislav/will_paginate/blob/master/examples/index.html) se můžete podívat na nějaké CSS styly, tak to jen tak, kdyby se někomu nelíbilo standardní stylování.

V dalším pokračování si ukážeme stránkování pomocí AJAXu.

Nějaké dotazy, poznámky nebo připomínky?

Petr

:, , ,

Leave a Reply

Nemůžete něco najít?

Použijte formulář a zkuste štěstí:

Stále nenacházíte co jste hledali? Zkuste nechat komentář u článku!

Oblíbené blogy!

Archiv

Všechny články, chronologicky...