<?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; tutoriel</title>
	<atom:link href="http://grummfy.be/blog/key/tutoriel/feed" rel="self" type="application/rss+xml" />
	<link>http://grummfy.be/blog</link>
	<description>Mes projets, mes rêves, mes envies, ...</description>
	<lastBuildDate>Mon, 02 Jan 2012 00:03:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>EEEPC en attente</title>
		<link>http://grummfy.be/blog/112#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/112#comments</comments>
		<pubDate>Tue, 30 Dec 2008 01:05:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[EEEPc]]></category>
		<category><![CDATA[GNU|Linux]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=112</guid>
		<description><![CDATA[Comme j&#8217;en avais parler ici, ça y est, j&#8217;ai commandé et il est arrivé mon eeepc. Efin je en l&#8217;ai aps encore entre les mains, snif, snif, &#8230; mais cela c&#8217;est une autre histoire! Bref, le problème est que j&#8217;ai commandé la version MS windows car pour le 1000 la version GNU/Llinux n&#8217;était pas disponible [...]]]></description>
			<content:encoded><![CDATA[<p>Comme j&#8217;en avais parler <a href="index.php?post/2008/09/06/Enfin-un-portable-pour-Grummfy#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed">ici</a>, ça y est, j&#8217;ai commandé et il est arrivé mon eeepc. Efin je en l&#8217;ai aps encore entre les mains, snif, snif, &#8230; mais cela c&#8217;est une autre histoire!</p>
<p>Bref, le problème est que j&#8217;ai commandé la version MS windows car pour le 1000 la version GNU/Llinux n&#8217;était pas disponible partout ou j&#8217;ai regardé. Du coup la question se pose&nbsp;:</p>
<ul>
<li>Xandros, depuis un cd de restauration trouver sur le net?</li>
<li>Ubuntu-EEE qui changera bientôt de nom</li>
<li>Xubuntu-eee</li>
<li>Mandriva</li>
<li>&#8230;</li>
</ul>
<p>De nombreuse distribution linux propose des déclinaisons EEEpc.</p>
<h2>Système de base Xandros via une clef USB</h2>
<p>La première chose c&#8217;est de tester le système de base. En cherchant sur le net on se rends compte que trouver un ISO de cette distribution est assez difficile, pas grave au moins 2 personnes l&#8217;on mis en téléchargement (sans compter les torrents)&nbsp;:</p>
<p><a href="http://www.tododo.com/eee/eeePC_french_support_DVD_1.0.iso">tododo.com</a> ou <a href="http://www.fabcool.net/eee/eeePC_french_support_DVD_1.0.iso">fabcool</a></p>
<p>Une fois récupéré, sous linux&nbsp;:</p>
<ul>
<li>Monter l&#8217;image iso&nbsp;: mount -o loop -t iso9660 /chemin/fichier.iso /chemin/de/montage</li>
<li>Si vous n&#8217;avez pas de lecteur externe vous aurez besoin d&#8217;une clef usb ou d&#8217;une carte mémoire ou de totu support qui peux être relier au eeepc et qui peux être booter, pour la suite on suppose que vous utilisez une clef USB.</li>
<li>Brancher votre clef USB, Démonté la, si elle est montée. sudo umount /dev/sdz (si votre clef usb est le pérphérique /dev/sdz)</li>
<li>Faites dd if=/chemin/montage/iso/dvd/restauration/eepc/xandros/Software/BootTool/BootTool/usb.img of=/dev/sdz (/!\pas /dev/sdz1 ou autre mais bien le périphérique en entier!!!)</li>
<li>Dépluguer et repluger la clef, Monter la si nécéssaire.</li>
<li>Copier les fichiers suivant (toujours du DVD de restauration)&nbsp;: cp -v P701L.gz 2008.01.02_17.24.bld blockcount.dat ver.tag user_start.dat /chemin/montage/clef/usb</li>
<li>Démonter et installer.</li>
<li>Tester</li>
</ul>
<p>Personnellement, c&#8217;est ce que je ferait (la clef est déjà prête) dès que j&#8217;aurais mon EEEPc. Mais je doute de laisser cela en place.</p>
<p>Edit&nbsp;: Il se fait que les distribution que l&#8217;on trouve sont uniquement des distributions pour les versions 700 et non 900 ou 1000. Et de fait, lorsque l&#8217;ont est cela ne fonctionne pas!</p>
<h2>Ubuntu et dérivé</h2>
<h3>Ubuntu-eee</h3>
<p>Tout est expliquer depuis leur site web et je ne voix pas l&#8217;intérêt de le réexpliquer. <a href="http://www.ubuntu-eee.com/wiki/index.php5?title=Get_Ubuntu_Eee" class="broken_link">Plus d&#8217;info?</a></p>
<h3>EEEXubuntu</h3>
<p>Comme l&#8217;autre tout est expliquer sur le site. <a href="http://wiki.eeeuser.com/ubuntu:eeexubuntu:home">Plus d&#8217;info?</a></p>
<h3>Bof&#8230;</h3>
<p>Une remarque, cependant, ubuntu-eee et eeexubuntu sont pour moi nettement moins fiable qu&#8217;une installation d&#8217;un ubuntu correctement paramétré. En effet, ces 2 distributions ont du retards par rapport au version officiel et, toujours pour moi, sont suffisamment proche d&#8217;une version officiel que pour pouvoir être customiser soit même. Mais je compte néanmoins les tester.</p>
<p>Au final je pense que je prendrait, par habitude, un Ubuntu ou peut-être un XUbuntu que je modifierait moi-même. Le tout avec <a href="http://slim.berlios.de/">SLIM</a> comme gestionnaire de connexion.</p>
<h2>Autre?</h2>
<p>Je ne pense pas tester d&#8217;autre système dans l&#8217;immédiat.</p>
<p>Dès que j&#8217;aurais tester tout cela je ferait certainement un billet.</p>
<p>Au passage bonne fête de fin d&#8217;année!!!!!!!!!!</p>
<h2>Quelques liens</h2>
<ul>
<li><a href="http://wiki.eeeuser.com/" title="http://wiki.eeeuser.com/">http://wiki.eeeuser.com/</a></li>
<li><a href="http://doc.ubuntu-fr.org/installation/depuis_une_cle_usb">Installation de ubuntu depuis une clef USB</a></li>
<li><a href="http://doc.ubuntu-fr.org/installation_sur_disque_usb">Même chose que précédent?</a></li>
<li><a href="http://doc.ubuntu-fr.org/asus_eee_pc_901" title="http://doc.ubuntu-fr.org/asus_eee_pc_901">http://doc.ubuntu-fr.org/asus_eee_p&#8230;</a></li>
</ul>
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 class="a2a_button_netvibes_share" href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;linkname=EEEPC%20en%20attente" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F112&amp;title=EEEPC%20en%20attente" id="wpa2a_2"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Commencer à apprendre le html, php, et les css</title>
		<link>http://grummfy.be/blog/83#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://grummfy.be/blog/83#comments</comments>
		<pubDate>Mon, 03 Sep 2007 01:18:00 +0000</pubDate>
		<dc:creator>Grummfy</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[trucs et astuces]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://grummfy.be/blog/?p=83</guid>
		<description><![CDATA[Dans énormément de forum que je visite, je voix des messages du genre où apprendre le css, html, php, &#8230;, je veux des cours de &#8230;, etc Dans ce cas je recommande ces sites Tout confondu&#160;: Pour les très grand débutant (mais pour les autres aussi)&#160;: le site du zero Pour les autres, où ceux [...]]]></description>
			<content:encoded><![CDATA[<p>Dans énormément de forum que je visite, je voix des messages du genre où apprendre le css, html, php, &#8230;, je veux des cours de &#8230;, etc</p>
<h3>Dans ce cas je recommande ces sites</h3>
<ul>
<li>Tout confondu&nbsp;:
<ul>
<li>Pour les très grand débutant (mais pour les autres aussi)&nbsp;: le <a href="http://www.siteduzero.com/" hreflang="fr">site du zero</a></li>
<li>Pour les autres, où ceux qui désire aller plus loin&nbsp;: <a href="http://www.developpez.com/" hreflang="fr">Developpez</a></li>
</ul>
</li>
<li>PHP&nbsp;:
<ul>
<li><a href="http://www.phpdebutant.org/">Php débutant</a></li>
<li><a href="http://www.phpfrance.com/">PHPfrance</a></li>
</ul>
</li>
</ul>
<h3>Pour aller plus loin</h3>
<p>En plus des autres sites&nbsp;:</p>
<ul>
<li><a href="http://www.phpcodeur.net/">phpcodeur</a></li>
<li><a href="http://www.phpteam.net/">PHPteam</a></li>
</ul>
<h3>Où trouver de l&#8217;aide?</h3>
<p>Sur la plupart des site cité il y a un forum, n&#8217;hésitez pas à vous y inscrire!</p>
<h3>Manuel</h3>
<p>Cependant, lorsque vous aurez un peu compris la logique interne de chaque chose, un petit tour dans els différent manuel de référence (souvent avec des exemple) sera une grande aide&nbsp;:</p>
<ul>
<li><a href="http://fr.selfhtml.org">HTML, css, js, xml, &#8230;</a></li>
<li><a href="http://www.w3.com">W3C</a> les recommandations officiel du html, css et xhtml ainsi que xml.</li>
<li><a href="http://www.php.net/">PHP</a></li>
</ul>
<p><a class="a2a_button_delicious" href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 class="a2a_button_technorati_favorites" href="http://www.addtoany.com/add_to/technorati_favorites?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 class="a2a_button_twitter" href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 class="a2a_button_facebook" href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 class="a2a_button_google_bookmarks" href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 class="a2a_button_netvibes_share" href="http://www.addtoany.com/add_to/netvibes_share?linkurl=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;linkname=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F83&amp;title=Commencer%20%C3%A0%20apprendre%20le%20html%2C%20php%2C%20et%20les%20css" id="wpa2a_4"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZF : comprendre le fonctionnement des urls</title>
		<link>http://grummfy.be/blog/69#utm_source=feed&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F69&amp;title=ZF%20%3A%20comprendre%20le%20fonctionnement%20des%20urls" id="wpa2a_6"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/69/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&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F65&amp;title=Zend%20Framework%20%28ZF%29%20%3A%20un%20livre%20d%26%238217%3Bor%2C%20%20sixi%C3%A8me%20%C3%A9tapes%20%3A%20Conclusions" id="wpa2a_8"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></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&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F64&amp;title=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" id="wpa2a_10"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></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&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F63&amp;title=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" id="wpa2a_12"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></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) : un livre d&#8217;or, troisième étapes : Bases des fichiers</title>
		<link>http://grummfy.be/blog/60#utm_source=feed&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F60&amp;title=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" id="wpa2a_14"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></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&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F59&amp;title=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" id="wpa2a_16"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></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&#038;utm_medium=feed&#038;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 class="a2a_button_delicious" 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 class="a2a_button_technorati_favorites" 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 class="a2a_button_twitter" 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 class="a2a_button_facebook" 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 class="a2a_button_google_bookmarks" 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 class="a2a_button_netvibes_share" 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 a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgrummfy.be%2Fblog%2F58&amp;title=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" id="wpa2a_18"><img src="http://grummfy.be/blog/wp/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://grummfy.be/blog/58/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

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

