<?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>Zend Framework CZ - novinky &#187; Návody</title>
	<atom:link href="http://www.zendframework.cz/category/navody/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zendframework.cz</link>
	<description>Zend Framework, PHP, MySQL, OOP, TDD</description>
	<lastBuildDate>Sat, 17 Dec 2011 14:28:06 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Zend_Validate_Identical</title>
		<link>http://www.zendframework.cz/navody/zend_validate_identical/</link>
		<comments>http://www.zendframework.cz/navody/zend_validate_identical/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 06:36:04 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=328</guid>
		<description><![CDATA[
<p>Úplně mi uniklo, že do Zendu (už před rokem) přibyl
Zend_Validate_I­dentical. S jeho pomocí můžeme porovnávat hodnotu ve
formuláři proti nějaké hodnotě (používá to Zend_Form_Ele­ment_Hash),
ale mnohem důležitější je, že ho můžeme použít pro porovnání proti
jinému formulářovému poli. Nejtypičtějším příkladem … <a
href="http://www.zendframework.cz/navody/zend_validate_identical/">Continue
reading <span class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<p>Úplně mi uniklo, že do Zendu (už <a rel="nofollow"
href="http://www.thomasweidner.com/flatpress/2010/05/02/validation-of-two-values-or-how-to-proove-identical-ness/">před
rokem</a>) přibyl <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.validate.set.html#zend.validate.set.identical">Zend_Validate_I­dentical</a>.</p>

<p>S jeho pomocí můžeme porovnávat hodnotu ve formuláři proti nějaké
hodnotě (používá to Zend_Form_Ele­ment_Hash), ale mnohem důležitější
je, že ho můžeme použít pro porovnání proti jinému formulářovému
poli. Nejtypičtějším příkladem je kontrola, zda se shodují
zadaná hesla:</p>

<pre class="php"><code><span class="php-var">$this</span>-&gt;addElement(<span
class="php-keyword1">new</span> Zend_Form_Element_Password(<span
class="php-keyword2">array</span>(
    <span
class="php-quote">'name'</span> =&gt; <span
class="php-quote">'password'</span>,
    <span
class="php-quote">'label'</span> =&gt; <span
class="php-quote">'Heslo:'</span>,
)));

<span
class="php-var">$this</span>-&gt;addElement(<span
class="php-keyword1">new</span> Zend_Form_Element_Password(<span
class="php-keyword2">array</span>(
    <span
class="php-quote">'name'</span> =&gt; <span
class="php-quote">'password2'</span>,
    <span
class="php-quote">'label'</span> =&gt; <span
class="php-quote">'Heslo (potvrzení):'</span>,
)));
<span
class="php-var">$validator</span> = <span
class="php-keyword1">new</span> Zend_Validate_Identical(<span
class="php-quote">'password'</span>);
<span
class="php-var">$validator</span>-&gt;setMessage(<span
class="php-quote">'Hesla se neshodují!'</span>,
    Zend_Validate_Identical::NOT_SAME);
<span
class="php-var">$this</span>-&gt;getElement(<span
class="php-quote">'password2'</span>)-&gt;addValidator(<span
class="php-var">$validator</span>);</code></pre>

<p>Takhle to je mnohem kratší a přehlednější, než psaní vlastního
validátoru, který pracuje s proměnnou <code>$context</code>.</p>

<p>Výsledný formulář pak může vypadat třeba takto: <img
src="http://www.zendframework.cz/wp-content/uploads/2011/03/localhost-validate-public-index-password.png"
alt="" /></p>

<p>Martin H.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_validate_identical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Validate &#8211; jak použít hotové přeložené hlášky?</title>
		<link>http://www.zendframework.cz/navody/zend_validate-jak-pouzit-hotove-prelozene-hlasky/</link>
		<comments>http://www.zendframework.cz/navody/zend_validate-jak-pouzit-hotove-prelozene-hlasky/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 18:08:10 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=309</guid>
		<description><![CDATA[
<p>Minule jsem psal o překladu chybových hlášek. Ten už je doladěný a
přidal jsem issue, aby ho zařadili do ZF. Teď krátce shrnu, jak ho použít
ve své aplikaci: Z příkazové řádky si vygenerujeme čistou aplikaci a
vytvoříme formulář: zf create project validate … <a
href="http://www.zendframework.cz/navody/zend_validate-jak-pouzit-hotove-prelozene-hlasky/">Continue
reading <span class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<p>Minule jsem psal o překladu chybových hlášek. Ten už je doladěný a
přidal jsem <a rel="nofollow"
href="http://framework.zend.com/issues/browse/ZF-11146">issue</a>, aby ho
zařadili do ZF.</p>

<p>Teď krátce shrnu, jak ho použít ve své aplikaci:</p>

<p>Z příkazové řádky si vygenerujeme čistou aplikaci a vytvoříme
formulář:</p>

<pre>zf create project validate
cd validate
zf create form ValidateUkazka</pre>

<p>Do projektu si přidáme soubor s překladem, cesta může pak vypadat
třeba takto:
<code>$nazevProjektu\re­sources\langu­ages\cs\Zend_Va­lidate.php</code>
(validate je název projektu). <s>Soubor s překladem bude doufám součástí
další verze ZF (jsou je ve verzi full, ne v minimal). Mezitím si ho můžete
stáhnout od <a rel="nofollow"
href="http://framework.zend.com/issues/browse/ZF-11146">ZF-11146</a> .</s>
Soubor s překladem je součástí full verze ZF.</p>

<p>Do Bootstrap.php přidáme (viz <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.validate.messages.html#zend.validate.messages.pretranslated">manuál</a>):</p>

<pre class="php"><code><span class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _initValidateTranslator()
{
        <span
class="php-var">$translator</span> = <span
class="php-keyword1">new</span> Zend_Translate(<span
class="php-keyword2">array</span>(
                <span
class="php-quote">'adapter'</span> =&gt; <span
class="php-quote">'array'</span>,
                <span
class="php-quote">'content'</span> =&gt; APPLICATION_PATH . <span
class="php-quote">'/../resources/languages'</span>,
                <span
class="php-quote">'locale'</span>  =&gt; <span
class="php-quote">'cs'</span>,
        ));
        Zend_Validate_Abstract::setDefaultTranslator(<span
class="php-var">$translator</span>);
}</code></pre>

<p>A validovaný formulář může pak vypadat třeba takto: <img
src="http://www.zendframework.cz/wp-content/uploads/2011/03/localhost-validate-public.png"
alt="" /></p>

<p>Martin H.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_validate-jak-pouzit-hotove-prelozene-hlasky/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend_Tool &#8211; instalace a použití &#8211; screencast</title>
		<link>http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/</link>
		<comments>http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 14:32:28 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[zend_tool]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=235</guid>
		<description><![CDATA[
<p>Ahoj, připravili jsme pro vás screencast o instalaci a použití
Zend_Tool. Zend Framework – Zend_Tool (Czech) from Martin Hujer on Vimeo.
(přepněte si na fullscreen) Chybky: V 1.10 už bude opravené (ZF-7743), aby
se controllery v modulech vytvářely s prefixem modulu Fatal error při
vytváření action do … <a
href="http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/">Continue
reading <span class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<p>Ahoj, připravili jsme pro vás screencast o instalaci a použití
Zend_Tool.</p>
<object width="400" height="300">
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie"
value="http://vimeo.com/moogaloop.swf?clip_id=7617388&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1"
/>
<embed
src="http://vimeo.com/moogaloop.swf?clip_id=7617388&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1"
type="application/x-shockwave-flash" allowfullscreen="true"
allowscriptaccess="always" width="400" height="300" /></object>
<p><a href="http://vimeo.com/7617388">Zend Framework – Zend_Tool (Czech)</a>
from <a href="http://vimeo.com/martinhujer">Martin Hujer</a> on <a
href="http://vimeo.com">Vimeo</a>.</p>
 (přepněte si na fullscreen)
<h3>Chybky:</h3>

<ul>
	<li>V 1.10 už bude opravené (<a rel="nofollow"
	href="http://framework.zend.com/issues/browse/ZF-7743">ZF-7743</a>), aby se
	controllery v modulech vytvářely s prefixem modulu</li>

	<li>Fatal error při vytváření action do neexistujícího controlleru už
	v aktuální incubator verzi nevyskakuje (asi také bude v 1.10)</li>

	<li><strong>Zareportoval jsem dva bugy:</strong>
		<ul>
			<li><a rel="nofollow"
			href="http://framework.zend.com/issues/browse/ZF-8305">ZF-8305</a> – Při
			vytváření controlleru do neexistujícího modulu to končí na
			Fatal Error</li>

			<li><a rel="nofollow"
			href="http://framework.zend.com/issues/browse/ZF-8306">ZF-8306</a> – Při
			přidání modulu by se měly aktivovat v application.ini</li>
		</ul>
	</li>
</ul>

<p>Na to, že už to je součástí oficiální distribuce ZF od verze 1.8, tak
to moc vychytané není. Ale v některé z dalších verzí by mělo být
přidáno vytváření formulářů, modelů, práce s layoutem…</p>

<p>Nicméně stále je to použitelné na vygenerování základní kostry
aplikace. I s těmi chybami a tak. Máme hotový index.php a základní
složky. Ušetří to pár kliků a i to se počítá.</p>

<p><strong><a href="http://www.martinhujer.cz/">Martin Hujer</a></strong> &amp;
<strong><a rel="nofollow" href="http://blog.red-pill.cz/">Tomáš
Fejfar</a></strong></p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Zend_Captcha</title>
		<link>http://www.zendframework.cz/navody/zend_captcha/</link>
		<comments>http://www.zendframework.cz/navody/zend_captcha/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 10:10:25 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[form]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=69</guid>
		<description><![CDATA[
<p>Zend_Captcha Zend_Captcha přináší do Zend Frameworku podporu pro
ověřovací obrázky na rozpoznání, zda stránku opravdu navštívil
člověk. V distibuci ZF bude obsaženo několik typů captcha
ověřování – Figlet, Image a ReCaptcha. Figlet generuje ASCII art, Image
je nejčastěji používaný obrázek s textem a … <a
href="http://www.zendframework.cz/navody/zend_captcha/">Continue reading <span
class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<h3>Zend_Captcha</h3>

<p>Zend_Captcha přináší do Zend Frameworku podporu pro ověřovací obrázky
na rozpoznání, zda stránku opravdu navštívil člověk. V distibuci ZF bude
obsaženo několik typů captcha ověřování – Figlet, Image a ReCaptcha.
Figlet generuje ASCII art, Image je nejčastěji používaný obrázek s textem
a <a rel="nofollow" href="http://recaptcha.net/">reCaptcha</a>.</p>
<span id="more-69"></span>
<h4>Zend_Captcha_Figlet</h4>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.captcha.adapters.html#zend.captcha.adapters.figlet">Zend_Captcha_Fi­glet</a>
používá <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.text.html#zend.text.figlet">Zend_Figlet_Text</a>
pro převod textu do ASCII. Tímto vygenerujeme 5ti-znakovou Figlet Captchu:</p>

<pre class="php"><code><span class="php-var">$captcha</span> = <span
class="php-keyword1">new</span> Zend_Captcha_Figlet(<span
class="php-keyword2">array</span>(
        <span
class="php-quote">'name'</span> =&gt; <span
class="php-quote">'foo'</span>,
        <span
class="php-quote">'wordLen'</span> =&gt; <span
class="php-num">5</span>,
));
<span class="php-var">$id</span> = <span
class="php-var">$captcha</span>-&gt;generate();</code></pre>

<p><strike>(pozn. Zde jsem narazil na <a rel="nofollow"
href="http://framework.zend.com/issues/browse/ZF-3969">bug</a>, pokud nastavíme
wordLen na 12 a více, tak vypadne warning)</strike></p>

<p>Potom captchu už jen vyrenderujeme: <strike>(pozn. paremetr $this-&gt;view
není v manuálu uveden a bez něj to nefunguje <a rel="nofollow"
href="http://framework.zend.com/issues/browse/ZF-3970">BUG</a> )</strike></p>

<pre class="php"><code><span
class="php-var">$this</span>-&gt;view-&gt;captcha = <span
class="php-var">$captcha</span>-&gt;render(<span
class="php-var">$this</span>-&gt;view);</code></pre>

<p>A případně si pro testovací účely můžeme vypsat i text, který je
zobrazen:</p>

<pre class="php"><code><span
class="php-var">$this</span>-&gt;view-&gt;captchaText = <span
class="php-var">$captcha</span>-&gt;getWord();</code></pre>

<p>Captcha vypadá asi takhle:</p>

<div><img
src="http://www.zendframework.cz/wp-content/uploads/2008/08/figlet.png"
alt="figlet - zend" title="figlet - zend" /></div>

<h4>Zend_Form_Ele­ment_Captcha</h4>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.captcha">Zend_Form_Ele­ment_Captcha</a>
je nový element použitelný ve spojení se Zend_Form. Můžeme snadno
implementovat captchu do našich formulářů.</p>

<pre class="php"><code><span class="php-var">$form</span> = <span
class="php-keyword1">new</span> Zend_Form();
<span
class="php-var">$element</span> = <span
class="php-keyword1">new</span> Zend_Form_Element_Captcha(<span
class="php-quote">'foo'</span>, <span
class="php-keyword2">array</span>(
        <span
class="php-quote">'label'</span> =&gt; <span
class="php-quote">&quot;Please verify you're a human&quot;</span>,
        <span
class="php-quote">'captcha'</span> =&gt; <span
class="php-keyword2">array</span>(
                <span
class="php-quote">'captcha'</span> =&gt; <span
class="php-quote">'Figlet'</span>,
                <span
class="php-quote">'wordLen'</span> =&gt; <span
class="php-num">6</span>,
                <span
class="php-quote">'timeout'</span> =&gt; <span
class="php-num">1</span>,
        ),
));
<span
class="php-var">$form</span>-&gt;addElement(<span
class="php-var">$element</span>);</code></pre>

<p>Poté ji můžeme validovat jako součást formuláře přes
isValid($data).</p>

<h4>Download</h4>

<p><a href="http://www.zendframework.cz/data/captcha-demo.zip">Zend_Captcha
DEMO</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_captcha/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zend_Wildfire</title>
		<link>http://www.zendframework.cz/navody/zend_wildfire/</link>
		<comments>http://www.zendframework.cz/navody/zend_wildfire/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 08:01:09 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firephp]]></category>
		<category><![CDATA[profiler]]></category>
		<category><![CDATA[wildfire]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=59</guid>
		<description><![CDATA[
<p>Zend_Wildfire Zend_Wildfire nám umožňuje zapisovat do logovací konzole
Firebugu. Je toho využito především u Zend_Log_Wri­ter_Firebug.
Zend_Log_Writer_Fi­rebug Zend_Log_Writer_Fi­rebug je standardní writer
použitelný pro Zend_Log. Výstup je posílán pomocí
Zend_Wildfire_Chan­nel_HttpHeaders v HTTP hlavičkách. Pro správnou
funkčnost je potřebný Firefox 3 (případně 2), Firebug Extension … <a
href="http://www.zendframework.cz/navody/zend_wildfire/">Continue reading <span
class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<h3>Zend_Wildfire</h3>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.wildfire.html">Zend_Wildfire</a>
nám umožňuje zapisovat do <a rel="nofollow"
href="http://getfirebug.com/console.html">logovací konzole</a> <a
rel="nofollow" href="http://www.getfirebug.com/">Firebugu</a>. Je toho využito
především u <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.log.writers.html#zend.log.writers.firebug">Zend_Log_Wri­ter_Firebug</a>.</p>
<span id="more-59"></span>
<h4>Zend_Log_Writer_Fi­rebug</h4>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.log.writers.html#zend.log.writers.firebug">Zend_Log_Writer_Fi­rebug</a>
je standardní writer použitelný pro Zend_Log. Výstup je posílán pomocí
Zend_Wildfire_Chan­nel_HttpHeaders v HTTP hlavičkách. Pro správnou
funkčnost je potřebný Firefox 3 (případně 2), <a rel="nofollow"
href="https://addons.mozilla.org/en-US/firefox/addon/1843/">Firebug
Extension</a> a <a rel="nofollow"
href="https://addons.mozilla.org/en-US/firefox/addon/6149/">FirePHP
Extension</a>.</p>

<p>Logování inicializujeme tímto způsobem:</p>

<pre class="php"><code><span class="php-var">$log</span> = <span
class="php-keyword1">new</span> Zend_Log();
<span
class="php-var">$writer</span> = <span
class="php-keyword1">new</span> Zend_Log_Writer_Firebug();
<span
class="php-var">$log</span>-&gt;addWriter(<span
class="php-var">$writer</span>);</code></pre>

<p>A poté můžeme zalogovat nějaké zprávy:</p>

<pre class="php"><code><span class="php-var">$log</span>-&gt;debug(<span
class="php-quote">'Debug'</span>);
<span
class="php-var">$log</span>-&gt;info(<span
class="php-quote">'Info'</span>);
<span
class="php-var">$log</span>-&gt;notice(<span
class="php-quote">'Notice'</span>);
<span
class="php-var">$log</span>-&gt;warn(<span
class="php-quote">'Warn'</span>);
<span
class="php-var">$log</span>-&gt;err(<span class="php-quote">'Err'</span>);
<span
class="php-var">$log</span>-&gt;crit(<span
class="php-quote">'Crit'</span>);
<span
class="php-var">$log</span>-&gt;alert(<span
class="php-quote">'Alert'</span>);
<span
class="php-var">$log</span>-&gt;emerg(<span
class="php-quote">'Emerg'</span>);</code></pre>

<p>Ty se zobrazí ve Firebug konzoli takto</p>

<div><img
src="http://www.zendframework.cz/wp-content/uploads/2008/08/firebug01.png"
alt="firebug - logování" title="firebug - logování" /></div>

<p>Toto byla jedna část využití výpisu do firebugu</p>

<h4>Zend_Db_Profi­ler_Firebug</h4>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.db.profiler.html#zend.db.profiler.profilers.firebug">Zend_Db_Profi­ler_Firebug</a>
slouží stejně jako jiné profilery k logování trvání jednotlivých SQL
dotazů volaných v aplikaci.</p>

<p>Nejdříve vytvoříme instanci Profileru a nastavíme titulek (‚All DB
Queries‘), poté profiler zapneme a nakonec ho nastavíme do našeho db
adaptéru.</p>

<pre class="php"><code><span class="php-var">$profiler</span> = <span
class="php-keyword1">new</span> Zend_Db_Profiler_Firebug(<span
class="php-quote">'All DB Queries'</span>);
<span
class="php-var">$profiler</span>-&gt;setEnabled(<span
class="php-keyword1">true</span>);
<span
class="php-var">$db</span>-&gt;setProfiler(<span
class="php-var">$profiler</span>);</code></pre>

<p><strike>Pozn.: Vzhledem k tomu, že komponenta ještě obsahuje <a
rel="nofollow" href="http://framework.zend.com/issues/browse/ZF-3943">bug</a>,
tak nedojde k automatické inicializaci. Proto je potřeba zavolat
setEnabled(true); a ještě následující příkazy, aby se správně odeslaly
hlavičky, pokud není zároveň použitý Zend_Log_Writer_Fi­rebug, který je
nastavuje správně. V budoucnu to snad nebude potřeba.</strike></p>

<pre class="php"><code><span
class="php-var">$front</span> = Zend_Controller_Front::getInstance();
<span
class="php-var">$front</span>-&gt;registerPlugin(Zend_Wildfire_Channel_HttpHeaders::getInstance());</code></pre>

<p>Nyní už je vše připraveno a můžeme zavolat nějaké dotazy do
databáze:</p>

<pre class="php"><code><span class="php-var">$data</span> = <span
class="php-keyword2">array</span>(<span
class="php-quote">'text'</span> =&gt; <span
class="php-keyword2">md5</span>(<span class="php-keyword2">rand</span>(<span
class="php-num">1</span>, <span class="php-num">10000</span>)));
<span
class="php-var">$db</span>-&gt;insert(<span
class="php-quote">'test'</span>, <span class="php-var">$data</span>);
<span
class="php-var">$data</span> = <span
class="php-var">$db</span>-&gt;select()-&gt;from(<span
class="php-quote">'test'</span>)-&gt;query()-&gt;fetchAll();</code></pre>

<p>Výsledkem je přehledná tabulka ve Firebugu, s trváním jednotlivých SQL
a jejich parametry.</p>

<div><a
href="http://www.zendframework.cz/wp-content/uploads/2008/08/firebug02-profiler.png"><img
src="http://www.zendframework.cz/wp-content/uploads/2008/08/firebug02-profiler.png"
alt="" title="firebug02-profiler" width="500" height="287"
class="alignnone size-full wp-image-62" /></a></div>

<p><strike>Zend_Log_Writer_Fi­rebug ještě nefunguje v CLI (spouštění
z příkazové řádky). <a rel="nofollow"
href="http://framework.zend.com/issues/browse/ZF-3960">Bug</a> jsem reportoval,
tak doufám, že ho opraví.</strike></p>

<h4>Download</h4>

<p><a href="http://www.zendframework.cz/data/wildfire-demo.zip">Zend_Wildfire
DEMO</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_wildfire/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zend_Paginator</title>
		<link>http://www.zendframework.cz/navody/zend_paginator/</link>
		<comments>http://www.zendframework.cz/navody/zend_paginator/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 13:01:02 +0000</pubDate>
		<dc:creator>Martin Hujer</dc:creator>
				<category><![CDATA[Návody]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[iterator]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[paginator]]></category>
		<category><![CDATA[partial]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://www.zendframework.cz/?p=40</guid>
		<description><![CDATA[
<p>Vzhledem k blížícímu se vydání Zend Frameworku 1.6.0 GA bych rád
probral některé významných změn v nové verzi. Zend_Paginator
Zend_Paginator je komponenta, která zjednodušuje výpis stránkovaných dat na
nejjednodušší možnou míru. umí stránkovat jakákoliv data, ne jen
výsledek z databáze při použití databáze se načítá jen … <a
href="http://www.zendframework.cz/navody/zend_paginator/">Continue
reading <span class="meta-nav">→</span></a></p>
]]></description>
			<content:encoded><![CDATA[
<p>Vzhledem k blížícímu se vydání <a
href="http://www.zendframework.cz/oznameni/zend-framework-16-rc2-je-tady/">Zend
Frameworku 1.6.0 GA</a> bych rád probral některé významných změn
v nové verzi.</p>

<h3>Zend_Paginator</h3>

<p><a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.paginator.html">Zend_Paginator</a>
je komponenta, která zjednodušuje výpis stránkovaných dat na
nejjednodušší možnou míru.</p>

<ul>
	<li>umí stránkovat jakákoliv data, ne jen výsledek z databáze</li>

	<li>při použití databáze se načítá jen nezbytné množství výsledků
	(na #zftalk někdo mluvil o bezproblémovém použití i s <a
	href="http://forum.zendframework.cz/index.php?topic=388.0">2 miliony
	záznamů</a> v tabulce)</li>

	<li>umožňuje libovolný výpis ovládání stránkování (pomocí
	partials)</li>
</ul>

<p><span id="more-40"></span> Stránkování dat z různých zdrojů je
zajištěno pomocí různých <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.usage.paginating">adaptérů</a>.
V distribuci ZF jsou přítomny tyto:</p>

<ul>
	<li><strong>Array</strong> – použití PHP pole</li>

	<li><strong>DbSelect</strong> – použití instance Zend_Db_Select</li>

	<li><strong>Iterator</strong> – použití instance Iterator</li>

	<li><strong>Null</strong> – nepoužívá Zend_Paginator pro správu dat, ale
	stále umožňuje využití výhod funkce pro výpis stránkpování</li>
</ul>

<p>Při vytváření instance Zend_Paginator je nutné konstruktoru předat
adaptér:</p>

<pre class="php"><code><span class="php-var">$paginator</span> = <span
class="php-keyword1">new</span> Zend_Paginator(<span
class="php-keyword1">new</span> Zend_Paginator_Adapter_Array(<span
class="php-var">$data</span>));</code></pre>

<p>$data je PHP pole, které chceme stránkovat.</p>

<p>Případně je možné použít factory metodu, která rozpozná typ
předaných dat:</p>

<pre class="php"><code><span
class="php-var">$paginator</span> = Zend_Paginator::factory(<span
class="php-var">$data</span>);</code></pre>

<p>Pokud chceme využít jako zdroj dat databázi, tak je to možné tímto
způsobem:</p>

<pre class="php"><code><span class="php-var">$select</span> = <span
class="php-keyword1">new</span> Zend_Db_Select(<span
class="php-var">$db</span>);
<span class="php-var">$select</span>-&gt;from(<span
class="php-quote">'test'</span>);
<span
class="php-comment">//tady může být složité nastavení Selectu, spoustu joinů atd.
</span><span
class="php-var">$paginator</span> = Zend_Paginator::factory(<span
class="php-var">$select</span>);</code></pre>

<p>Poté už je komponenta připravena k použití, ale pro plnou funkčnost je
ještě potřebat umožnit postup pro stránkách. Je vhodné použít nějakou
<a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.controller.router.html">routu</a>,
abychom získali lepší SEO url. V tomto příkladu se spokojíme jen
s použitím parametru page.</p>

<pre class="php"><code><span
class="php-var">$paginator</span>-&gt;setCurrentPageNumber(<span
class="php-var">$this</span>-&gt;_getParam(<span
class="php-quote">'page'</span>));</code></pre>

<p>Nyní už máme vše připravené a můžeme paginator předat do view:</p>

<pre class="php"><code><span
class="php-var">$this</span>-&gt;view-&gt;paginator = <span
class="php-var">$paginator</span>;</code></pre>

<h4>View script</h4>

<p>Protože Zend_Paginator implementuje <a rel="nofollow"
href="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">SPL
interface IteratorAggregate</a>, je možné snadno procházet jednotlivé prvky
pole. Pokud budeme stránkovat vícerozměrné pole, není problém použít
$item[].</p>

<pre class="php"><code><span class="xlang">&lt;?php</span> <span
class="php-keyword1">if</span> (<span class="php-keyword2">count</span>(<span
class="php-var">$this</span>-&gt;paginator)): <span
class="xlang">?&gt;</span>
&lt;ul&gt;
<span class="xlang">&lt;?php</span> <span
class="php-keyword1">foreach</span> (<span
class="php-var">$this</span>-&gt;paginator <span
class="php-keyword1">as</span> <span class="php-var">$item</span>): <span
class="xlang">?&gt;</span>
  &lt;li&gt;<span class="xlang">&lt;?</span>= <span
class="php-var">$item</span>; <span class="xlang">?&gt;</span>&lt;/li&gt;
<span
class="xlang">&lt;?php</span> <span
class="php-keyword1">endforeach</span>; <span
class="xlang">?&gt;</span>
&lt;/ul&gt;
<span class="xlang">&lt;?php</span> <span
class="php-keyword1">endif</span>; <span class="xlang">?&gt;</span></code></pre>

<p>Ovládání stránkování je vypisováno pomocí view helperu
paginationControl.</p>

<pre class="php"><code><span class="xlang">&lt;?</span>= <span
class="php-var">$this</span>-&gt;paginationControl(<span
class="php-var">$this</span>-&gt;paginator, <span
class="php-quote">'Sliding'</span>, <span
class="php-quote">'my_pagination_control.phtml'</span>); <span
class="xlang">?&gt;</span></code></pre>

<ul>
	<li>Prvním parametrem je naše instance Zend_Paginator.</li>

	<li>Druhým parametrem určujeme způsob posuvu číslování.
		<ul>
			<li>Pokud použijeme ‚<strong>All</strong>‘, tak dostaneme výpis všech
			stránek, což je vhodné například při stránkování pomocí
			rozbalovacího menu.</li>

			<li>‚<strong>Elastic</strong>‘ označuje styl stránkování který
			používá Google – jak postupujeme dál, přibývají nám následující
			čísla stránek (<a rel="nofollow"
			href="http://www.google.com/search?num=10&amp;site=&amp;hl=en&amp;q=Zend+Framework&amp;btnG=Search">příklad</a>).</li>

			<li>Při použití ‚<strong>Jumping</strong>‘ vidíme rozsah stránek a
			když dojdeme například na 10, která je úplně vpravo a postoupíme na
			další stránku, tak se nám vypíší stránky od 11 do 20.</li>

			<li>Defaultním stylem je ‚<strong>Sliding</strong>‘, kdy vybraná stránka
			je vypsána vprostřed.</li>
		</ul>
	</li>

	<li>Třetím parametrem určujeme jaký partial script použijeme pro vypsání
	ovladače stránkování. V manuálu najdeme několik příkladů, následuje
	výpis ‚Search pagination‘, která mi vyhovuje nejvíce.</li>
</ul>

<pre class="php"><code><span class="xlang">&lt;?php</span> <span
class="php-keyword1">if</span> (<span
class="php-var">$this</span>-&gt;pageCount): <span
class="xlang">?&gt;</span>
&lt;div id=<span
class="php-quote">&quot;paginationControl&quot;</span>&gt;
&lt;!-- Previous page <span
class="php-keyword2">link</span> --&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">if</span> (<span
class="php-keyword2">isset</span>(<span
class="php-var">$this</span>-&gt;previous)): <span
class="xlang">?&gt;</span>
  &lt;a href=<span
class="php-quote">&quot;&lt;?= </span><span class="php-var">$this</span><span
class="php-quote">-&gt;url(array('page' =&gt; </span><span
class="php-var">$this</span><span
class="php-quote">-&gt;previous)); ?&gt;&quot;</span>&gt;&amp;lt; Previous&lt;/a&gt; |
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">else</span>: <span
class="xlang">?&gt;</span>
  &lt;span <span
class="php-keyword1">class</span>=<span
class="php-quote">&quot;disabled&quot;</span>&gt;&amp;lt; Previous&lt;/span&gt; |
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">endif</span>; <span
class="xlang">?&gt;</span>

&lt;!-- Numbered page links --&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">foreach</span> (<span
class="php-var">$this</span>-&gt;pagesInRange <span
class="php-keyword1">as</span> <span class="php-var">$page</span>): <span
class="xlang">?&gt;</span>
  <span class="xlang">&lt;?php</span> <span
class="php-keyword1">if</span> (<span class="php-var">$page</span> != <span
class="php-var">$this</span>-&gt;<span
class="php-keyword2">current</span>): <span
class="xlang">?&gt;</span>
    &lt;a href=<span
class="php-quote">&quot;&lt;?= </span><span class="php-var">$this</span><span
class="php-quote">-&gt;url(array('page' =&gt; </span><span
class="php-var">$page</span><span
class="php-quote">)); ?&gt;&quot;</span>&gt;<span
class="xlang">&lt;?</span>= <span class="php-var">$page</span>; <span
class="xlang">?&gt;</span>&lt;/a&gt; |
  <span
class="xlang">&lt;?php</span> <span class="php-keyword1">else</span>: <span
class="xlang">?&gt;</span>
    <span class="xlang">&lt;?</span>= <span
class="php-var">$page</span>; <span class="xlang">?&gt;</span> |
  <span
class="xlang">&lt;?php</span> <span class="php-keyword1">endif</span>; <span
class="xlang">?&gt;</span>
<span class="xlang">&lt;?php</span> <span
class="php-keyword1">endforeach</span>; <span
class="xlang">?&gt;</span>

&lt;!-- <span
class="php-keyword2">Next</span> page <span
class="php-keyword2">link</span> --&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">if</span> (<span
class="php-keyword2">isset</span>(<span class="php-var">$this</span>-&gt;<span
class="php-keyword2">next</span>)): <span
class="xlang">?&gt;</span>
  &lt;a href=<span
class="php-quote">&quot;&lt;?= </span><span class="php-var">$this</span><span
class="php-quote">-&gt;url(array('page' =&gt; </span><span
class="php-var">$this</span><span
class="php-quote">-&gt;next)); ?&gt;&quot;</span>&gt;<span
class="php-keyword2">Next</span> &amp;gt;&lt;/a&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">else</span>: <span
class="xlang">?&gt;</span>
  &lt;span <span
class="php-keyword1">class</span>=<span
class="php-quote">&quot;disabled&quot;</span>&gt;<span
class="php-keyword2">Next</span> &amp;gt;&lt;/span&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">endif</span>; <span
class="xlang">?&gt;</span>
&lt;/div&gt;
<span
class="xlang">&lt;?php</span> <span class="php-keyword1">endif</span>; <span
class="xlang">?&gt;</span></code></pre>

<p>Výpis je naprosto zřejmý – pokud existuje předchozí stránka, tak ji
vypíšeme jako odkaz, jinak jen jako text. Poté vypíšeme čísla stránek a
nakonec odkaz na následující stránku.</p>

<h4>Pokročilé použití</h4>

<p>Pokud v controlleru nastavíme styl stránkování i použitý partial
script:</p>

<pre class="php"><code>Zend_Paginator::setDefaultScrollingStyle(<span
class="php-quote">'Sliding'</span>);
Zend_View_Helper_PaginationControl::setDefaultViewPartial(<span
class="php-quote">'my_pagination_control.phtml'</span>);
<span
class="php-var">$paginator</span>-&gt;setView(<span
class="php-var">$view</span>);</code></pre>

<p>tak můžeme ovladač stránkování vypsat pomocí pouhého</p>

<pre class="php"><code><span class="xlang">&lt;?</span>= <span
class="php-var">$this</span>-&gt;paginator; <span
class="xlang">?&gt;</span></code></pre>

<p>V manuálu je popsáno jak vytvořit <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.paginator.advanced.html#zend.paginator.advanced.adapters">vlastní
adaptér pro zdrojová data</a> i jak vytvořit <a rel="nofollow"
href="http://framework.zend.com/manual/en/zend.paginator.advanced.html#zend.paginator.advanced.scrolling-styles">vlastní
styl stránkování</a>.</p>

<h4>Download</h4>

<p><a href="http://www.zendframework.cz/data/paginator-demo.zip">Zend_Paginator
DEMO</a></p>

<p>Příště bych rád popsal komponentu Zend_Log_Writer_Fi­rebug a
Zend_Db_Profi­ler_Firebug.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zendframework.cz/navody/zend_paginator/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

