<?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>Grummfy&#039;s project &#187; ZF</title>
	<atom:link href="http://grummfy.be/blog/key/zf/feed" rel="self" type="application/rss+xml" />
	<link>http://grummfy.be/blog</link>
	<description>Mes projets, mes rêves, mes envies, ...</description>
	<lastBuildDate>Sun, 22 Aug 2010 22:25:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>ZF : module et autoloader</title>
		<link>http://grummfy.be/blog/343#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/343#comments</comments>
		<pubDate>Sun, 22 Aug 2010 22:00:55 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=343</guid>
		<description><![CDATA[Avec Zend Framework, lorsque l&#8217;on travail un projet conséquent il devient vite utile de travailler avec le mécanisme des modules. Celui-ci permet d&#8217;étendre pas mal de chose et surtout une séparation poussée en &#8230; module. Le problème de ce mécanisme1 est qu&#8217;il faut définir le chemin pour le chargement automatique à l&#8217;aide de ceci : [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Zend Framework, lorsque l&#8217;on travail un projet conséquent il devient vite utile de travailler avec le mécanisme des <a href="http://framework.zend.com/manual/fr/zend.controller.modular.html" target="_blank">modules</a>. Celui-ci permet d&#8217;étendre pas mal de chose et surtout une séparation poussée en &#8230; module.</p>
<p>Le problème de ce mécanisme<sup class='footnote'><a href='#fn-343-1' id='fnref-343-1'>1</a></sup> est qu&#8217;il faut définir le chemin pour le chargement automatique à l&#8217;aide de ceci :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Application_Module_Autoloader<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'namespace'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'SuperModule'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'basePath'</span>  <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #0000ff;">'path to super module'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Je vous propose donc de faire une petite amélioration afin que ce chargement soit fait automatiquement.</p>
<p>Avant tout, dans votre configuration (ici en .ini) vous devez au moins avoir ceci de présent :</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">resources.frontController.moduleDirectory <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/modules&quot;</span>
resources.modules <span style="color: #000066; font-weight:bold;">=</span></pre></div></div>

<p>Ensuite, à la base de chaque dossier module créer un fichier Bootstrap.php<sup class='footnote'><a href='#fn-343-2' id='fnref-343-2'>2</a></sup> :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
<span style="color: #000000; font-weight: bold;">class</span> SuperModule_Bootstrap <span style="color: #000000; font-weight: bold;">extends</span> Grummfy_Bootstrap<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

<p>Et pour finir créer le fichier<sup class='footnote'><a href='#fn-343-3' id='fnref-343-3'>3</a></sup> library/Grummfy/Bootstrap.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>?php
&nbsp;
abstract <span style="color: #000000; font-weight: bold;">class</span> Grummfy_Bootstrap <span style="color: #000000; font-weight: bold;">extends</span> Zend_Application_Bootstrap_Bootstrap
<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000000; font-weight: bold;">function</span> _initAutoload<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$className</span> <span style="color: #339933;">=</span> <span style="color: #990000;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$zf_namespace</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'_'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$className</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$reflector</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ReflectionClass<span style="color: #009900;">&#40;</span><span style="color: #000088;">$className</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Application_Module_Autoloader<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'namespace'</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #000088;">$zf_namespace</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'basePath'</span>  <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$reflector</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getFileName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$autoloader</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-343-1'>sauf si j&#8217;ai loupé un truc&#8230; <span class='footnotereverse'><a href='#fnref-343-1'>&#8617;</a></span></li>
<li id='fn-343-2'>ne pas oublier de changer le nom du module &#8230; <span class='footnotereverse'><a href='#fnref-343-2'>&#8617;</a></span></li>
<li id='fn-343-3'>n&#8217;oubliez pas de déclarer le &laquo;&nbsp;namespace&nbsp;&raquo; Grummfy ou bien d&#8217;inclure le fichier <span class='footnotereverse'><a href='#fnref-343-3'>&#8617;</a></span></li>
</ol>
</div>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F343&amp;linkname=ZF%20%3A%20module%20et%20autoloader" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/343/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZF : génération automatique du fichier de navigation et ACL</title>
		<link>http://grummfy.be/blog/333#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/333#comments</comments>
		<pubDate>Mon, 16 Aug 2010 20:47:14 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[délire]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=333</guid>
		<description><![CDATA[Lors de l&#8217;utilisation du mécanisme d&#8217;ACL et de génération de menu dans Zend Framework, il est intéressant de limiter l&#8217;affichage de ce menu en utilisant les ressources et privilèges associer. Pour ma part, j&#8217;utilise un fichier XML pour construire mon menu, mon sitemap, &#8230; 1. Et comme beaucoup je génère mon projet ZF à l&#8217;aide [...]]]></description>
			<content:encoded><![CDATA[<p>Lors de l&#8217;utilisation du mécanisme d&#8217;ACL et de génération de menu dans Zend Framework, il est intéressant de limiter l&#8217;affichage de ce menu en utilisant les ressources et privilèges associer.</p>
<p>Pour ma part, j&#8217;utilise un fichier XML pour construire mon menu, mon sitemap, &#8230; <sup class='footnote'><a href='#fn-333-1' id='fnref-333-1'>1</a></sup>. Et comme beaucoup je génère mon projet ZF à l&#8217;aide de Zend_Tool. Je trouvais donc dommage de devoir réécrire pratiquement la même chose que ce que j&#8217;avais déclaré dans Zend_Tool pour reconstruire mon menu. J&#8217;ai donc décidé de <em>rapidement</em> écrire un petit script qui reprendrait le fichier XML du projet et le transformerait en menu &#8230;</p>
<p>À noter que le script devrait certainement être amélioré, mais que cela permet un gain de temps considérable &#8230;</p>
<p><a href="http://grummfy.com/download/PlusScript/zfProject2Navigation.phps" target="_blank">Téléchargement</a>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-333-1'>Comme expliquer dans le manuel http://framework.zend.com/manual/fr/zend.navigation.html <span class='footnotereverse'><a href='#fnref-333-1'>&#8617;</a></span></li>
</ol>
</div>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F333&amp;linkname=ZF%20%3A%20g%C3%A9n%C3%A9ration%20automatique%20du%20fichier%20de%20navigation%20et%20ACL" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planet Zend Framework</title>
		<link>http://grummfy.be/blog/229#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/229#comments</comments>
		<pubDate>Thu, 21 Jan 2010 21:48:38 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=229</guid>
		<description><![CDATA[Un planet sur Zend Framework, pour les francophones est née! Tout d&#8217;abord qu&#8217;est-ce qu&#8217;un planet? Un planet est un agrégateur de flux rss concernant un même sujet. Le but est de promouvoir mais surtout de concentrer les articles publié sur le sujet. Pour ceux qui désirerait y goûter, je vous renvoi vers le site : [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Un planet sur Zend Framework, pour les francophones est née!</p>
<p style="text-align: justify;">Tout d&#8217;abord qu&#8217;est-ce qu&#8217;un planet?<br />
Un planet est un agrégateur de flux rss concernant un même sujet. Le but est de promouvoir mais surtout de concentrer les articles publié sur le sujet.</p>
<p style="text-align: justify;">Pour ceux qui désirerait y goûter, je vous renvoi vers le site : <a title="ZF Planet" href="http://zf-planet.net/fr/" target="_blank">zf planet</a></p>
<p style="text-align: justify;">N&#8217;hésitez pas à demander a en faire partie.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F229&amp;linkname=Planet%20Zend%20Framework" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/229/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tri de listing sql via des liens dans Zend Framework</title>
		<link>http://grummfy.be/blog/222#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/222#comments</comments>
		<pubDate>Sun, 10 Jan 2010 02:23:44 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=222</guid>
		<description><![CDATA[Dans la plupart des cas lorsque l'on affiche un listing provenant d'une requête sql on aimerait pouvoir offrir le tri à l'utilisateur. Dans l'article qui suit, je vous propose de découvrir une manière de le faire assez facilement.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Dans la plupart des cas lorsque l&#8217;on affiche un listing provenant d&#8217;une requête sql on aimerait pouvoir offrir le tri à l&#8217;utilisateur. Dans l&#8217;article qui suit, je vous propose de découvrir une manière de le faire assez facilement.</p>
<p><span id="more-222"></span></p>
<p style="text-align: justify;">Comme exemple nous prendrons le cas d&#8217;une liste via l&#8217;appelle du contrôleur membres et de l&#8217;action liste.</p>
<p style="text-align: justify;">Dans le fichier <em>MembresController.php</em> nous aurons donc une méthode <em>listeAction()</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> listeAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$membres</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Default_Model_DbTable_Membres<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entries</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$membres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Et dans la vue <em>membres/liste.phtml</em> nous aurons :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$rowCount</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entries</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$rowCount</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;Nom&lt;/th&gt;
		&lt;th&gt;Adresse&lt;/th&gt;
		&lt;th&gt;Code postal&lt;/th&gt;
		&lt;th&gt;Ville&lt;/th&gt;
		&lt;th&gt;Email&lt;/th&gt;
	&lt;/tr&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entrie</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$entry</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;tr&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addrese</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">postCode</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cityName</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;/tr&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/table&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div&gt;Aucun membre n\'est enregistré!&lt;br /&gt;;)&lt;br /&gt;&lt;/div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Jusque là, normalement, rien de bien complexe pour celui qui connait ZF.</p>
<p style="text-align: justify;">Ajoutons deux fichiers (cf <a rel="attachment wp-att-223" href="http://grummfy.be/blog/222/zf-tuto-order-by">pièce jointe</a>) dans le dossier librairy/Gru.</p>
<p style="text-align: justify;">
Nous devons ensuite les charger de manière automatique. Pour ce faire, dans le bootstrap.php (dont un extrait possible est présent ci-dessous) ajoutons les informations nécessaires au chargement des fichiers :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	protected <span style="color: #000000; font-weight: bold;">function</span> _initAutoload<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// nos deux lignes ajoutées</span>
		<span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> Zend_Loader_Autoloader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$autoloader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerNamespace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Gru'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// fin de l'ajout</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Exemple de ce qu'il pourrait y avoir en plus!</span>
		<span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Application_Module_Autoloader<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'namespace'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Default'</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'basePath'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$autoloader</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	protected <span style="color: #000000; font-weight: bold;">function</span> _initView<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$view</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_View<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$viewRenderer</span> <span style="color: #339933;">=</span> Zend_Controller_Action_HelperBroker<span style="color: #339933;">::</span><span style="color: #004000;">getStaticHelper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ViewRenderer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$viewRenderer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setView</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$view</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//début ajout</span>
		<span style="color: #000088;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addHelperPath</span><span style="color: #009900;">&#40;</span>APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/../library/Gru/View/Helper/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Gru_View_Helper_'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// fin de l'ajout</span>
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$view</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Maintenant, modifions notre application pour ajouter le tri. Reprenons notre contrôleur et modifions la méthode <em>listeAction().</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> listeAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Gestion du tri</span>
	<span style="color: #000088;">$order</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Gru_OrderBy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'membre'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//Ajout des clefs de tri</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addKey</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Nom'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addKey</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'add'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Adresse'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addKey</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'postCode'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Code postal'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addKey</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cityName'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Ville'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addKey</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'email'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Courriel'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'asc'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// injection des requêtes get</span>
	<span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insertRequestParams</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getRequest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getParam</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'order'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getRequest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getParam</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'by'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderKeys</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getKeys</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
	<span style="color: #000088;">$membres</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Default_Model_DbTable_Membres<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//ne pas oubleir d'ajouter les champs trier au moment de la requête sql</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entries</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$membres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$order</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSqlKeys</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Et pour finir notre vue :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$rowCount</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entries</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$rowCount</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;table&gt;
	&lt;tr&gt;
		<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderBy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">th</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderKeys</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baseUrl</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/themes/images/'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;/tr&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entrie</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$entry</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;tr&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addrese</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">postCode</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cityName</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
		&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$entry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;/tr&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/table&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div&gt;Aucun membre n\'est enregistré!&lt;br /&gt;;)&lt;br /&gt;&lt;/div&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Dans l&#8217;exemple, nous afficherons des icônes suivant le sens du tri, icônes se trouvant dans le répertoire spécifié. Un clic sur les titres permet de trier suivant la colonne cliquée. A noter qu&#8217;ici Adresse ne sera pas triable du au fait de la non précision de l&#8217;ordre.</p>
<p style="text-align: justify;">Il y aurait moyen d&#8217;améliorer le script :</p>
<ul>
<li>utilisations de décorateurs</li>
<li>utilisation de traduction</li>
<li>Gru_OrderBy devrait être un plugins</li>
<li>&#8230;</li>
</ul>
<p style="text-align: justify;">En attendant, j&#8217;espère que ce bout de code vous facilitera la vie!</p>
<p style="text-align: justify;">Des remarques, des questions? Postez un commentaire!</p>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/222/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>[note]Zend Framework et dojo : auto-complétion</title>
		<link>http://grummfy.be/blog/216#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/216#comments</comments>
		<pubDate>Sat, 02 Jan 2010 15:32:29 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=216</guid>
		<description><![CDATA[Ceci est une note rapide ... j'espère produire un article plus intéressant une autre fois ...
Nous allons regarder les bases de l'auto-complétion  avec ZF et Dojo. Dojo simplement parce qu'il est le mieux intégré des frameworks javascript. Sachant que pour l'instant seul jQuery et Dojo sont intégré...]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ceci est une note rapide &#8230; j&#8217;espère produire un article plus intéressant une autre fois &#8230;</p>
<p style="text-align: justify;">Nous allons regarder les bases de l&#8217;auto-complétion  avec <a href="./?tag=zf#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">ZF</a> et Dojo. Dojo simplement parce qu&#8217;il est le mieux intégré des frameworks javascript. Sachant que pour l&#8217;instant seul jQuery et Dojo sont intégré</p>
<h2>Le code</h2>
<p><em>application/views/scripts/test/index.phtml</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">//activation de dojo</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comboBox</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'toto'</span><span style="color: #339933;">,</span>	<span style="color: #666666; font-style: italic;">//id html de l'élément</span>
	<span style="color: #0000ff;">''</span><span style="color: #339933;">,</span>	<span style="color: #666666; font-style: italic;">//valeur par défaut</span>
	<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'autocomplete'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>								<span style="color: #666666; font-style: italic;">//activation de l'auto-complétion</span>
		<span style="color: #0000ff;">'store'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'stateStore'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'storeType'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'dojo.data.ItemFileReadStore'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'storeParams'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baseUrl</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/test/records'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>	<span style="color: #666666; font-style: italic;">//url où les données JSON sont récupérée</span>
		<span style="color: #0000ff;">'searchAttr'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span>								<span style="color: #666666; font-style: italic;">//donnée recherchée pour remplir le combobox</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><em>application/layoutes/scripts/layout.phtml</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// ...</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isEnabled</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>	<span style="color: #666666; font-style: italic;">//Évite les chargement inutile ....</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDjConfigOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'isDebug'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENV <span style="color: #339933;">==</span> <span style="color: #0000ff;">'development'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">//affiche une console de deboguage si on est en mode dev</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDjConfigOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'usePlainJson'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>						<span style="color: #666666; font-style: italic;">//utilise du json texte</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setLocalPath</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">baseUrl</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/themes/js/dojo/dojo/dojo.js'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">//chemin vers les fichier dojo</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addStyleSheetModule</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dijit.themes.tundra'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>					<span style="color: #666666; font-style: italic;">//thème à chargé</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dojo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>												<span style="color: #666666; font-style: italic;">//affichage du tout ...</span>
		<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">// viennent ensuite nos jabvascript, css, etc</span>
<span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #666666; font-style: italic;">//&lt;/head&gt;</span>
<span style="color: #666666; font-style: italic;">// ne pas oublier la class tundra dans le body</span>
<span style="color: #339933;">&lt;</span>body <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tundra&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #666666; font-style: italic;">//...</span></pre></div></div>

<p><em>application/Bootstrap.php</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #666666; font-style: italic;">//dans _initView()</span>
		<span style="color: #666666; font-style: italic;">//dojo</span>
		Zend_Dojo<span style="color: #339933;">::</span><span style="color: #004000;">enableView</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$view</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//...</span></pre></div></div>

<p><em>application/controllers/TestController.php</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> TestController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> indexAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> recordsAction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// on désactive l'affichage</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">disableLayout</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//on va cherchée les données et les met dans un objet Zend_Dojo_Data</span>
		<span style="color: #000088;">$book</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Default_Model_DbTable_Book<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$dojo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Dojo_Data<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$book</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$dojo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toJson</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// on sort ... c'est pas joli mais en attendant cela fonctionne!</span>
		<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

<h2>Choses à <span style="text-decoration: line-through;">retenir</span> comprendre</h2>
<p>Les choses à retenir :</p>
<ul>
<li><em>storeParams</em> est l&#8217;url où les donnée au format JSON seront prise</li>
<li><em>searchAttr</em> est l&#8217;élément qui va servir pour recherchée les données dans la masse de donnée JSON</li>
<li>ne pas oublier de mettre la class css &#8216;tundra&#8217;</li>
<li>Dojo peut, via ses styles css modifier votre rendu &#8230;</li>
</ul>
<h2>Remarque</h2>
<p>Version de ZF : 1.9.6</p>
<p>Version de Dojo (fourni avec zf dans extras) : 1.3</p>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/216/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework aide de vue partialLoop et cycle</title>
		<link>http://grummfy.be/blog/199#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/199#comments</comments>
		<pubDate>Wed, 30 Dec 2009 14:16:39 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=199</guid>
		<description><![CDATA[Il y a des moment où l&#8217;on se dit que la doc est vraiment incomplète &#8230; Voici un exemple assez tordu&#8230; Rappel L&#8217;aide de vue (view helper)  cycle permet d&#8217;alterner des valeurs dans la vue, L&#8217;aide de vue partialLoop permet de faire une boucle sur une vue (fichier) afin de l&#8217;incorporer dans un autre fichier&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Il y a des moment où l&#8217;on se dit que la doc est vraiment incomplète &#8230; Voici un exemple assez tordu&#8230;</p>
<h2>Rappel</h2>
<ul>
<li>L&#8217;aide de vue (view helper)  <a href="http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.cycle">cycle</a> permet d&#8217;alterner des valeurs dans la vue,</li>
<li>L&#8217;aide de vue <a href="http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.partial">partialLoop</a> permet de faire une boucle sur une vue (fichier) afin de l&#8217;incorporer dans un autre fichier&#8230;</li>
</ul>
<h2>Utilisation</h2>
<p style="text-align: justify;">Pour utiliser les deux ensembles, par exemple dans le cas d&#8217;un listing dont la sortie serait dans un tableau, il vous suffit de définir les valeurs assigner au cycle <strong><em>avant</em></strong> de faire le partialLoop.<br />
Exemple :<br />
Vue <em>views/scripts/membres/listing.phtml</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;table class=&quot;table&quot;&gt;
	&lt;thead&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom&lt;/th&gt;
			&lt;th&gt;Prénom&lt;/th&gt;
			&lt;th&gt;Adresse&lt;/th&gt;
			&lt;th&gt;Code postal&lt;/th&gt;
			&lt;th&gt;Ville&lt;/th&gt;
			&lt;th&gt;Pays&lt;/th&gt;
			&lt;th&gt;Téléphone&lt;/th&gt;
		&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cycle</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tr_1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'tr_2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'tr_3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'_user_listing'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">partialLoop</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'utilisateurs/_user_list_listing.phtml'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">entries</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;/tbody&gt;
&lt;/table&gt;</pre></div></div>

<p>Vue <em>views/scripts/utilisateurs/_user_list_listing.phtml</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;tr class=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cycle</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'_user_listing'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">firstName</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Addrese</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">postCode</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cityName</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">escape</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">countryName</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
	&lt;td&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tel_prefix</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/td&gt;
&lt;/tr&gt;</pre></div></div>
</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F199&amp;linkname=Zend%20Framework%20aide%20de%20vue%20partialLoop%20et%20cycle" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilisation de FlashMessenger via un view helper dans Zend Framework</title>
		<link>http://grummfy.be/blog/191#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/191#comments</comments>
		<pubDate>Sun, 27 Dec 2009 18:21:56 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=191</guid>
		<description><![CDATA[FlashMessanger est à la base un action helper, donc confiné au contrôleur. Cependant, c'est tellement pratique qu'il est dommage de ne pas pouvoir l'utiliser a travers les vue (view)... Je vous propose donc de l'utiliser via un view helper!]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a title="Manuel Zend Framework sur FlashMessenger" href="http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.flashmessenger">FlashMessanger</a> est à la base un action helper, donc confiné au contrôleur. Celui-ci permet de passer un message d&#8217;une page à l&#8217;autre via le mécanisme des sessions . Après un formulaire on doit souvent ajouter un message de confirmation, on peux par exemple utilisé le FlashMessenger pour le faire et ainsi au ré-affichage suivant  afficher ce message!  C&#8217;est tellement pratique qu&#8217;il est dommage de ne pas pouvoir l&#8217;utiliser a travers les vue (view) de manière automatique&#8230;</p>
<p>Je vous propose donc de l&#8217;utiliser via un view helper!</p>
<p><span id="more-191"></span></p>
<h2>L&#8217;aide de vue</h2>
<p style="text-align: justify;">Voici l&#8217;aide de vue (view helper) FlashMessenger (du même nom que l&#8217;action helper). Il est à placer dans application/views/helpers/FlashMessenger.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @see Zend_Controller_Action_Helper_FlashMessenger
 */</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Zend/Controller/Action/Helper/FlashMessenger.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * @author grummfy
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> Zend_View_Helper_FlashMessenger <span style="color: #000000; font-weight: bold;">extends</span> Zend_View_Helper_Abstract implements IteratorAggregate<span style="color: #339933;">,</span> Countable
<span style="color: #009900;">&#123;</span>
	protected <span style="color: #000088;">$_fm</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Controller_Action_Helper_FlashMessenger<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> flashMessenger<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cur</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cur</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">else</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessages</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * Return currents FlashMessegenr object
	 * @return Zend_Controller_Action_Helper_FlashMessenger
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getFlasMessenger<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * Return previous emmited messages
	 * @return array
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getMessages<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm<span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessages</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * Renvoi le nombre de messages passé
	 * @return int
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> hasMessages<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getIterator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm<span style="color: #339933;">-&gt;</span><span style="color: #004000;">getIterator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_fm<span style="color: #339933;">-&gt;</span><span style="color: #004000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

</p>
<h2>Utilisation</h2>
<p style="text-align: justify;">
Pour l&#8217;utiliser rien de plus simple, par exemple dans le layout :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">&lt;?php</span>
		<span style="color: #666666; font-style: italic;">// flashmessage</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">flashMessenger</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasMessages</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
	<span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;div id=&quot;flashMessengers&quot;&gt;
		<span style="color: #000000; font-weight: bold;">&lt;?php</span>
			<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">flashMessenger</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;flashMessenger&quot;&gt;'</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
					<span style="color: #b1b100;">echo</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">else</span>
					<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;/div&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span>
		<span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// fin flashmessage</span>
	<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Ceci peut très bien être utilisé dans votre vue (view) avec exactement le même code!</p>
<p style="text-align: justify;">Pour envoyer le message il vous suffit de simplement faire, dans votre contrôleur :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">flashMessenger</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Mise à jour du truc effectuées avec succès!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</p>
<p></p>
<p style="text-align: justify;">
Et c&#8217;est tout!</p>
]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/191/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Créer et ajouter un validateur de session dans Zend Framework</title>
		<link>http://grummfy.be/blog/186#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/186#comments</comments>
		<pubDate>Sat, 19 Dec 2009 16:30:17 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=186</guid>
		<description><![CDATA[Zend Framework possède divers mécanismes de sécurisation, parmi ceux-ci l&#8217;on trouvent les validateurs. Ces validateurs vérifie que la ou les données à validées sont valide et par là même sécurise celle-ci. Dans notre cas nous allons nous intéresser aux sessions et plus particulièrement à la validation de celle-ci au moment de sont démarrage, ceci afin [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">
<p>Zend Framework possède divers mécanismes de sécurisation, parmi ceux-ci l&#8217;on trouvent les validateurs. Ces validateurs vérifie que la ou les données à validées sont valide et par là même sécurise celle-ci.</p>
<p>Dans notre cas nous allons nous intéresser aux sessions et plus particulièrement à la validation de celle-ci au moment de sont démarrage, ceci afin de, par exemple, <span style="text-decoration: line-through;">empêcher le</span> diminuer les possibilités de vol de celle-ci. Nous allons créer un validateur d&#8217;ip &#8230; (oui je sais y a moyen de passer outre, si on derrière un proxy gnagnagna &#8230;. mais ici c&#8217;est un exemple!).</p>
<p><span id="more-186"></span></p>
<h2>Rermarque</h2>
<p>Nous utiliserons Zend Framework en version 1.9.<br />
De plus, nous allons créer notre librairie qui se nomera &laquo;&nbsp;Biblio&nbsp;&raquo;. Donc, il faudra penser à créer dasn votre répertoire library le dossier Biblio!</p>
<h2>Les sessions</h2>
<p>Tout d&#8217;abord mettons en place le mécanisme de session. Dans le Bootstrap nous ajoutons la méthode suivante :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> _initSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	Zend_Session<span style="color: #339933;">::</span><span style="color: #004000;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Le validateur</h2>
<p>Passons à la création proporement dite, créons le fichier /library/Biblio/Session/Validator/Ip.php, dont le contenu sera</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">setValidData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * Validate() - this method will determine if the ip matches the
	 * ip we stored when we initialized this variable.
	 *
	 * @return bool
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> validate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>getValidData<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>?<span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REMOTE_ADDR'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># EOF</span></pre></div></div>

<p>Ensuite, il nous faut ajouter ce validateur à la session. Donc, on réédite le Bootstrap et on modifie la méthode _initSession() :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">protected <span style="color: #000000; font-weight: bold;">function</span> _initSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Biblio/Session/Validator/Ip.php'</span><span style="color: #339933;">;</span>
	Zend_Session<span style="color: #339933;">::</span><span style="color: #004000;">registerValidator</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Biblio_Session_Validator_Ip<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Zend_Session<span style="color: #339933;">::</span><span style="color: #004000;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>conclusion</h2>
<p>Encore une fois Zend nous montre sa puissance et sa facilité d&#8217;ajout de fonctionnalité. A noter qu&#8217;il existe déjà un validateur pour els session qui contrôle l&#8217;user agent (Zend_Session_Validator_HttpUserAgent()).<br />
N&#8217;hésitez pas a en ajouter!</p>
</div>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F186&amp;linkname=Cr%C3%A9er%20et%20ajouter%20un%20validateur%20de%20session%20dans%20Zend%20Framework" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/186/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ZF : comprendre le fonctionnement des urls</title>
		<link>http://grummfy.be/blog/69#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/69#comments</comments>
		<pubDate>Mon, 13 Aug 2007 18:01:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[MyWsp]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web sémantique]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=69</guid>
		<description><![CDATA[Url de ZF et distribution des rôles aux contrôleurs Avec Zend Framework, de base le système mis en place par le contrôleur est celui-ci&#160;: url module contr&#244;lleur action param&#232;tre http://exemple.test/ default index index http://exemple.test/news default news index http://exemple.test/news/ajouter default news ajouter http://exemple.test/news/modifier/id/5 default news modifier id=5 http://exemple.test/news/modifier/?id=5 default news modifier id=5 Avec des modules perso [...]]]></description>
			<content:encoded><![CDATA[<h2>Url de ZF et distribution des rôles aux contrôleurs</h2>
<p>Avec Zend Framework, de base le système mis en place par le contrôleur est celui-ci&nbsp;:</p>
<table>
<tbody>
<tr>
<td>url</td>
<td>module</td>
<td>contr&#244;lleur</td>
<td>action</td>
<td>param&#232;tre</td>
</tr>
<tr>
<td>http://exemple.test/</td>
<td>default</td>
<td>index</td>
<td>index</td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news</td>
<td>default</td>
<td>news</td>
<td>index</td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news/ajouter</td>
<td>default</td>
<td>news</td>
<td>ajouter</td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news/modifier/id/5</td>
<td>default</td>
<td>news</td>
<td>modifier</td>
<td>id=5</td>
</tr>
<tr>
<td>http://exemple.test/news/modifier/?id=5</td>
<td>default</td>
<td>news</td>
<td>modifier</td>
<td>id=5</td>
</tr>
</tbody>
</table>
<h2>Avec des modules perso</h2>
<p>Maintenant ajoutons la gestion des modules news et livredor:</p>
<pre> $ctrl-&gt;setControllerDirectory(     array(         'news'    =&gt; '/module/news/controllers',         'livredor'    =&gt; '/livredor/ctrl'     ) ); </pre>
<table>
<tbody>
<tr>
<td>url</td>
<td>module</td>
<td>contr&#244;lleur</td>
<td>action</td>
<td>param&#232;tre</td>
</tr>
<tr>
<td>http://exemple.test/</td>
<td>default</td>
<td>index</td>
<td>index</td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news</td>
<td>news</td>
<td>index
      </td>
<td>index</td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news/ajouter</td>
<td>news</td>
<td>ajouter</td>
<td>index
      </td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news/modifier/id/5</td>
<td>news</td>
<td>modifier</td>
<td>id
      </td>
<td></td>
</tr>
<tr>
<td>http://exemple.test/news/modifier/?id=5</td>
<td>news</td>
<td>modifier</td>
<td>index</td>
<td>id=5</td>
</tr>
</tbody>
</table>
<h2>Comprendre le Zend_Controller_Router_Route</h2>
<p>ce que l&#8217;on vient de voir s&#8217;explique par ceci&nbsp;:</p>
<pre> $route = new Zend_Controller_Router_Route(     ':module/:controller/:action/*',     array('module' =&gt; 'default') ); $router-&gt;addRoute('default', $route); </pre>
<p>Ce qui correspond à l&#8217;option par défaut. De plus, ceci nous montre un exemple de paramètre par défaut, en effet à module, on attribue la valeur <q>default</q>.</p>
<p>Allons plus loin et créer nos propres routes!</p>
<h3>Route personnalisée</h3>
<p>imagions un espace membre, on désire afficher chaque profile. On pourrait imaginer quelque chose du genre&nbsp;: <q>http://exemple.test/profil/voir/id/5</q> ou encore <q>http://exemple.test/profil/voir/membre/grummfy</q> afin d&#8217;avoir le contrôleur <q>profil</q> et et l&#8217;action <q>voir</q>. Cependant ce n&#8217;est ni joli, ni pratique. Utilisons donc le Zend_Controller_Router_Route</p>
<pre> $route = new Zend_Controller_Router_Route(     'profiledemembre/:username/*',     array(         'controller' =&gt; 'profil',         'action'     =&gt; 'voir'     ) ); $router-&gt;addRoute('myProfileRoute', $route); </pre>
<p>Ce qu&#8217;on fait pour les url du type <q>http://exemple.test/profiledemembre/grummfy</q>, on assigne les valeurs suivantes&nbsp;:</p>
<pre> * controller = profil  * action = voir  * username = grummfy, ceci via les :  * et on garde la possibilité d'avoir des paramètres avec <q>*</q></pre>
<p>Dans le contrôleur profil, on fera ceci&nbsp;:</p>
<pre> &lt;?php public function voirAction() {     $request = $this-&gt;getRequest();     $username = $request-&gt;getParam('username');     // ou     $username = $this-&gt;_getParam('username'); } </pre>
<h2>Aller plus loin</h2>
<p>Le <a href="http://framework.zend.com/manual/fr/zend.controller.router.html">manuel de Zend</a> vous enseignera comment faire des url avec expression régulière ou encore des rotue static, et bien plus! Mais aussi cette autre page&nbsp;: <a href="http://framework.zend.com/manual/fr/zend.controller.modular.html" title="http://framework.zend.com/manual/fr/zend.controller.modular.html">http://framework.zend.com/manual/fr&#8230;</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;linkname=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/69/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aller plus loin avec Zend Framework</title>
		<link>http://grummfy.be/blog/68#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/68#comments</comments>
		<pubDate>Fri, 10 Aug 2007 22:42:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Présentation]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=68</guid>
		<description><![CDATA[Je vous ai brièvement présenté quelques une des nombreuses possibilités de ZF avec la fabrication d&#8217;un livre d&#8217;or en 6 étapes Vous désirez allez plus loin? Plusieurs voix s&#8217;offre a vous&#160;: Attendre que j&#8217;ai rédigé plein de tuto (je vous plein!) Consulter le manuel de ZF Aller sur le site francophone du framework&#160;: z-f.fr Passez [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous ai brièvement présenté quelques une des nombreuses possibilités de ZF avec la <a href="/blog/index.php?post/2007/08/02/Zend-Framework-ZF-%3A-un-livre-dor-premiere-etapes-%3A-definitions#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">fabrication d&#8217;un livre d&#8217;or en 6 étapes</a></p>
<p>Vous désirez allez plus loin? Plusieurs voix s&#8217;offre a vous&nbsp;:</p>
<ul>
<li>Attendre que j&#8217;ai rédigé plein de tuto (je vous plein!)</li>
<li>Consulter le <a href="http://framework.zend.com/manual/fr">manuel de ZF</a></li>
<li>Aller sur le site francophone du framework&nbsp;: <a href="http://www.z-f.fr/" hreflang="fr">z-f.fr</a></li>
<li>Passez sur le <a href="http://framework.zend.com/wiki" hreflang="en">wiki officiel</a></li>
<li>Ou sur devellopez.com&nbsp;: <a href="http://zend-framework.developpez.com/faq/">FAQ</a>, <a href="http://www.developpez.net/forums/forumdisplay.php?f=447" class="broken_link">forum</a>, <a href="http://zend-framework.developpez.com/cours/">tuto</a></li>
<li>KitPages, und es admin de z-f.fr donnes aussi, régulièrement des tutos sur ZF&nbsp;: <a href="http://www.kitpages.fr/zf_overview.html">voir les tuto</a></li>
</ul>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F68&amp;linkname=Aller%20plus%20loin%20avec%20Zend%20Framework" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/68/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or,  sixième étapes : Conclusions</title>
		<link>http://grummfy.be/blog/65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/65#comments</comments>
		<pubDate>Mon, 06 Aug 2007 02:38:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=65</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Conclusions Avant de faire la conclusion finale, je vais ajouter deux trois trucs au script : Dans la base de donnée ajouter trois champs : ip(varchar de 15), [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Conclusions</h3>
<p>Avant de faire la conclusion finale, je vais ajouter deux trois trucs au script : Dans la base de donnée ajouter trois champs : ip(varchar de 15), email(varchar de 60) et site(varchar de 60) et modifier en conséquence le fichier contrôleur</p>
<p>On pourrait ajouter un système de validation des messages&#8230; et encore d&#8217;autre choses.</p>
<p>On peux ajouter un système de cache (voir archive)</p>
<p>Afin de terminer en plus joli voici une feuille de style à ajouter : <strong>/public/style/site.css</strong></p>
<pre> body,html { 	margin: 0px; 	font-family: Verdana,Arial,Helvetica,sans-serif; 	color: #000000; 	background-color: #ffffff; 	text-align: justify; } h1 { 	font-size: 1.4em; 	color: #800000; } #content { 	margin: 0px auto 0px auto; 	width: 500px; } .livre_block_message { 	border: 1px dotted #aaaaaa; 	margin-bottom: 1.5em; 	padding: 0.5em; } a { 	color: #800000; }</pre>
<p>et pour qu&#8217;elle soit pris en compte on modifie header.phtml :</p>
<pre> ... 	&lt;link rel="stylesheet" type="text/css" media="screen" href="&lt;?php echo $this-&gt;baseUrl;?&gt;/public/style/site.css" /&gt; &lt;/head&gt; ...</pre>
<h3>Conclusion</h3>
<p>Dans ce tutoriel on a :</p>
<ul>
<li>Utiliser Zend_View</li>
<li>Utiliser Zend_View_Helper</li>
<li>Utiliser Zend_Db_Table</li>
<li>Utiliser Zend_Config_Ini</li>
<li>Utiliser Zend_Controller_Front</li>
</ul>
<p>Maintenant essayer de modifier et de bien comprendre tout cela, lisez le manuel de Zend Framework et vous irez rapidement vers de plus grosses application!</p>
<p><a href="/blog/media/tuto/zf_goldbook.tar.bz2#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Télécharger</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/65/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or, cinquième étapes : Modification et suppression des messages</title>
		<link>http://grummfy.be/blog/64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/64#comments</comments>
		<pubDate>Mon, 06 Aug 2007 02:36:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=64</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Modification et suppression des messages Modifions notre contrôleur : &#60;?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class LivreController extends Zend_Controller_Action { public function indexAction() { $livre = new [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Modification et suppression des messages</h3>
<p>Modifions notre contrôleur :</p>
<pre> &lt;?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class LivreController extends Zend_Controller_Action { 	public function indexAction() 	{ 		$livre = new livre(); 		$this-&gt;view-&gt;livres = $livre-&gt;fetchAll(); 	} 	public function ajouterAction() 	{ 		$this-&gt;view-&gt;title .= ' .: Ajout d\'un message'; 		if ($this-&gt;getRequest()-&gt;isPost()) 		{ 			Zend_Loader::loadClass('Zend_Filter_StripTags'); 			$filter = new Zend_Filter_StripTags(); 			$livre = $this-&gt;_getEmptyMsg(); 			$livre-&gt;id = null; 			$livre-&gt;nom = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('nom'))); 			$livre-&gt;message = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('message'))); 			if ($livre-&gt;nom != htmlspecialchars('Pseudo')) 			{ 				$livre_ = new Livre(); 				$livre_-&gt;insertObject($livre); 				$this-&gt;_redirect('/livre'); 				return; 			} 			else 			{ 				$this-&gt;view-&gt;message = 'Merci de donner votre pseudo!'; 			} 		} 		//création d'un message vide 		$this-&gt;view-&gt;livre = $this-&gt;_getEmptyMsg(); 	} 	public function modifierAction() 	{ 		//si on est aps connecter -&gt;redirection sur le logeur 		if (!$_SESSION['connecter']) 			$this-&gt;getResponse()-&gt;setRedirect($this-&gt;view-&gt;baseUrl . '/livre/admin/'); 		$this-&gt;view-&gt;title .= ' .: Modification d\'un message'; 		//récupération du message correspondant au paramètre id 		$livreTable = new Livre(); 		$where  = $livreTable-&gt;getAdapter()-&gt;quoteInto('id = ?', intval($this-&gt;getRequest()-&gt;getParam('id'))); 		$livre = $livreTable-&gt;fetchRow($where); 		if ($this-&gt;getRequest()-&gt;isPost()) 		{ 			Zend_Loader::loadClass('Zend_Filter_StripTags'); 			$filter = new Zend_Filter_StripTags(); 			$livre-&gt;nom = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('nom'))); 			$livre-&gt;message = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('message'))); 			if ($livre-&gt;nom != htmlspecialchars('Pseudo')) 			{ 				$livre_ = new Livre(); 				$livre_-&gt;updateObject($livre, $livre_-&gt;getAdapter()-&gt;quoteInto('id = ?', $livre-&gt;id)); 				$this-&gt;_redirect('/livre/'); 				return; 			} 		} 		$this-&gt;view-&gt;livre = $livre; 		$this-&gt;view-&gt;action .= '/id/' . $livre-&gt;id; 		$this-&gt;render('ajouter'); 	} 	public function adminAction() 	{ 		$this-&gt;view-&gt;title .= ' .: Administration'; 		if ($this-&gt;getRequest()-&gt;isPost() &amp;&amp; !$_SESSION['connecter']) 		{ 			if ($this-&gt;getRequest()-&gt;getPost('login') == 'admin' &amp;&amp; $this-&gt;getRequest()-&gt;getPost('pass') == '1234') 			{ 				//bon password et bon login 				$_SESSION['connecter'] = true; 			} 		} 		elseif (!$_SESSION['connecter']) 		{ 			$this-&gt;render(); 			return; 		} 		$this-&gt;getResponse()-&gt;setRedirect($this-&gt;view-&gt;baseUrl . '/livre/'); 	} 	public function disadminAction() 	{ 		$this-&gt;view-&gt;title .= ' .: Déconnection'; 		if ($_SESSION['connecter']) 		{ 			$_SESSION['connecter'] = false; 		} 		$this-&gt;getResponse()-&gt;setRedirect($this-&gt;view-&gt;baseUrl . '/livre/'); 	} 	public function supprimerAction() 	{ 		//si on est aps connecter -&gt;redirection sur le logeur 		if (!$_SESSION['connecter']) 			$this-&gt;getResponse()-&gt;setRedirect($this-&gt;view-&gt;baseUrl . '/livre/admin/'); 		$this-&gt;view-&gt;title .= ' .: Suppretion d\'un message'; 		$livre = $this-&gt;_getEmptyMsg(); 		$livre-&gt;id = intval($this-&gt;getRequest()-&gt;getParam('id')); 		$this-&gt;view-&gt;action .= '/id/' . $livre-&gt;id; 		if ($this-&gt;getRequest()-&gt;isPost()) 		{ 			$livre_ = new Livre(); 			if ($livre_-&gt;delete($livre_-&gt;getAdapter()-&gt;quoteInto('id = ?', $livre-&gt;id))) 				$this-&gt;view-&gt;message = 'Message supprimé!'; 			else 				$this-&gt;view-&gt;message = 'Message &lt;b&gt;non&lt;/b&gt; supprimé!'; 			$this-&gt;view-&gt;message .= '&lt;br /&gt; Vous aller être rediriger!&lt;br /&gt;'; 			$this-&gt;getResponse()-&gt;setRawHeader('Refresh:3; url=' . $this-&gt;view-&gt;baseUrl . '/livre/'); 		} 	} 	function init() 	{ 		session_name('goldbook'); 		session_start(); 		$_SESSION['connecter'] = isset($_SESSION['connecter'])?$_SESSION['connecter']:false; 		$this-&gt;view-&gt;connecter = $_SESSION['connecter']; 		$this-&gt;view-&gt;title = 'Livre d\'or'; 		//url de base... 		$this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl(); 		$this-&gt;view-&gt;action = $this-&gt;getRequest()-&gt;getActionName(); 		//prêt à travailler sur les livres 		Zend_Loader::loadClass('Livre'); 		//ajout des aides de view 		$this-&gt;view-&gt;addHelperPath('./app/views/helpers', 'MyWsp_View_Helper'); 		$this-&gt;view-&gt;setEscape('utf8_encode'); 	} 	/** 	 * Créer un message vide 	 * 	 * @return Object 	 */ 	protected function _getEmptyMsg() 	{ 		//création d'un message vide 		$livre = new stdClass(); 		$livre	-&gt;id = -99; 		$livre	-&gt;nom = 'Pseudo'; 		$livre	-&gt;message = 'Entrez votre message'; 		$livre	-&gt;date = time(); 		return $livre; 	} }</pre>
<p>Il nous faut créer un système de session, et une authentification pour l&#8217;administration. Ici les choses sont très basiques, car le but n&#8217;y est pas! Donc on utilise els session php et une authentification des plus basique (login: <q>admin</q>, password: <q>1234</q>)!</p>
<p>Il nous faut encore modifier index.phtml</p>
<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; &lt;?php if ($this-&gt;connecter) echo '&lt;a href="' , $this-&gt;baseUrl , '/livre/disadmin"&gt;Se déconnecter&lt;/a&gt;'; ?&gt; 	&lt;div id="livre"&gt; 		&lt;p&gt;&lt;a href="&lt;?php echo $this-&gt;baseUrl; ?&gt;/livre/ajouter"&gt;Ajouter un message&lt;/a&gt;&lt;/p&gt; 		&lt;div id="livre_message"&gt; 		&lt;?php foreach($this-&gt;livres as $livre) : ?&gt; 			&lt;div class="livre_block_message"&gt; 				&lt;span class="livre_pseudo"&gt;&lt;?php 					echo $this-&gt;escape($livre-&gt;nom); 				?&gt;&lt;/span&gt; | 				&lt;span class="livre_date"&gt;Le &lt;?php echo $this-&gt;date('DDDD DD MMMM YYYY', $this-&gt;escape($livre-&gt;date)); ?&gt;&lt;/span&gt; 				&lt;br /&gt; 				&lt;span class="livre_message"&gt;&lt;?php echo nl2br($this-&gt;escape($livre-&gt;message)); ?&gt;&lt;/span&gt; 				&lt;?php 				if ($this-&gt;connecter) 					echo '&lt;br /&gt;&lt;a href="' , $this-&gt;baseUrl , '/livre/modifier/id/' , $livre-&gt;id , '"&gt;Modifier&lt;/a&gt; 					&lt;a href="' , $this-&gt;baseUrl , '/livre/supprimer/id/' , $livre-&gt;id , '"&gt;Supprimer&lt;/a&gt;'; 				?&gt; 			&lt;/div&gt; 		&lt;?php endforeach; ?&gt; 		&lt;/div&gt; 	&lt;/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;</pre>
<p>N&#8217;oublions pas d&#8217;ajouter les fichier admin.phtml et supprimer.phtml</p>
<p><strong>suprimer.html</strong></p>
<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; 	&lt;div id="livre"&gt; 		&lt;strong&gt;&lt;?php echo $this-&gt;message; ?&gt;&lt;/strong&gt; 		&lt;form method="post" action="&lt;?php echo $this-&gt;baseUrl ?&gt;/livre/&lt;?php echo $this-&gt;action ?&gt;" name="form_nom"&gt; 			&lt;div id="livre_haut"&gt; 				&lt;button type="submit" name="del"&gt;Supprimer?&lt;/button&gt; 			&lt;/div&gt; 		&lt;/form&gt; 		&lt;br /&gt; 		&lt;br /&gt; 	&lt;/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;</pre>
<p><strong>admin.phtml</strong></p>
<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; 	&lt;div id="livre"&gt; 		&lt;form method="post" action="&lt;?php echo $this-&gt;baseUrl ?&gt;/livre/admin" name="form_nom"&gt; 			&lt;div id="livre_haut"&gt; 				Login : &lt;input type="text" name="login"&gt; 				&lt;br /&gt; 				Password : &lt;input type="password" name="pass"&gt; 				&lt;br /&gt; 				&lt;button type="submit" name="admin"&gt;Poster&lt;/button&gt; 			&lt;/div&gt; 		&lt;/form&gt; 		&lt;br /&gt; 		&lt;br /&gt; 	&lt;/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;</pre>
<p>Comme on peux le remarquer pas besoin d&#8217;un fichier modifier.phtml car nous réutilisons ajouter.phtml via <q>$this-&gt;render(&#8216;ajouter&#8217;);</q>!</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20cinqui%C3%A8me%20%C3%A9tapes%20%3A%20Modification%20et%20suppression%20des%20messages" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/64/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or, quatrième étapes : Affichages et ajout de messages</title>
		<link>http://grummfy.be/blog/63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/63#comments</comments>
		<pubDate>Mon, 06 Aug 2007 02:03:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=63</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Affichages et ajout de messages Maintenant, il nous faut modifier le contrôleur afin qu&#8217;il affiche le contenu des fichier index.phtml et ajout.phtml. &#60;?php /** Zend_Controller_Action */ [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Affichages et ajout de messages</h3>
<p>Maintenant, il nous faut modifier le contrôleur afin qu&#8217;il affiche le contenu des fichier index.phtml et ajout.phtml.</p>
<pre> &lt;?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class LivreController extends Zend_Controller_Action { 	public function indexAction() 	{ 		$livre = new livre(); 		$this-&gt;view-&gt;livres = $livre-&gt;fetchAll(); 	} 	public function ajouterAction() 	{ 		$this-&gt;view-&gt;title .= ' .: Ajout d\'un message'; 		if ($this-&gt;getRequest()-&gt;isPost()) 		{ 			Zend_Loader::loadClass('Zend_Filter_StripTags'); 			$filter = new Zend_Filter_StripTags(); 			$livre = $this-&gt;_getEmptyMsg(); 			$livre-&gt;id = null; 			$livre-&gt;nom = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('nom'))); 			$livre-&gt;message = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('message'))); 			if ($livre-&gt;nom != htmlspecialchars('Pseudo')) 			{ 				$livre_ = new Livre(); 				$livre_-&gt;insertObject($livre); 				$this-&gt;_redirect('/livre'); 				return; 			} 			else 			{ 				$this-&gt;view-&gt;message = 'Merci de donner votre pseudo!'; 			} 		} 		//création d'un message vide 		$this-&gt;view-&gt;livre = $this-&gt;_getEmptyMsg(); 	} 	function init() 	{ 		$this-&gt;view-&gt;title = 'Livre d\'or'; 		//url de base... 		$this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl(); 		$this-&gt;view-&gt;action = $this-&gt;getRequest()-&gt;getActionName(); 		//prêt à travailler sur les livres 		Zend_Loader::loadClass('Livre'); 		//ajout des aides de view 		$this-&gt;view-&gt;addHelperPath('./app/views/helpers', 'MyWsp_View_Helper'); 		$this-&gt;view-&gt;setEscape('utf8_encode'); 	} 	/** 	 * Créer un message vide 	 * 	 * @return Object 	 */ 	protected function _getEmptyMsg() 	{ 		//création d'un message vide 		$livre = new stdClass(); 		$livre	-&gt;id = -99; 		$livre	-&gt;nom = 'Pseudo'; 		$livre	-&gt;message = 'Entrez votre message'; 		$livre	-&gt;date = time(); 		return $livre; 	} }</pre>
<p>Passons en revue chaque méthode</p>
<h2>init()</h2>
<p>Cette permet l&#8217;initialisation des différent paramètre, elle est appelé dans le constructeur parent de la class. On en profite pour définir un titre de page (<q>$this-view-&gt;title</q>) et divers autres paramètres. On défini aussi un répertoire supplémentaire pour les helper de view (<q>$this-&gt;view-&gt;addHelperPath(&#8216;./app/views/helpers&#8217;, &#8216;MyWsp_View_Helper&#8217;);</q>).</p>
<h2>ajouterAction()</h2>
<p>Appeler lorsque on est à l&#8217;url /livre/ajouter, tout comme les autres méthode du type actionnNameAction() la partie actionName est prise depuis l&#8217;url! On récupère les différent paramètre si on a effectué un post ou on affiche simplement le contenu de ajouter.phtml (ceci se faisant automatiquement).</p>
<h2>indexAction()</h2>
<p>On récupère les informations dans la base de données, et on stocke les données dans le viewer.</p>
<p>Ajoutons quelques fichiers afin de rendre le tout plus intéressant et avoir un vrai jeu de templates/gabarit! <strong>header.phtml</strong></p>
<pre> &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-be" lang="fr-be"&gt; &lt;head&gt; 	&lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8" /&gt; 	&lt;title&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="content"&gt; &lt;h1&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/h1&gt;</pre>
<p>le haut de la page html</p>
<p><strong>footer.phtml</strong></p>
<pre> 	&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre>
<p>le bas de la page html</p>
<p><strong>index.phtml</strong></p>
<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; 	&lt;div id="livre"&gt; 		&lt;p&gt;&lt;a href="&lt;?php echo $this-&gt;baseUrl; ?&gt;/livre/ajouter"&gt;Ajouter un message&lt;/a&gt;&lt;/p&gt; 		&lt;div id="livre_message"&gt; 		&lt;?php foreach($this-&gt;livres as $livre) : ?&gt; 			&lt;div class="livre_block_message"&gt; 				&lt;span class="livre_pseudo"&gt;&lt;?php echo $this-&gt;escape($livre-&gt;nom); ?&gt;&lt;/span&gt; | 				&lt;span class="livre_date"&gt;Le &lt;?php echo $this-&gt;date('DDDD DD MMMM YYYY', $this-&gt;escape($livre-&gt;date)); ?&gt;&lt;/span&gt; 				&lt;br /&gt; 				&lt;span class="livre_message"&gt;&lt;?php echo nl2br($this-&gt;escape($livre-&gt;message)); ?&gt;&lt;/span&gt; 				&lt;?php 				if ($this-&gt;connecter) 					echo '&lt;br /&gt;&lt;a href="' , $this-&gt;baseUrl , '/livre/modifier/id/' , $livre-&gt;id , '"&gt;Modifier&lt;/a&gt; 					&lt;a href="' , $this-&gt;baseUrl , '/livre/supprimer/id/' , $livre-&gt;id , '"&gt;Supprimer&lt;/a&gt;'; 				?&gt; 			&lt;/div&gt; 		&lt;?php endforeach; ?&gt; 		&lt;/div&gt; 	&lt;/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;</pre>
<p>La liste des messages du forum, on oublie pas d&#8217;inclure le haut et le bas de page (via <q>$this-&gt;render();</q>)</p>
<p>On voix ici l&#8217;utilisation du helper Date afin d&#8217;afficher la date au format choisi.</p>
<p><strong>ajouter.phtml</strong></p>
<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; 	&lt;div id="livre"&gt; 	&lt;strong&gt;&lt;?php echo $this-&gt;message; ?&gt;&lt;/strong&gt; 	&lt;?php echo $this-&gt;render('livre/_form.phtml'); ?&gt; 	&lt;/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;</pre>
<p>La page d&#8217;ajout des messages.</p>
<p><strong>_form.phtml</strong></p>
<pre> &lt;form method="post" action="&lt;?php echo $this-&gt;baseUrl ?&gt;/livre/&lt;?php echo $this-&gt;action; ?&gt;" name="form_nom"&gt; 	&lt;div id="livre_haut"&gt; 		&lt;input type="text" name="nom" value="&lt;?php echo $this-&gt;escape(trim($this-&gt;livre-&gt;nom)); ?&gt;"&gt; 		&amp;nbsp;&amp;bull;&amp;nbsp; 		&lt;input type="text" name="site" value="&lt;?php echo $this-&gt;escape($this-&gt;livre-&gt;site);?&gt;"&gt; 		&lt;br /&gt; 		&lt;textarea name="message" cols="50" rows="5"&gt;&lt;?php echo $this-&gt;escape($this-&gt;livre-&gt;message); ?&gt;&lt;/textarea&gt; 		&lt;br /&gt; 		&lt;button type="submit" name="add"&gt;Poster&lt;/button&gt; 	&lt;/div&gt; &lt;/form&gt; &lt;br /&gt; &lt;br /&gt;</pre>
<p>Le formulaire d&#8217;ajout et de modification (noté le <q>_</q> devant le nom permettant d&#8217;avoir un <q>template/gabarit privé</q>.</p>
<p>En principe vous êtes maitenant capable d&#8217;ajouter des messages et de les afficher!</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20quatri%C3%A8me%20%C3%A9tapes%20%3A%20Affichages%20et%20ajout%20de%20messages" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/63/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : Geshi comme filtre dans ZF</title>
		<link>http://grummfy.be/blog/62#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/62#comments</comments>
		<pubDate>Sat, 04 Aug 2007 00:27:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=62</guid>
		<description><![CDATA[Grâce à la libraire Geshi (http://qbnz.com/highlighter/) et à l&#8217;ingéniosité de ZF, colorer tout vos code, facilement, via ce nouveau filtre. Pour l&#8217;utiliser, Télécharger la libraire geshi et décompresser là (dans l&#8217;exemple dans ./../site/lib/geshi/, donc le fichier geshi.php se trouve dans se répertoire et ./../site/lib/geshi/geshi/ contient les fichiers de langues) &#60;?php Zend_Loader::loadClass&#40;'Zend_Filter_Geshi'&#41;; $zfg = new Zend_Filter_Geshi&#40;'php', [...]]]></description>
			<content:encoded><![CDATA[<p>Grâce à la libraire Geshi (<a href="http://qbnz.com/highlighter/" title="http://qbnz.com/highlighter/">http://qbnz.com/highlighter/</a>) et à l&#8217;ingéniosité de ZF, colorer tout vos code, facilement, via ce nouveau filtre.</p>
<p>Pour l&#8217;utiliser, Télécharger la libraire geshi et décompresser là (dans l&#8217;exemple dans ./../site/lib/geshi/, donc le fichier geshi.php se trouve dans se répertoire et ./../site/lib/geshi/geshi/ contient les fichiers de langues)</p>
<pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span> Zend_Loader::<span style="color: #006600;">loadClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Zend_Filter_Geshi'</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #0000ff;">$zfg</span> = <span style="color: #000000; font-weight: bold;">new</span> Zend_Filter_Geshi<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'php'</span>, <span style="color: #ff0000;">'../site/lib/geshi/'</span><span style="color: #66cc66;">&#41;</span>; <a href="http://www.php.net/echo"><span style="color: #000066;">echo</span></a> <span style="color: #0000ff;">$zfg</span>-&gt;<span style="color: #006600;">filter</span><span style="color: #66cc66;">&#40;</span>&lt;&lt;&lt;ABC <span style="color: #000000; font-weight: bold;">&lt;?php</span> Zend_Loader::<span style="color: #006600;">loadClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Zend_Filter_Geshi'</span><span style="color: #66cc66;">&#41;</span>; \<span style="color: #0000ff;">$zfg</span> = <span style="color: #000000; font-weight: bold;">new</span> Zend_Filter_Geshi<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'php'</span>, <span style="color: #ff0000;">'../site/lib/geshi/'</span><span style="color: #66cc66;">&#41;</span>; ABC <span style="color: #66cc66;">&#41;</span>;</pre>
<p>Autre endroit ou trouver ce code&nbsp;: <a href="http://www.z-f.fr/code/detail/17" title="http://www.z-f.fr/code/detail/17">http://www.z-f.fr/code/detail/17</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F62&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20Geshi%20comme%20filtre%20dans%20ZF" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/62/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or, troisième étapes : Bases des fichiers</title>
		<link>http://grummfy.be/blog/60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/60#comments</comments>
		<pubDate>Fri, 03 Aug 2007 00:30:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=60</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Bases des fichiers Avant tout, il nous faut créer les différents fichier .htaccess RewriteEngine on #RewriteBase /serveur/mon_repertoire/ RewriteRule .* index.php php_flag magic_quotes_gpc off php_flag register_globals off [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Bases des fichiers</h3>
<p>Avant tout, il nous faut créer les différents fichier <strong>.htaccess</strong></p>
<pre> RewriteEngine on #RewriteBase /serveur/mon_repertoire/ RewriteRule .* index.php php_flag magic_quotes_gpc off php_flag register_globals off</pre>
<p>La ligne en commentaire, permet dans le cas d&#8217;une erreur de ce type : <q>Fatal error: Uncaught exception &#8216;Zend_Controller_Dispatcher_Exception&#8217; with message &#8216;Invalid controller specified (serveur)&#8217; in</q> de corriger le problème, pour un accès, par exemple, via : http://localhost/serveur/mon_repertoire/</p>
<p><strong>LivreControllers.php</strong></p>
<pre> &lt;?php /** Zend_Controller_Action */ require_once 'Zend/Controller/Action.php'; class LivreController extends Zend_Controller_Action { 	public function indexAction() 	{ 		echo 'Index du livre d\'or'; 		return; 	} 	public function ajouterAction() 	{ 		$this-&gt;view-&gt;title .= ' .: Ajout d\'un message'; 		echo 'ajout d\'un message!'; 		return; 	} }</pre>
<p>Le controlleur, c&#8217;est ce qui va diriger notre application</p>
<p><strong>index.php</strong></p>
<pre> &lt;?php error_reporting(E_ALL|E_STRICT); date_default_timezone_set('Europe/Brussels'); set_include_path('.' . PATH_SEPARATOR . '../site/lib' . PATH_SEPARATOR . './app/models/'  . PATH_SEPARATOR . get_include_path()); include 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Config_Ini'); Zend_Loader::loadClass('Zend_Registry'); Zend_Loader::loadClass('Zend_Db'); // load configuration $config = new Zend_Config_Ini('./app/config.ini', 'general'); $registry = Zend_Registry::getInstance(); $registry-&gt;set('config', $config); // setup database $db = Zend_Db::factory($config-&gt;db-&gt;adapter,  $config-&gt;db-&gt;config-&gt;toArray()); Zend_Db_Table::setDefaultAdapter($db); // Régler le dossier des contrôleurs par défaut : $frontController = Zend_Controller_Front::getInstance(); $frontController-&gt;throwExceptions(true); $frontController-&gt;setControllerDirectory('./app/controllers'); // run! $frontController-&gt;dispatch();</pre>
<p><strong>Livre.php</strong></p>
<pre> &lt;?php Zend_Loader::loadClass('Zend_Db_Table'); class Livre extends Zend_Db_Table {     protected $_name = 'livre';     protected $_primary = 'id'; 	public function insertObject($object) 	{ 		return parent::insert((array) $object); 	} 	public function updateObject($object, $where) 	{ 		return $this-&gt;update((array) $object, $where); 	} }</pre>
<p>Le modèle du livre, c&#8217;est-à-dire les données -&gt; ici la base des données.</p>
<p><strong>Date.php</strong></p>
<pre> &lt;?php class MyWsp_View_Helper_Date { 	/** 	 * Retourne une date sous forme d'une chaîne, au format donné par le 	 * paramètre format, fournie par le paramètre timestamp ou la date et 	 * l'heure courantes si aucun timestamp n'est fourni. En d'autres termes, 	 * le paramètre timestamp est optionnel et vaut par défaut la valeur de la 	 * fonction time(). 	 * Plus d'info sur http://www.php.net/manual/fr/function.date.php 	 * 	 * @param string $format format de la date 	 * @param int $timestampdate à formaté 	 * 	 * @return string 	 */ 	public function date($format, $timestamp = null) 	{ 		if (!is_nan($timestamp)) 			$timestamp = time(); 		// see http://www.php.net/manual/fr/function.strftime.php 		$dates = array( 			'DDDD'	=&gt; '%A', 			'DDD'	=&gt; '%a', 			'DD'	=&gt; '%d', 			'D'		=&gt; '%e', 			'MMMM'	=&gt; '%B', 			'MMM'	=&gt; '%b', 			'MM'	=&gt; '%m', 			'YYYY'	=&gt; '%Y', 			'YY'	=&gt; '%y', 			'HH'	=&gt; '%H', 			'hh'	=&gt; '%I', 			'mm'	=&gt; '%M', 			'ss'	=&gt; '%S', 		); 		return strftime(str_replace(array_keys($dates), array_values($dates), $format), $timestamp); 	} }</pre>
<p><strong>config.ini</strong></p>
<pre> [general] db.adapter = PDO_MYSQL db.config.host = localhost db.config.username = root db.config.password = db.config.dbname = livredor</pre>
<p>Contient la configuration pour accéder à la base de donnée du livre d&#8217;or.</p>
<h4>Test</h4>
<p>Rendez-vous à l&#8217;adresse de votre script :</p>
<ul>
<li>Lire les messages : http://localhost/serveur/mon_repertoire/livre/</li>
<li>Ajouter un message : http://localhost/serveur/mon_repertoire/livre/ajouter/</li>
</ul>
<p>Si tout est ok, passons à la suite!</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20troisi%C3%A8me%20%C3%A9tapes%20%3A%20Bases%20des%20fichiers" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/60/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or, deuxième étapes : Créations des tables sql et répertoires</title>
		<link>http://grummfy.be/blog/59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/59#comments</comments>
		<pubDate>Thu, 02 Aug 2007 03:02:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=59</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Créations des tables sql Créer une nouvelle base de donnée dans votre serveur mysql. Ensuite exécuter la requête suivante : CREATE TABLE `livre` ( `id` int(10) unsigned [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Créations des tables sql</h3>
<p>Créer une nouvelle base de donnée dans votre serveur mysql. Ensuite exécuter la requête suivante :</p>
<p>CREATE TABLE `livre` (</p>
<pre> `id` int(10) unsigned NOT NULL auto_increment,  `date` int(10) unsigned NOT NULL,  `message` text character set utf8 collate utf8_unicode_ci NOT NULL,  `nom` varchar(60) character set utf8 collate utf8_unicode_ci NOT NULL,  PRIMARY KEY  (`id`),  KEY `inde` (`date`)</pre>
<p>);</p>
<p>La structure de la table correspond donc a ceci :</p>
<table>
<thead>
<tr>
<th>Champ</th>
<th>Type</th>
<th>Défaut</th>
<th>Extra</th>
</tr>
</thead>
<tbody>
<tr>
<th>id</th>
<td>int(10)</td>
<td></td>
<td>auto_increment</td>
</tr>
<tr>
<th>date</th>
<td>int(10)</td>
<td></td>
<td></td>
</tr>
<tr>
<th>message</th>
<td>text</td>
<td></td>
<td></td>
</tr>
<tr>
<th>nom</th>
<td>varchar(60)</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>Très simple et rien de compliquer jusque là, enfin normalement.</p>
<h3>Structure du script</h3>
<p>Les répertoires d&#8217;abords :</p>
<pre> /site     /lib         /Zend --&gt; ici le zend framework /test     /app         /controllers         /models         /views             /scripts                 /livre</pre>
<p>Et avec les fichiers :</p>
<pre> /app     /controllers         LivreControllers.php     /models        Livre.php     /views         /helpers         /scripts             header.phtml             footer.phtml             /livre                 livre.phtml                 ajouter.phtml     config.ini index.php .htaccess</pre>
<h5>Pourquoi une tel disposition?</h5>
<p>En fait, ZF va chercher de manière automatique grâce, notamment, au ViewHelper où se trouve les différent fichiers et les charger automatiquement! Zf utilisé le système <a href="http://fr.wikipedia.org/wiki/MVC">MVC</a>, c&#8217;est-à-dire modèle-vue-contrôleur!</p>
<ul>
<li>Contrôleur : Lien entre la vue et le modèle, réagit au requête de l&#8217;utilisateurs, etc</li>
<li>Vue : ce que voix l&#8217;utilisateur, souvent le système de templates, donc c&#8217;est la présentation des données!</li>
<li>Modèle : accès aux données, en gros accès à la base des données, au fichiers, etc</li>
</ul>
<p>Cependant divers dossiers peuvent se trouver à d&#8217;autres emplacement, mais ici on fait dans le simple!</p>
<p>Pensez à utiliser <a href="/blog/index.php?post/2007/08/01/Creation-de-repertoire-automatique-en-php-via-une-structure-txt#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">mon script</a> pour avoir plus facile &#8230;</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20deuxi%C3%A8me%20%C3%A9tapes%20%3A%20Cr%C3%A9ations%20des%20tables%20sql%20et%20r%C3%A9pertoires" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/59/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework (ZF) : un livre d&#8217;or, première étapes : définition</title>
		<link>http://grummfy.be/blog/58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/58#comments</comments>
		<pubDate>Thu, 02 Aug 2007 02:52:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[jouons]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=58</guid>
		<description><![CDATA[Créations d&#8217;un livre d&#8217;or en 6 étapes Définition Créations des tables sql et des répertoires Bases des fichiers Affichages et ajout de messages Modification et suppression des messages Conclusions Définition des besoins Pour faire un livre d&#8217;or très basique : Ajout de message Affichage de messages Modération : modification et suppression des messages Par après on peux [...]]]></description>
			<content:encoded><![CDATA[<h2>Créations d&#8217;un livre d&#8217;or en 6 étapes</h2>
<ol>
<li><a href="?p=58#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Définition</a></li>
<li><a href="?p=59#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Créations des tables sql et des répertoires</a></li>
<li><a href="?p=60#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Bases des fichiers</a></li>
<li><a href="?p=63#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Affichages et ajout de messages</a></li>
<li><a href="?p=64#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Modification et suppression des messages</a></li>
<li><a href="?p=65#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">Conclusions</a></li>
</ol>
<h3>Définition des besoins</h3>
<p>Pour faire un livre d&#8217;or très basique :</p>
<ul>
<li>Ajout de message</li>
<li>Affichage de messages</li>
<li>Modération : modification et suppression des messages</li>
</ul>
<p>Par après on peux ajouter différents éléments :</p>
<ul>
<li>Smileys</li>
<li>Site-web et email des auteurs</li>
<li>Et des trucs plus fun : cache, css, &#8230;</li>
</ul>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;linkname=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20premi%C3%A8re%20%C3%A9tapes%20%3A%20d%C3%A9finition" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/58/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework, simple?</title>
		<link>http://grummfy.be/blog/56#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/56#comments</comments>
		<pubDate>Wed, 01 Aug 2007 15:17:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[My comment]]></category>
		<category><![CDATA[découverte]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=56</guid>
		<description><![CDATA[Cela fait longtemps que je zyeut Zend Framework, sans pour autant plonger, aujourd&#8217;hui j&#8217;ai gouter, apprécier, dévorer, bref l&#8217;applaudit. En gros, c&#8217;est le framework comme je le voix ou presque! Simple, claire, extensible, gestion d&#8217;exception, sans des dépendance inutiles, passant par pdo, &#8230; I like D&#8217;ailleurs je pense que MyWsp se basera dessus, je delete [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait longtemps que je zyeut Zend Framework, sans pour autant plonger, aujourd&#8217;hui j&#8217;ai gouter, apprécier, dévorer, bref l&#8217;applaudit.</p>
<p>En gros, c&#8217;est le framework comme je le voix ou presque!</p>
<p>Simple, claire, extensible, gestion d&#8217;exception, sans des dépendance inutiles, passant par pdo, &#8230;</p>
<p>I like</p>
<p>D&#8217;ailleurs je pense que MyWsp se basera dessus, je delete les 3/4 de ce que j&#8217;ai fait et hop je repart, simplement parceque c&#8217;est vraiment pratique et rapide!</p>
<p>Bientôt, je sortirait certainement quelques tuto sur Zend Framework!</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Delicious" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Technorati Favorites" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/technorati.png" width="16" height="16" alt="Technorati Favorites"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Twitter" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Facebook" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F56&amp;linkname=Zend%20Framework%2C%20simple%3F" title="Netvibes Share" rel="nofollow" target="_blank"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/icons/netvibes.png" width="16" height="16" alt="Netvibes Share"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/56/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 5.336 seconds -->
