<?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>IMS Blog - blog o modernom programovaní od Tibor Piňo &#187; CakePHP</title>
	<atom:link href="http://ims.rockretail.com/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://ims.rockretail.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 18 Feb 2010 10:11:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fantom CMS 0.5 alfa 1</title>
		<link>http://ims.rockretail.com/2009/12/01/fantom-cms-0-5-alfa/</link>
		<comments>http://ims.rockretail.com/2009/12/01/fantom-cms-0-5-alfa/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 14:59:47 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Fantom CMS]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://ims.rockretail.com/?p=186</guid>
		<description><![CDATA[V diskusiách mi bola niekoľkokrát položená otázka ohľadne budúcnosti Fantom CMS a prípadných nových verzií. Rád by som týmto krátkym článkom priblížil aktuálnu situáciu ohľadne vývoja Fantom CMS. V súčasnosti je aktuálna vývojová verzia Fantom CMS 0.5, avšak na oficiálnych stránkach projektu je ako posledná vydaná verzia uvedená Fantom CMS 0.4.1, ktorá bohužiaľ obsahuje chybu, [...]]]></description>
			<content:encoded><![CDATA[<p>V diskusiách mi bola niekoľkokrát položená otázka ohľadne budúcnosti <a href="http://code.google.com/p/fantom/">Fantom CMS</a> a prípadných nových verzií. Rád by som týmto krátkym článkom priblížil aktuálnu situáciu ohľadne vývoja Fantom CMS. <span id="more-186"></span>V súčasnosti je aktuálna vývojová verzia Fantom CMS 0.5, avšak na oficiálnych stránkach projektu je ako posledná vydaná verzia uvedená <a href="http://fantom.googlecode.com/files/fantom_0.4.1.tar.bz2">Fantom CMS 0.4.1</a>, ktorá bohužiaľ obsahuje chybu, kvôli ktorej sa nedá nainštalovať databáza potrebná pre správne fungovanie.</p>
<p>Preto som sa rozhodol vydať vývojovú verziu Fantom CMS 0.5 alfa 1. Táto verzia prináša množstvo zmien, hlavne lepšiu integráciu s vstavanými nástrojmi CakePHP a medzi najväčšie zmeny patrí prepísanie kódu do PHP5. Jedná sa však stále o vývojovú verziu, ktorá môže obsahovať prípadné chyby.</p>
<p>Dúfam, že vám nová verzia Fantom CMS poslúži ako dobrá inšpirácia pri vývoji v CakePHP.</p>
<p><a href="http://fantom.googlecode.com/files/fantom-0-5-alfa1.zip">Fantom CMS 0.5 alfa 1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/12/01/fantom-cms-0-5-alfa/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Debug Kit &#8211; pokročilé debugovanie v CakePHP</title>
		<link>http://ims.rockretail.com/2009/11/19/debug-kit-pokrocile-debugovanie-v-cakephp/</link>
		<comments>http://ims.rockretail.com/2009/11/19/debug-kit-pokrocile-debugovanie-v-cakephp/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 13:26:09 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[Debug Kit]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[FirePHP]]></category>

		<guid isPermaLink="false">http://ims.rockretail.com/?p=167</guid>
		<description><![CDATA[Debugovacie nástroje a samotné debugovanie sú dôležitou súčasťou každého vývoja. V dnešnom článku si predstavíme pokročilý debugovací nástroj Debug Kit.
Poďme si najprv priblížiť jednotlivé vlastnosti Debug Kit a následne sa pozrieme na jeho inštaláciu a integráciu s CakePHP aplikáciou.
Debug Kit
Debug Kit predstavuje pokročilý debugovací nástroj, ktorý ponúka množstvo informácií o našej aplikácii a jej stave. [...]]]></description>
			<content:encoded><![CDATA[<p>Debugovacie nástroje a samotné debugovanie sú dôležitou súčasťou každého vývoja. V dnešnom článku si predstavíme pokročilý debugovací nástroj Debug Kit.<span id="more-167"></span></p>
<p>Poďme si najprv priblížiť jednotlivé vlastnosti Debug Kit a následne sa pozrieme na jeho inštaláciu a integráciu s CakePHP aplikáciou.</p>
<h2>Debug Kit</h2>
<p><a href="http://thechaw.com/debug_kit" target="_blank">Debug Kit</a> predstavuje pokročilý debugovací nástroj, ktorý ponúka množstvo informácií o našej aplikácii a jej stave. Debug Kit dokáže zobraziť podrobné informácie o session, sql, request, timer, premenných atď. Poďme sa teda bližšie pozrieť na jednotlivé vlastnosti tohto nástroja.</p>
<h2>Panely</h2>
<p>Debug Kit zobrazuje vyššie spomínané debug informácie v paneloch. Na nasledujúcom obrázku môžeme vidieť integráciu Debug Kit do stránky a taktiež základné panely, ktoré ponúka Debug Kit v základnej inštalácii.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-1.png"></a><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-2.png"><img class="alignnone size-full wp-image-169" title="debug-kit-2" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-2.png" alt="debug-kit-2" width="680" height="88" /></a></p>
<p>Medzi základné panely patria: History, Session, Request, Sql Log, Timer, Log, Variables. Poďme si teda bližšie priblížiť jednotlivé možnosti panelov.</p>
<h3>Panel History</h3>
<p>Panel History zobrazuje informácie o posledných requestoch zobrazením url danej stránky.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-1.png"><img class="alignnone size-full wp-image-168" title="debug-kit-1" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-1.png" alt="debug-kit-1" width="680" height="157" /></a></p>
<h3>Panel Session</h3>
<p>Panel Session zobrazuje podrobné informácie o uložených Session našou aplikáciou.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-3.png"><img class="alignnone size-full wp-image-170" title="debug-kit-3" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-3.png" alt="debug-kit-3" width="680" height="120" /></a></p>
<h3>Panel Request</h3>
<p>Panel Request zobrazuje informácie o aktuálnom requeste. Medzi informácie patria GET, POST požiadavky, Cake url parametre (v aplikácii dostupné v poli <em>$this-&gt;params</em>), Cookie informácie a podrobné informácie o použitých routovacích pravidlách.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-4.png"><img class="alignnone size-full wp-image-171" title="debug-kit-4" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-4.png" alt="debug-kit-4" width="680" height="371" /></a></p>
<h3>Panel SQL Log</h3>
<p>Panel SQL Log zobrazuje informácie o spustených sql dotazoch v našej databáze. V podstate sa ničím nelíši od bežného sql výpisu z CakePHP.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-5.png"><img class="alignnone size-full wp-image-172" title="debug-kit-5" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-5.png" alt="debug-kit-5" width="680" height="371" /></a></p>
<h3>Panel Timer</h3>
<p>Panel Timer zobrazuje podrobné informácie o čase načítavania jednotlivých častí našej aplikácie pre daný request a taktiež množstvo využitej pamäte. Časové informácie sa zobrazujú pre stránku ako celok, ale rovnako aj pre jednotlivé súčasti, ktoré boli generované v danom requeste.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-6.png"><img class="alignnone size-full wp-image-173" title="debug-kit-6" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-6.png" alt="debug-kit-6" width="680" height="370" /></a></p>
<p>Debug Kit nám poskytuje možnosť merať čas pre ľubovoľnú časť kódu. Ako môžeme vidieť na obrázku vyššie, vo výpise sa nachádza položka s názvom <em>Listing of articles</em>. Táto položka meria čas spracovania výpisu článkov v metóde <em>index</em> v controlleri <em>ArticlesController</em>. Kód pre danú položku vyzerá následovne</p>
<pre><code>function index() {
     DebugKitDebugger::startTimer($name = 'articles', $message = 'Listing of articles');
     $this-&gt;Article-&gt;recursive = 1;
     $this-&gt;paginate = array('limit'=&gt;Configure::read('Homepage.articles'),'order' =&gt; 'Article.created desc','conditions'=&gt;array('show_on_index'=&gt;1,'visible'=&gt;1,'publish_up&lt;=now()'));         $this-&gt;set('articles', $this-&gt;paginate());
     DebugKitDebugger::stopTimer($name = 'articles');
}
</code></pre>
<h3>Panel Log</h3>
<p>Panel Log nám zobrazuje informácie zo <a href="http://book.cakephp.org/view/157/Logging" target="_blank">základných debugovacích nástrojov</a> priamo z CakePHP. Jedná sa o výpisy z logovacích súborov.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-7.png"><img class="alignnone size-full wp-image-174" title="debug-kit-7" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-7.png" alt="debug-kit-7" width="680" height="152" /></a></p>
<h3>Panel Variables</h3>
<p>Panel Variables zobrazuje podrobné informácie o premenných a ich hodnotách v našej aplikácii, ktoré boli inicializované v controlleri.</p>
<p><a href="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-8.png"><img class="alignnone size-full wp-image-175" title="debug-kit-8" src="http://ims.rockretail.com/wp-content/uploads/2009/11/debug-kit-8.png" alt="debug-kit-8" width="680" height="370" /></a></p>
<h3>Vlastné panely</h3>
<p>Debug Kit taktiež ponúka možnosť vytvoriť si vlastné panely alebo zobraziť len určité panely z tých, ktoré sú prednastavené. Táto časť je veľmi jednoduchá a jej štúdium prenechám čitateľom. Bližšie informácie môžete násjť na stránkach <a href="http://thechaw.com/debug_kit/wiki/docs/toolbar-panels" target="_blank">Debug Kit &#8211; Toolbar Panels</a></p>
<h2>Inštalácia</h2>
<p>Inštalácie Debug Kit je veľmi jednoduchá. Stačí si stiahnuť zdrojové kódy priamo z <a href="http://thechaw.com/debug_kit/versions" target="_blank">download stránok projektu</a>. Aktuálna verzia v dobe písania článku je Debug Kit 1.1. Po stiahnutí Debug Kit stačí obsah balíčku nakopírovať do adresára <em>app/plugins/debug_kit</em> a vložiť nasledovný kód do požadovaného controllera, v našom prípade sa jedná o <em>ArticlesController</em> v súbore <em>app/controllers/articles_controller.php</em></p>
<pre><code>class ArticlesController extends AppController {
     var $components = array('DebugKit.Toolbar');
}</code></pre>
<h2>Integrácia s FirePHP</h2>
<p>Veľmi zaujímavou vlastnosťou Debug Kit je možnosť <a href="http://thechaw.com/debug_kit/wiki/docs/FireCake" target="_blank">integrácie</a> tohto nástroja s debugovacím nástrojom <a href="http://firephp.org/" target="_blank">FirePHP</a>. FirePHP umožňuje debugovať PHP aplikáciu pomocou známeho nástroja <a href="/2009/11/01/5-rozsireni-do-firefoxu-ktore-musi-kazdy-vyvojar-mat/">FireBug</a>.</p>
<p>Týmto je náš článok u konca. Myslím si, že Debug Kit je jedným s najlepších debugovacích nástrojov pre CakePHP a určite stojí za vyskúšanie. Rád uvítam vaše nápady a pripomienky k debugovaniu v CakePHP.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/11/19/debug-kit-pokrocile-debugovanie-v-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Správne fungovanie CakePHP na webhostingu od firmy Websupport.sk</title>
		<link>http://ims.rockretail.com/2009/10/29/sprvane-fungovanie-cakephp-na-webhostingu-od-firmy-websupport-sk/</link>
		<comments>http://ims.rockretail.com/2009/10/29/sprvane-fungovanie-cakephp-na-webhostingu-od-firmy-websupport-sk/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Pre svoje projekty používam výborný webhosting od firmy Websupport. Avšak pre správne fungovanie CakePHP na serveroch od tejto firmy, je potrebná malá zmena v konfigurácii CakePHP. A kedže som dostal niekoľko otázok ohľadne tohto problému, rozhodol som sa napísať krátky článok.
Ako som už spomínal, defaultne CakePHP na webhosting Websupport nefunguje správne a hlási nasledovnú chybu
The [...]]]></description>
			<content:encoded><![CDATA[<p>Pre svoje projekty používam výborný webhosting od firmy <a href="http://www.websupport.sk">Websupport</a>. Avšak pre správne fungovanie CakePHP na serveroch od tejto firmy, je potrebná malá zmena v konfigurácii CakePHP. A kedže som dostal niekoľko otázok ohľadne tohto problému, rozhodol som sa napísať krátky článok.<span id="more-72"></span></p>
<p>Ako som už spomínal, defaultne CakePHP na webhosting Websupport nefunguje správne a hlási nasledovnú chybu</p>
<pre><code>The action webroot is not defined in controller AppController</code></pre>
<p>Hneď môžeme vidieť, že niečo nie je v poriadku a pri správnom fungovaní nemusí <em>AppController</em> obsahovať žiadnu metódu <em>webroot</em>. Túto chybu odstránime jednoduchým spôsobom a to nastavením správnej Routes direktívy. Do súboru <em>app/config/rou­tes.php</em> pridáme nasledovný riadok</p>
<pre><code>Router::connec­t(‚/app/webro­ot‘, array(‚controller‘  ⇒ ‚pages‘, ‚action‘  ⇒ ‚display‘,‚ho­me‘));</code></pre>
<p>Samozrejme si môžete zvoliť vlastné hodnoty pre <em>controller</em> a <em>action</em>.</p>
<p>Ak ste sa stretli s podobným problémom a vyriešili ho iným spôsobom, rád uvítam, ak sa s nimi podelíte v diskusii k článku.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/10/29/sprvane-fungovanie-cakephp-na-webhostingu-od-firmy-websupport-sk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zmeny vo vývojárskom tíme CakePHP</title>
		<link>http://ims.rockretail.com/2009/10/29/zmeny-vo-vyvojarskom-time-cakephp/</link>
		<comments>http://ims.rockretail.com/2009/10/29/zmeny-vo-vyvojarskom-time-cakephp/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[V uplynulých dňoch došlo k zásadným zmenám vo vývojárskom tíme CakePHP.
Ako informuje článok The cake is still rising, vývojársky tém opustili manažér projektu Garrett Woodworth a vývojár Nate Abele. Server Root.cz priniesol informácie, že obidvaja pracujú na MVC frameworku pre PHP 5.3 a v blízkej budúcnosti by ho mali vydať pod názvom Lithium. Myslím si, [...]]]></description>
			<content:encoded><![CDATA[<p>V uplynulých dňoch došlo k zásadným zmenám vo vývojárskom tíme CakePHP.<span id="more-71"></span></p>
<p>Ako informuje článok <a href="http://bakery.cakephp.org/articles/view/the-cake-is-still-rising">The cake is still rising</a>, vývojársky tém opustili manažér projektu Garrett Woodworth a vývojár Nate Abele. Server <a href="http://www.root.cz/zpravicky/manazer-projektu-cakephp-odchazi-z-cake-software-foundation/">Root.cz</a> priniesol informácie, že obidvaja pracujú na MVC frameworku pre PHP 5.3 a v blízkej budúcnosti by ho mali vydať pod názvom Lithium. Myslím si, že v mene celej komunity okolo CakePHP im patrí veľké poďakovanie za skvele odvedenú prácu.</p>
<p>V pôvodnom článku sa taktiež spomínajú významné pokroky vo vývoji CakePHP 1.3, ktorý vedie Mark Story a taktiež sa môžeme dozvedieť <a href="http://code.cakephp.org/cakephp2/wiki">niekoľko noviniek</a>, ktoré sa chystajú pre CakePHP 2.0. Vývoj CakePHP 2.0 je pod taktovkou Graham Weldon.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/10/29/zmeny-vo-vyvojarskom-time-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nová verzia CakePHP 1.2.4.8284</title>
		<link>http://ims.rockretail.com/2009/08/04/nova-verzia-cakephp-1-2-4-8284/</link>
		<comments>http://ims.rockretail.com/2009/08/04/nova-verzia-cakephp-1-2-4-8284/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bola vydaná nová verzia CakePHP s označením 1.2.4.8284 a zároveň s touto verziou bola sprístupnená aj vývojárska verzia CakePHP 1.3.
Pri verzii 1.2.4.8284 sa jedná o opravné vydanie, ktoré zahŕňa viac než 70 opráv. Kompletný zoznam zmien môžete nájsť v changelogu
Spolu s touto verziou bola vydaná aj vývojárksa verzia CakePHP 1.3. Medzi hlavné novinky tejto verzie [...]]]></description>
			<content:encoded><![CDATA[<p>Bola vydaná nová verzia CakePHP s označením 1.2.4.8284 a zároveň s touto verziou bola sprístupnená aj vývojárska verzia CakePHP 1.3.<span id="more-70"></span></p>
<p>Pri verzii 1.2.4.8284 sa jedná o opravné vydanie, ktoré zahŕňa viac než 70 opráv. Kompletný zoznam zmien môžete nájsť <a href="https://trac.cakephp.org/wiki/changelog/1.2.x.x/8284">v changelogu</a></p>
<p>Spolu s touto verziou bola vydaná aj vývojárksa verzia CakePHP 1.3. Medzi hlavné novinky tejto verzie patria</p>
<ul>
<li>kompatibilita s PHP 5.3</li>
<li>nový Javascript helper, ktorý podporuje používanie viacerých js knižníc</li>
<li>vylepšené generovanie kódu s podporou plugins a templates</li>
</ul>
<p>Ďalšou dôležitou zmenou je prechod celého projektu na verzovací systém <a href="http://git-scm.com/">Git</a>. Všetky zdrojové kódy môžete nájsť na adrese <a href="http://code.cakephp.org">http://code.cakephp.org</a> Nájdené chyby môžete odteraz nahlásiť na adrese <a href="http://code.cakephp.org/tickets">http://code.cakephp.org/tickets</a> namiesto <a href="http://trac.cakephp.org">http://trac.cakephp.org</a> ktorá sa používala v minulosti. V súvislosti s novým verzovacím systémom Git ešte spomeniem, že na adrese <a href="http://code.cakephp.org/source/branches">http://code.cakephp.org/source/branches</a> môžete nájsť niekoľko vetví CakePHP. Vetva <a href="http://code.cakephp.org/source/branches/1.2">CakePHP 1.2</a> je určená pre opravy aktuálneho vydania a vetva <a href="http://code.cakephp.org/source/branches/1.3">CakePHP 1.3</a> predstavuje nastávajúcu verziu.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/08/04/nova-verzia-cakephp-1-2-4-8284/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zobrazenie error správ pre intput textarea</title>
		<link>http://ims.rockretail.com/2009/08/02/zobrazenie-error-sprav-pre-intput-textarea/</link>
		<comments>http://ims.rockretail.com/2009/08/02/zobrazenie-error-sprav-pre-intput-textarea/#comments</comments>
		<pubDate>Tue, 30 Nov 1999 00:00:00 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[validácia]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[V dnešnom článku si ukážeme malý trik, ako zobraziť validačné error správy pri inpute textarea.
CakePHP defaultne nezobrazuje validačné správy pri inpute typu textarea. Pozrime sa na nasledovný príklad
echo $form-&#62;textarea(‚text‘);
Tento kód nám správne vygeneruje input textarea, avšak problém nastáva vo chvíli, kedy textarea neprejde validáciou a spolu s textareou by sa mala zobraziť aj validačná správa, [...]]]></description>
			<content:encoded><![CDATA[<p>V dnešnom článku si ukážeme malý trik, ako zobraziť validačné error správy pri inpute textarea.<span id="more-69"></span></p>
<p>CakePHP defaultne nezobrazuje validačné správy pri inpute typu textarea. Pozrime sa na nasledovný príklad</p>
<pre><code>echo $form-&gt;textarea(‚text‘);</code></pre>
<p>Tento kód nám správne vygeneruje input textarea, avšak problém nastáva vo chvíli, kedy textarea neprejde validáciou a spolu s textareou by sa mala zobraziť aj validačná správa, ktorá nás bude informovať o tom, čo nie je v poriadku. Takto by vypadal HTML kód pre textarea v prípade validačnej chyby, ak by sme textareu vykresľovali metódou <em>$form-&gt;textarea(‚text‘);</em></p>
<pre><code>&lt;textarea name=„data[Ar­ticle][text]“ cols=„10“ rows=„10“ id=„ArticleIn­troText“ class=„form-error“ &gt;&lt;/textarea&gt;</code></pre>
<p>Ako môžeme vidieť, CakePHP nám v tomto prípade žiadnu error správu nevygeneroval, avšak aspoň pridal atribút <em>class=„form-error“</em>. Toto správanie je nežiadúce a my samozrejme budeme chcieť error správu zobraziť. Trik spočíva v tom, že musíme zavolať metódu <a href="http://api.cakephp.org/class/form-helper#method-FormHelperinput">input()</a> a parametrom určiť, aby vygenerovala input textarea</p>
<pre><code>echo $form-&gt;input(‚text‘,a­rray(‚type‘=&gt;‚tex­tarea‘));</code></pre>
<p>V tomto prípade všetko funguje správne a v prípade, že textarea neprejde validáciou, CakePHP správne vygeneruje HTML kód aj s error správou</p>
<pre><code>&lt;textarea name=„data[Ar­ticle][text]“ cols=„10“ rows=„10“ id=„ArticleIn­troText“ class=„form-error“ &gt;&lt;/textarea&gt;&lt;div class=„error-message“&gt;This field cannot be left blank&lt;/div&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/08/02/zobrazenie-error-sprav-pre-intput-textarea/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ako si prispôsobiť 404 error stránku v CakePHP</title>
		<link>http://ims.rockretail.com/2009/07/03/ako-si-prisposobit-404-error-stranku-v-cakephp/</link>
		<comments>http://ims.rockretail.com/2009/07/03/ako-si-prisposobit-404-error-stranku-v-cakephp/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 16:30:38 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[404 error page]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Nedávno som narazil na výborný článok od Chris Coyier – 404 Best Practices, v ktorom popisuje možnosti, ako upraviť 404 error stránku. V tomto článku sa bližšie pozrieme nato, ako toho docieliť prostredníctvom CakePHP.
Ako ste sa mohli dočítať v spomínanom článku od Chris Coyier – 404 Best Practices, 404 error stránka by mala byť veľmi [...]]]></description>
			<content:encoded><![CDATA[<p>Nedávno som narazil na výborný článok od <a href="http://css-tricks.com/404-best-practices">Chris Coyier – 404 Best Practices</a>, v ktorom popisuje možnosti, ako upraviť 404 error stránku. V tomto článku sa bližšie pozrieme nato, ako toho docieliť prostredníctvom CakePHP.<span id="more-68"></span></p>
<p>Ako ste sa mohli dočítať v spomínanom článku od Chris Coyier – 404 Best Practices, 404 error stránka by mala byť veľmi dôležitou súčasťou každej profesionálnej aplikácie. Návštevníkom sa môže táto error stránka zobraziť veľmi jednoducho, a vôbec to nemusí byť jeho zásluhou (napr. chybný odkaz smerujúci na našu stránku alebo sme mohli presunúť stránku, ktorú sa pokúša návštevník zobraziť, na inú URL atď.) a preto by nám malo záležať na tom, aby sme návštevníka nestratili a poskytli mu určité informácie tak, aby našiel čo hľadá. Tu prichádza na rad prispôsobenie takejto stránky.</p>
<h2>Layout pre 404 error stránku</h2>
<p>Ako sme si už v CakePHP zvykli, štandardným chovaním pre zobrazenie akejkoľvek informácie je najprv vytvoriť layout a potom samotný obsah layoutu. Inak tomu nie je ani pri 404 error stránke. Layout umiestníme do súboru <em>app/views/lay­outs/error404­.ctp</em> a jeho obsah by mohol vypadať následovne</p>
<pre><code>&lt;? echo $html-&gt;docType('xhtml-trans'); ?&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
    &lt;head&gt;
        &lt;? echo $html-&gt;charset("utf-8"); ?&gt;
        &lt;title&gt;Tibor Pino - 404 not found&lt;/title&gt;
        &lt;meta name="author" content="Tibor Piňo" /&gt;

        &lt;style type="text/css"&gt;
            body { text-align: center; font-size: 1.3em;}
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;? echo $content_for_layout; ?&gt;

    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>Po vytvorení layoutu je ďalším krokom vytvorenie obsahu stránky.</p>
<h2>404 error stránka</h2>
<p>V našom prípade budeme chcieť návštevníkovi oznámiť, že stránka, ktorú sa pokúša zobraziť neexistuje, ale zároveň mu poskytneme odkaz na úvodnú stránku, kde by mohol potrebné informácie nájsť. Súbor so stránkou umiestníme do súboru <em>app/views/error­s/404error.ctp</em> a jeho obsah bude vypadať následovne</p>
<pre><code>&lt;?php $this-&gt;layout = 'error404'; ?&gt;
&lt;? echo $html-&gt;image('404-error-page.jpg',array('alt'=&gt;'Page not found')); ?&gt;
&lt;h1&gt;Stránka nenájdená!&lt;/h1&gt;
&lt;p&gt;Stránka, ktorú sa pokúšate zobraziť neexistuje,
&lt;br/&gt;ale &lt;? echo $html-&gt;link('úvodná stránka Tibor Piňo',array('controller'=&gt;'pages','action'=&gt;'display')); ?&gt;

&lt;br/&gt;by vám mohla pomôcť.&lt;/p&gt;</code></pre>
<p>Tu si musíme trochu vysvetliť, ako CakePHP pracuje s chybovými odpoveďami zo servera. CakePHP automaticky spracováva chybové odpovede, ktoré prijíme od servera. Pri detekovaní chybovej odpovede 404 CakePHP automaticky zobrazí súbor <em>app/views/error­s/404error.ctp</em>, ak takýto súbor existuje. V našom prípade tento súbor existuje a CakePHP ho správne zobrazí, takže nemusíme nič explicitne nastavovať. V tomto súbore je ešte jedna zvláštnosť a to to je určenie samotného layoutu <em>$this-&gt;layout = ‚error404‘;</em>. Toto určenie layoutu je nevyhnutné, pretože v opačnom prípade by CakePHP zobrazoval vlastný preddefinovaný layout, čo je v našom prípade nežiadúce.</p>
<p>Týmto máme všetko hotové a našu prispôsobenú 404 error stránku môžete vidieť priamo v praxi na stránke môjho portfólia <a href="http://blueweb.rockretail.com/aaa">blueweb.rockre­tail.com</a></p>
<p>Podobný postup môžete využiť aj pri <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">ďalších chybových odpovediach zo strany servera</a> napr. pre odpoveď 500 Internal Server Error by sme náš kód umiestnili do súborov <em>app/views/error­s/500error.ctp</em> a <em>app/views/lay­outs/500error­.ctp</em></p>
<p>Na záver ešte doplním, že sa mi nepodarilo zaistiť podporu tém pri týchto chybový stránkach. Vo svojich projektoch často využívam témy, ktoré sú napríklad umiestnené v <em>app/views/the­mes/default</em> a i napriek správnemu fungovaniu tém v mojich projektoch, som musel umiestniť súbory s chybovými hláškami priamo do adresárov umiestnených v <em>app/views</em> namiesto očakávaných v <em>app/views/the­mes/default</em></p>
<p>Rád uvítam vaše nápady a pripomienky v diskusii k článku.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/07/03/ako-si-prisposobit-404-error-stranku-v-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access Control List v CakePHP &#8211; 1. časť</title>
		<link>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/</link>
		<comments>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/#comments</comments>
		<pubDate>Wed, 27 May 2009 12:58:03 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[access control list]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[autorizácia]]></category>
		<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Jednou z najdôležitejších a zároveň jednou z najproblema­tickejších častí CakePHP je Access Control List. Tento miniseriál má za cieľ priniesť viac svetla do problematiky ACL.
Čo je Access Control List
Access Control List (ďalej len ACL) predstavuje spôsob, akým môžeme riadiť oprávnenia v rámci našej aplikácie jednoduchým a udržovateľným spôsobom. Nato, aby sme mohli požadovaného chovania dosiahnuť, [...]]]></description>
			<content:encoded><![CDATA[<p>Jednou z najdôležitejších a zároveň jednou z najproblema­tickejších častí CakePHP je Access Control List. Tento miniseriál má za cieľ priniesť viac svetla do problematiky ACL.<span id="more-63"></span></p>
<h2>Čo je Access Control List</h2>
<p>Access Control List (ďalej len ACL) predstavuje spôsob, akým môžeme riadiť oprávnenia v rámci našej aplikácie jednoduchým a udržovateľným spôsobom. Nato, aby sme mohli požadovaného chovania dosiahnuť, potrebujeme dva hlavné prvky: prvým prvkom je objekt, ktorý žiada niečo, a druhým prvkom je objekt, ktorý je žiadaný. CakePHP používa pre tieto dva hlavné prvky názvy ARO (Access Control Object) a ACO (Access Request Object). ARO potom reprezentuje objekt, ktorý niečo žiada (väčšinou sa jedná o normálneho užívateľa aplikácie) a ACO predstavuje objekt, ktorý je žiadaný (napr. akcia controllera alebo webová služba). Vyššie napísané môžeme teda zhrnúť do vety: ACL je mechanizmus, ktorý rozhoduje o prístupe ARO k ACO, resp. rozhoduje o prístupe užívateľov alebo častí systému k dátam alebo iným častiam systému. Zároveň si však treba uvedomiť, že v prípae ACL sa nejedná o autentifikáciu, jedná sa o proces autorizácie, ktorý sa uskutočňuje až po vykonaní autentifikácie.</p>
<h2>Ako ACL funguje</h2>
<p>Aby sme si celý mechanizmus dokázali predstaviť, vytvoríme si jednoduchý reálny príklad. Predstavme si, že v našej aplikácii sa vyskytuje niekoľko typov užívateľov (ďalej len ARO): administrátor, redaktor a návštevník. Taktiež má náš systém svoje vlastnosti, ku ktorým budú pristupovať ARO. Náš systém je jednoduchý a obsahuje následujúce vlastnosti (ďalej len ACO): zobrazenie článku, pridanie článku a pridanie komentára. Jednotlivé ARO by sme mohli prehľadne zapísať následovne</p>
<ul class="acl">
<li>užívatelia
<ul>
<li>administrátor
<ul>
<li>Admin 1</li>
</ul>
</li>
</ul>
<ul>
<li>redaktor
<ul>
<li>Redaktor 1</li>
</ul>
</li>
</ul>
<ul>
<li>návštevník
<ul>
<li>User 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>CakePHP používa pre uloženie ARO stromovú štruktúru, ktorá umožňuje (napr. oproti tabuľke) zoskupiť užívateľov do jednotlivých skupín a riadiť tak prístup na úrovni týchto skupín, čo predstavuje väčšiu flexibilitu.</p>
<p>Zoznam ARO máme hotový, ešte musíme k nim priradiť jednotlivé ACO a tým vytvoríme kompletný ACL, ktorý bude riadiť prístup k našej aplikácii. Kompletný ACL bude vypadať následovne</p>
<ul class="acl">
<li>užívatelia<br />
	<strong>Deny:</strong> all</p>
<ul>
<li>administrátor<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie článku, pridanie komentára</p>
<ul>
<li>Admin 1</li>
</ul>
</li>
</ul>
<ul>
<li>redaktor<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie článku</p>
<ul>
<li>Redaktor 1</li>
</ul>
</li>
</ul>
<ul>
<li>návštevník<br />
			<strong>Allow:</strong> zobrazenie článku, pridanie komentára</p>
<ul>
<li>User 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Ako môžeme vidieť, stromová štruktúra nám poskytuje vysokú flexibilitu. Ako užívateľ (bez bližšieho určenia či sa jedná o administrátora, redaktora alebo návštevníka) nemáme žiadne oprávnenie v našej aplikácii. Avšak ako redaktor môžeme zobrazovať a pridávať články, na druhej strane ako návštevník môžeme články len zobrazovať. Ako administrátor máme prístup ku všetkým vlastnostiam aplikácie. Vďaka spomínanej flexibilite stromovej štruktúry je veľmi jednoduché pridávať a odoberať skupiny alebo meniť oprávnenia pre jednotlivých užívateľov a skupiny.</p>
<p>Následne môžeme pomocou ACL zisťovať oprávnenia pre jednotlivé skupiny alebo jednotlivých užívateľov. Predstavme si situáciu, v ktorej by sme chceli zistiť, či redaktor <em>Redaktor 1</em> má oprávnenie pridať článok. Najprv zistíme cestu stromom pre uzol <em>Redaktor 1</em>, cesta je nasledovná <em>užívatelia → redaktor → Redaktor 1</em>. Následne môžeme získať jeho oprávnenia, ktoré môžeme zobraziť pomocou tabuľky následovne</p>
<table style="border:1px solid black">
<thead>
<tr>
<th style="width:150px">ARO uzol</th>
<th style="width:200px">Oprávnenia</th>
<th style="width:250px">Výsledok</th>
</tr>
</thead>
<tbody>
<tr>
<td>užívatelia</td>
<td>Deny all</td>
<td>nemá oprávnenie k pridaniu článku</td>
</tr>
<tr>
<td>redaktor</td>
<td>Allow „pridanie článku“</td>
<td>prístup povolený</td>
</tr>
<tr>
<td>Redaktor 1</td>
<td>Allow „pridanie článku“</td>
<td>prístup povolený</td>
</tr>
</tbody>
</table>
<p>Predchádzajúce časti boli teoretické a mali za cieľ podrobne vysvetliť fungovanie ACL. Teraz si poďme ukázať, ako inicializovať ACL v CakePHP.</p>
<h2>ACL v CakePHP</h2>
<p>Inicializácia ACL spočíva vo vytvorení databázových tabuliek, ktoré sú potrebné pre správne fungovanie. Defaultne je ACL v CakePHP založený na databáze (možnosťou je taktiež používať ACL bez databázy, ale v našom článku budeme používať ACL v spolupráci s databázou). Pri vytváraní tabuliek máme dve možnosti, použitie konzoly cakephp alebo import sql priamo do databázy. Pre tých, ktorí sú zoznámení s cakephp konzolou, stačí spustiť pomocou konzoly príkaz</p>
<pre><code>cake schema run create DbAcl</code></pre>
<p>Výpis konzoly by mal vypadať následovne</p>
<pre><code>---------------------------------------------------------------
Cake Schema Shell
---------------------------------------------------------------

The following tables will be dropped.
acos
aros
aros_acos

Are you sure you want to drop the tables? (y/n)
[n] &gt; y
Dropping tables.
acos updated.
aros updated.
aros_acos updated.

The following tables will be created.
acos
aros
aros_acos

Are you sure you want to create the tables? (y/n)
[y] &gt; y
Creating tables.
acos updated.
aros updated.
aros_acos updated.
End create.</code></pre>
<p>Pre tých, ktorí s konzolou zatiaľ nepracovali, stačí importovať sql súbor uložený v <em>app/config/sq/db_a­cl.sql</em> do vašej databázy. Následne sa nám v databáze vytvoria tri tabuľky</p>
<p><em>acos – zoznam ACO</em></p>
<p><em>aros – zoznam ARO</em></p>
<p><em>aros_acos – zoznam oprávnení ARO k ACO</em></p>
<p>Po úvodnej inicializácii máme všetko pripravené pre začatie používania ACL v CakePHP. V následujúcich častiach seriálu sa pustíme do samotnej implementácie. Vytvoríme si kompletnú aplikáciu používajúcu ACL a taktiež si ukážeme, ako automaticky naplniť tabuľku ACOs podľa existujúcich controllerov v našej aplikácii.</p>
<p>Rád uvítam vaše nápady, pripomienky a skúsenosti s ACL v diskusii k článku.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/05/27/access-control-list-v-cakephp-1-cast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamické nahrávanie modelu</title>
		<link>http://ims.rockretail.com/2009/05/23/dynamicke-nahravanie-modelu/</link>
		<comments>http://ims.rockretail.com/2009/05/23/dynamicke-nahravanie-modelu/#comments</comments>
		<pubDate>Sat, 23 May 2009 21:48:54 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[CakePHP disponuje prepracovaným mechanizmom, ktorý spája modely podľa definovaných väzieb a na základe týchto väzieb automaticky vytvára objekty modelov. Avšak môže nastať situácia, kedy potrebuje nahrať model dynamicky až za behu aplikácie. CakePHP nám ponúka niekoľko možností.
V praxi môže nastať situácia, kedy potrebujeme dynamicky nahrať model z controlleru alebo z modelu tzn. až za behu [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP disponuje prepracovaným mechanizmom, ktorý spája modely podľa definovaných väzieb a na základe týchto väzieb automaticky vytvára objekty modelov. Avšak môže nastať situácia, kedy potrebuje nahrať model dynamicky až za behu aplikácie. CakePHP nám ponúka niekoľko možností.<span id="more-61"></span></p>
<p>V praxi môže nastať situácia, kedy potrebujeme dynamicky nahrať model z controlleru alebo z modelu tzn. až za behu samotnej aplikácie. Najprv si predstavíme spôsob dynamického nahrávania modelu z controlleru.</p>
<h2>Dynamické nahrávanie modelu z controlleru</h2>
<p>Len si pripomeňme, že za normálnych okolností môžeme model v controlleri nahrať pomocou premennej <em>$uses</em></p>
<pre><code>class ArticlesController extends AppController {
        var $name = 'Articles';
        var $uses = array('Comment');
}</code></pre>
<p>Takto sa pri každom použití controlleru Articles sa nahrá a vytvorí objekt modelu <em>Comment</em> (samozrejme ak máme definované väzby v modeloch, napr. väzbu <em>Article hasMany Comment</em>, nemusíme explicitne uvádzať, že sa má daný model <em>Comment</em> nahrávať). Takéto správanie nemusí byť vždy žiadúce a nahratie modelu a vytvorenie jeho objektu budeme chcieť urobiť dynamicky, napr. iba pri vykonávaní akcie <em>add</em>. K tomuto účelu využijeme triedu <a href="http://api.cakephp.org/class/app">App</a> a jej metódu <em>import</em></p>
<pre><code>class ArticlesController extends AppController {
        var $name = 'Articles';

        function add() {
            //dynamicke nahratie modelu a vytvorenie objektu
            App::import('Model','Comment');
            $comment = new Comment;
            //volanie metody test z modelu Comment
            $comment-&gt;test();
        }
}</code></pre>
<h2>Dynamické nahrávanie modelu z iného modelu</h2>
<p>Vyššie spomenutý postup je platný aj pre dynamické nahrávanie modelu z iného modelu. Takto by vyzeralo dynamické nahratie a vytvorenie objektu modelu <em>Comment</em> z modelu <em>Article</em></p>
<pre><code>class Article extends AppModel {

        var $name = 'Article';
        var $useTable = 'articles';

        function addArticle() {
            //dynamicke nahratie modelu a vytvorenie objektu
            App::import('Model','Comment');
            $comment = new Comment;
            //volanie metody test z modelu Comment
            $comment-&gt;test();
        }
}</code></pre>
<p>V tomto prípade máme ešte jednu možnosť, ktorá sa však od predchádzajúcej líši najmä situáciou, v ktorej by mala byť použitá. Tou možnosťou je použitie metódy <a href="http://api.cakephp.org/class/model#method-ModelbindModel">bindModel()</a>. Musím však pripomenúť, že táto metóda je primárne určená na vytváranie dynamických väzieb medzi samotnými modelmi, i napriek tomu patrí medzi možnosti dynamického nahrávanie modelu. V našom prípade sme dynamicky vytvorili väzbu <em>Article hasMany Comment</em> a automaticky získali objekt na model <em>Comment</em></p>
<pre><code>class Article extends AppModel {

    var $name = 'Article';
    var $useTable = 'articles';

    function addArticle() {
        //dynamicke vytovrenie vazby a automaticke vytvorenie objektu modelu Comment
        $this-&gt;bindModel(
            array('hasMany' =&gt; array(
                'Comment' =&gt; array(
                    'className' =&gt; 'Comment'
                    )
                )
            )
        );
        //volanie metody test z modelu Comment
        $this-&gt;Comment-&gt;test();
    }
}</code></pre>
<p>Dynamické nahratie modelu sa uskutoční iba v prípade volania metódy <em>addArticle</em>, čo je chovanie, ktorého sme chceli dosiahnuť.</p>
<p>Dúfam, že tento krátky článok bude v budúcnosti nápomocný. Rád uvítam vaše poznatky, nápady a pripomienky v diskusii k článku.</p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/05/23/dynamicke-nahravanie-modelu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ako čítať excel .xls súbory</title>
		<link>http://ims.rockretail.com/2009/01/24/ako-citat-excel-xls-subory/</link>
		<comments>http://ims.rockretail.com/2009/01/24/ako-citat-excel-xls-subory/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 12:50:01 +0000</pubDate>
		<dc:creator>Tibor Piňo</dc:creator>
				<category><![CDATA[Tipy a triky]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[reader]]></category>
		<category><![CDATA[xls]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[V dnešnom článku si ukážeme, akým spôsobom môžeme pomocou CakePHP prečítať obsah excelovského .xls súboru.

Určite sa všetci zhodneme na tom, že kancelársky balík Microsoft Office je najúspešnejšou kancelárskou aplikáciou, a preto určite v mnohých prípadoch narazíme na situáciu, kedy budeme potrebovať prečítať obsah excel súboru s príponou .xls V tomto článku si ukážeme podrobný návod, [...]]]></description>
			<content:encoded><![CDATA[<p>V dnešnom článku si ukážeme, akým spôsobom môžeme pomocou CakePHP prečítať obsah excelovského .xls súboru.</p>
<p><span id="more-58"></span></p>
<p>Určite sa všetci zhodneme na tom, že kancelársky balík Microsoft Office je najúspešnejšou kancelárskou aplikáciou, a preto určite v mnohých prípadoch narazíme na situáciu, kedy budeme potrebovať prečítať obsah excel súboru s príponou .xls V tomto článku si ukážeme podrobný návod, ako takúto situáciu vyriešiť.</p>
<h2>PHP excel reader</h2>
<p>Na čítanie .xls súboru budeme využívať php knižnicu <a href="http://sourceforge.net/projects/phpexcelreader">php excel reader</a> Na oficiálnych stránkach moc informácií nenájdete, avšak všetky potrebné informácie aj s ukážkovými príkladmi sa dajú nájsť v stiahnuteľnom súbore. My si však túto knižnicu upravíme pre potreby CakePHP a vytvoríme z nej komponentu.</p>
<h2>PHP excel reader komponenta</h2>
<p>Samotnú komponentu umiestníme do adresára <em>app/controller­s/components</em> do súboru <em>spreadsheet.php</em>. Nesmieme však zabudnúť aj na priložený súbor <em>oleread.inc</em> (je súčasťou stiahnuteľného balíka na oficiálnych stránkach excel readeru), ktorý daná knižnica potrebuje k svojej činnosti a musíme ho taktiež umiestniť do adresára <em>components</em>. Nekompletný kód našej komponenty v súbore <em>app/controller­s/components/spre­adsheet.php</em> by vypadal následovne</p>
<pre><code>require_once 'oleread.inc';

class SpreadsheetComponent
{
     //obsah komponenty
}</code></pre>
<p>Následne musíme danú komponentu importovať v controlleri, ktorý ju bude používať. Náš controller pomenujeme <em>DocumentsContro­ller</em> a umiestníme ho do súboru <em>app/controller­s/documents_con­troller.php</em>. Kód controlleru by vypadal následovne</p>
<pre><code>class DocumentsController extends AppController {

    var $name = 'Documents';
    var $helpers = array('Html', 'Form');
    var $components = array('spreadsheet');
}</code></pre>
<p>Po vytvorení komponenty a jej inicializovaní máme všetko pripravené a môžeme sa pustiť do čítania súboru. Kód pre čítanie .xls súboru by vypadal následovne</p>
<pre><code>class DocumentsController extends AppController {

    var $name = 'Documents';
    var $helpers = array('Html', 'Form');
    var $components = array('spreadsheet');
    var $xsl = 'spreadsheet.xls';
    var $xsl_path = 'files';

    function read() {

        //nastavime vystupne kodovanie citanych dat
        $this-&gt;spreadsheet-&gt;setUTFEncoder('iconv');
        $this-&gt;spreadsheet-&gt;setOutputEncoding('utf-8');

        //urcime subor, ktory budeme citat, v nasom pripade umiestneny v adresari app/webroot/files
        $this-&gt;spreadsheet-&gt;read($this-&gt;xsl_path.DS.$this-&gt;xsl);

        //samotne citanie .xls suboru
        for ($i = 1; $i &lt;=$this-&gt;spreadsheet-&gt;sheets[0]['numRows']; $i++) {

             //bunka na riadku $i v stlpci 1
             echo $this-&gt;spreadsheet-&gt;sheets[0]['cells'][$i][1];

             //bunka na riadku $i v stlpci 2
             echo $this-&gt;spreadsheet-&gt;sheets[0]['cells'][$i][2];

        }
    }
}</code></pre>
<p>Ako môžeme vidieť, práca s knižnicou je veľmi jednoduchá a nepotrebuje žiadne bližšie vysvetlenie. Akurát treba spomenúť, že je potrebné nastaviť výstupné kódovanie čítaných dát v závislosti na tom, aké kódovanie používa naša aplikácia. V našom prípade sme nastavili kódovanie <em>utf-8</em>.</p>
<p>Týmto je náš článok u konca. Knižnica je veľmi jednoduchá na použitie a určite ju v mnohých prípadoch úspešne využijeme. Avšak musím spomenúť, že .xls formát od microsoftu nie je otvoreným formátom (aspoň v dobe poslednej aktualizácie tejto knižnice nebol) a preto sa môžeme stretnúť aj s problémami so správnym čítaním údajov z .xls súborov. Avšak i napriek menším nedostatkom môžeme tuto knižnicu označiť za veľmi vydarenú.</p>
<p>Rád uvítam vaše nápady a pripomienky ohľadne témy .xls v php.</p>
<p>Na stiahnutie: <a href="http://ims.rockretail.com/wp-content/uploads/2009/01/spreadsheet-cakephp-component.zip">spreadsheet-cakephp-component</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ims.rockretail.com/2009/01/24/ako-citat-excel-xls-subory/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
