<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ruby on Rails &#187; stránkování</title>
	<atom:link href="http://petrbobek.cz/clanky/tag/strankovani/feed/" rel="self" type="application/rss+xml" />
	<link>http://petrbobek.cz</link>
	<description>Just like RORck</description>
	<lastBuildDate>Sat, 10 Oct 2009 15:59:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Stránkování v Ruby on Rails &#8211; will_paginate + AJAX</title>
		<link>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate-ajax/</link>
		<comments>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate-ajax/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 13:36:51 +0000</pubDate>
		<dc:creator>petrb</dc:creator>
				<category><![CDATA[Pluginy]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[stránkování]]></category>
		<category><![CDATA[will paginate]]></category>

		<guid isPermaLink="false">http://petrbobek.cz/?p=113</guid>
		<description><![CDATA[Minule jsme si ukázali jak si jednoduše nastránkovat data pomocí pluginu will_paginate a v dnešním dílu si ukážeme jak tento plugin můžeme rozšířit pomocí AJAXu.]]></description>
			<content:encoded><![CDATA[<p>Mnoho lidí se ptá jak vytvořit stránkování pomocí AJAXu. I když se to nezdá je to velice jednoduché. Pokud nevíte jak se pracuje s pluginem will paginate, tak si přečtěte <a title="Stránkování pomocí pluginu will paginate" href="http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate/" target="_blank">tento</a> článek, budete to potřebovat :)</p>
<p>Nejdříve si musíme natáhnout v hlavičce potřebné soubory.</p>
<pre class="brush: ruby;">
&lt;%= javascript_include_tag :defaults, 'lowpro' %&gt;
</pre>
<p>Jak už jste si všimli je potřeba stáhnout <a title="rozšíření pro prototype" href="http://www.danwebb.net/lowpro" target="_self">low pro</a> knihovnu, kterou napsal <a title="Dan Webb" href="http://www.danwebb.net" target="_self">Dan Webb</a>. Toto rozšíření pro prototype lze stáhnout <a title="Aktuální verze low pro" href="http://github.com/danwrong/low-pro/raw/2f47a651ab1143b2e067de7d2381f615c389a14e/dist/lowpro.js" target="_self">zde</a>. Jakmile budete mít aktuální verzi, je potřeba ji nakopírovat do složky &#8220;public/javascript&#8221;. Poté si otevřete application.js z &#8220;public/javascript&#8221; složky a vložte do něj následující kód.</p>
<pre class="brush: ruby;">
Event.addBehavior.reassignAfterAjax = true; Event.addBehavior({
    'div.pagination a' : Remote.Link
})
</pre>
<p>Taktéž si můžete vytvořit jakýkoliv *.js soubor a vložit kód tam, ale pak je potřeba tento soubor z hlavičky zavolat spolu s lowpro.</p>
<p>Tak a teď máme nachystáno co budeme potřebovat a nyní jsme jen pár řádků od kýženého výsledku. V controlloreru si vybereme potřebná data a nastránkujeme pomocí will paginate, ale taky je potřeba zajistit odpověd na js request.</p>
<pre class="brush: ruby;">def index
    @posts = Post.paginate(:all, :per_page =&gt; 10, :page =&gt; params[:page])

    respond_to do |format|
       format.html
       format.js do
          render :update do |page|
             page.replace 'posts_box', :partial =&gt; [:posts];
          end
       end
    end
end</pre>
<p>Kód ve view (index.rhtml) by mohl vypadat následovně.</p>
<pre class="brush: ruby;">Nalezené články:
&lt;%= render :partial =&gt; &quot;posts&quot; %&gt;
------- #_posts.rhtml -------
&lt;div id=&quot;post_box&quot;&gt;
#zde vypiseme co chceme a nastránkujeme
    &lt;%= will_paginate(@posts) %&gt;
&lt;/div&gt;</pre>
<p>Tak a to je všechno. :)<br />
Petr Bobek</p>
]]></content:encoded>
			<wfw:commentRss>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate-ajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stránkování v Ruby on Rails &#8211; Will_paginate</title>
		<link>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate/</link>
		<comments>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 16:06:15 +0000</pubDate>
		<dc:creator>petrb</dc:creator>
				<category><![CDATA[Pluginy]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[stránkování]]></category>
		<category><![CDATA[will paginate]]></category>

		<guid isPermaLink="false">http://petrbobek.cz/?p=83</guid>
		<description><![CDATA[Pravděpodobně se velmi často setkáváte se situací kdy potřebujete vybraná data nastránkovat, jelikož je jich na stránce hodně. Použitím pluginu will-paginate je stránkování velmi jednoduché a přímočaré.]]></description>
			<content:encoded><![CDATA[<p>Plugin si můžete stáhnout z následující adresy: <a href="http://github.com/mislav/will_paginate/">http://github.com/mislav/will_paginate/<br />
</a>Na této adrese také naleznete základní informace o tom jak tento plugin využívat. Nějaké informace se dozvíte i tady :)</p>
<p>Aby nám plugin fungoval (rails &gt; 2.1) je potřeba jej povolit v &#8220;config/enviroment.rb&#8221;</p>
<pre class="brush: ruby;">Rails::Initializer.run do |config|
    config.gem 'mislav-will_paginate', :version =&gt; '~&gt; 2.3.11', :lib =&gt; 'will_paginate', :source =&gt; 'http://gems.github.com'
end</pre>
<p>Tento plugin a chybějící dependence NAINSTALUJEME když v konzoli napíšeme následující příkaz:</p>
<pre class="brush: ruby;">rake gems:install</pre>
<p>a nebo druhou možností je manuální instalace pomocí následujících příkazů:</p>
<pre class="brush: ruby;">gem sources -a http://gems.github.com</pre>
<pre class="brush: ruby;">gem install mislav-will_paginate</pre>
<p><span style="color: #ff6600;">POUŽITÍ:</span></p>
<pre class="brush: ruby;">- @clanky = Post.find(:all, :order =&gt; 'datum DESC')</pre>
<p>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.</p>
<pre class="brush: ruby;">- @clanky = Post.paginate(:all, :order =&gt; 'datum DESC', :page =&gt; params[:page])</pre>
<p>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ě.</p>
<pre class="brush: ruby;">- @clanky = Post.paginate(:all, :order =&gt; 'datum DESC', :page =&gt; params[:page], :per_page =&gt; 10)</pre>
<p>Tak a to je v controlleru vše a teď už jen potřebujeme vypsat články a taky naše stránkování.</p>
<pre class="brush: ruby;">- &lt;ul&gt;
-   &lt;% @clanky.each do |clanek| %&gt;
-     &lt;li&gt;&lt;%= clanek.titulek %&gt;&lt;/li&gt;
-   &lt;% end %&gt;
- &lt;/ul&gt;

- &lt;%= will_paginate(@clanky) %&gt;</pre>
<p>Stačí když zavoláme funkci will_paginate s naší proměnou a máme pěkně nastránkováno. :)</p>
<p><span style="color: #ff6600;">ÚPRAVY:</span></p>
<p>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 &#8220;config/enviroment.rb&#8221; přidáme následující řádky a po restartu by mělo být tak jak má :)</p>
<pre class="brush: ruby;">require 'will_paginate'
WillPaginate::ViewHelpers.pagination_options[:previous_label] = 'Novější'
WillPaginate::ViewHelpers.pagination_options[:next_label] = 'Starší'</pre>
<p>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ě.</p>
<pre class="brush: ruby;">@clanky = Post.paginate( ..... , :previous_label =&gt; 'Předchozí', :next_label =&gt; 'Další')</pre>
<p>Pokud budete chtít smazat číslování, tak úprava je taktéž jednoduchá, přidáme jen :page_links a nastavíme jej na false.</p>
<p>Na závěr snad už jen doplním, že ve složce examples (link: <a href="http://github.com/mislav/will_paginate/blob/master/examples/index.html">http://github.com/mislav/will_paginate/blob/master/examples/index.html</a>) se můžete podívat na nějaké CSS styly, tak to jen tak, kdyby se někomu nelíbilo standardní stylování.</p>
<p>V <a title="Stránkování pomocí AJAXu" href="http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate-ajax/">dalším pokračování</a> si ukážeme stránkování pomocí AJAXu.</p>
<p>Nějaké dotazy, poznámky nebo připomínky?</p>
<p>Petr</p>
]]></content:encoded>
			<wfw:commentRss>http://petrbobek.cz/clanky/strankovani-v-ruby-on-rails-will_paginate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
