{"id":63,"date":"2007-08-06T02:03:00","date_gmt":"2007-08-06T02:03:00","guid":{"rendered":"http:\/\/grummfy.be\/blog\/?p=63"},"modified":"2009-12-31T03:16:37","modified_gmt":"2009-12-31T01:16:37","slug":"zend-framework-zf-un-livre-dor-quatrieme-etapes-affichages-et-ajout-de-messages","status":"publish","type":"post","link":"https:\/\/grummfy.be\/blog\/63","title":{"rendered":"Zend Framework (ZF) : un livre d&rsquo;or, quatri\u00e8me \u00e9tapes : Affichages et ajout de messages"},"content":{"rendered":"<h2>Cr\u00e9ations d&rsquo;un livre d&rsquo;or en 6 \u00e9tapes<\/h2>\n<ol>\n<li><a href=\"?p=58\">D\u00e9finition<\/a><\/li>\n<li><a href=\"?p=59\">Cr\u00e9ations des tables sql et des r\u00e9pertoires<\/a><\/li>\n<li><a href=\"?p=60\">Bases des fichiers<\/a><\/li>\n<li><a href=\"?p=63\">Affichages et ajout de messages<\/a><\/li>\n<li><a href=\"?p=64\">Modification et suppression des messages<\/a><\/li>\n<li><a href=\"?p=65\">Conclusions<\/a><\/li>\n<\/ol>\n<h3>Affichages et ajout de messages<\/h3>\n<p>Maintenant, il nous faut modifier le contr\u00f4leur afin qu&rsquo;il affiche le contenu des fichier index.phtml et ajout.phtml.<\/p>\n<pre> &lt;?php \/** Zend_Controller_Action *\/ require_once 'Zend\/Controller\/Action.php'; class LivreController extends Zend_Controller_Action { \tpublic function indexAction() \t{ \t\t$livre = new livre(); \t\t$this-&gt;view-&gt;livres = $livre-&gt;fetchAll(); \t} \tpublic function ajouterAction() \t{ \t\t$this-&gt;view-&gt;title .= ' .: Ajout d\\'un message'; \t\tif ($this-&gt;getRequest()-&gt;isPost()) \t\t{ \t\t\tZend_Loader::loadClass('Zend_Filter_StripTags'); \t\t\t$filter = new Zend_Filter_StripTags(); \t\t\t$livre = $this-&gt;_getEmptyMsg(); \t\t\t$livre-&gt;id = null; \t\t\t$livre-&gt;nom = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('nom'))); \t\t\t$livre-&gt;message = trim($filter-&gt;filter($this-&gt;getRequest()-&gt;getPost('message'))); \t\t\tif ($livre-&gt;nom != htmlspecialchars('Pseudo')) \t\t\t{ \t\t\t\t$livre_ = new Livre(); \t\t\t\t$livre_-&gt;insertObject($livre); \t\t\t\t$this-&gt;_redirect('\/livre'); \t\t\t\treturn; \t\t\t} \t\t\telse \t\t\t{ \t\t\t\t$this-&gt;view-&gt;message = 'Merci de donner votre pseudo!'; \t\t\t} \t\t} \t\t\/\/cr\u00e9ation d'un message vide \t\t$this-&gt;view-&gt;livre = $this-&gt;_getEmptyMsg(); \t} \tfunction init() \t{ \t\t$this-&gt;view-&gt;title = 'Livre d\\'or'; \t\t\/\/url de base... \t\t$this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl(); \t\t$this-&gt;view-&gt;action = $this-&gt;getRequest()-&gt;getActionName(); \t\t\/\/pr\u00eat \u00e0 travailler sur les livres \t\tZend_Loader::loadClass('Livre'); \t\t\/\/ajout des aides de view \t\t$this-&gt;view-&gt;addHelperPath('.\/app\/views\/helpers', 'MyWsp_View_Helper'); \t\t$this-&gt;view-&gt;setEscape('utf8_encode'); \t} \t\/** \t * Cr\u00e9er un message vide \t * \t * @return Object \t *\/ \tprotected function _getEmptyMsg() \t{ \t\t\/\/cr\u00e9ation d'un message vide \t\t$livre = new stdClass(); \t\t$livre\t-&gt;id = -99; \t\t$livre\t-&gt;nom = 'Pseudo'; \t\t$livre\t-&gt;message = 'Entrez votre message'; \t\t$livre\t-&gt;date = time(); \t\treturn $livre; \t} }<\/pre>\n<p>Passons en revue chaque m\u00e9thode<\/p>\n<h2>init()<\/h2>\n<p>Cette permet l&rsquo;initialisation des diff\u00e9rent param\u00e8tre, elle est appel\u00e9 dans le constructeur parent de la class. On en profite pour d\u00e9finir un titre de page (<q>$this-view-&gt;title<\/q>) et divers autres param\u00e8tres. On d\u00e9fini aussi un r\u00e9pertoire suppl\u00e9mentaire pour les helper de view (<q>$this-&gt;view-&gt;addHelperPath(&lsquo;.\/app\/views\/helpers&rsquo;, &lsquo;MyWsp_View_Helper&rsquo;);<\/q>).<\/p>\n<h2>ajouterAction()<\/h2>\n<p>Appeler lorsque on est \u00e0 l&rsquo;url \/livre\/ajouter, tout comme les autres m\u00e9thode du type actionnNameAction() la partie actionName est prise depuis l&rsquo;url! On r\u00e9cup\u00e8re les diff\u00e9rent param\u00e8tre si on a effectu\u00e9 un post ou on affiche simplement le contenu de ajouter.phtml (ceci se faisant automatiquement).<\/p>\n<h2>indexAction()<\/h2>\n<p>On r\u00e9cup\u00e8re les informations dans la base de donn\u00e9es, et on stocke les donn\u00e9es dans le viewer.<\/p>\n<p>Ajoutons quelques fichiers afin de rendre le tout plus int\u00e9ressant et avoir un vrai jeu de templates\/gabarit! <strong>header.phtml<\/strong><\/p>\n<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; \t&lt;meta http-equiv=\"Content-Type\" content=\"text\/html;charset=utf-8\" \/&gt; \t&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>\n<p>le haut de la page html<\/p>\n<p><strong>footer.phtml<\/strong><\/p>\n<pre> \t&lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt;<\/pre>\n<p>le bas de la page html<\/p>\n<p><strong>index.phtml<\/strong><\/p>\n<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; \t&lt;div id=\"livre\"&gt; \t\t&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; \t\t&lt;div id=\"livre_message\"&gt; \t\t&lt;?php foreach($this-&gt;livres as $livre) : ?&gt; \t\t\t&lt;div class=\"livre_block_message\"&gt; \t\t\t\t&lt;span class=\"livre_pseudo\"&gt;&lt;?php echo $this-&gt;escape($livre-&gt;nom); ?&gt;&lt;\/span&gt; | \t\t\t\t&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; \t\t\t\t&lt;br \/&gt; \t\t\t\t&lt;span class=\"livre_message\"&gt;&lt;?php echo nl2br($this-&gt;escape($livre-&gt;message)); ?&gt;&lt;\/span&gt; \t\t\t\t&lt;?php \t\t\t\tif ($this-&gt;connecter) \t\t\t\t\techo '&lt;br \/&gt;&lt;a href=\"' , $this-&gt;baseUrl , '\/livre\/modifier\/id\/' , $livre-&gt;id , '\"&gt;Modifier&lt;\/a&gt; \t\t\t\t\t&lt;a href=\"' , $this-&gt;baseUrl , '\/livre\/supprimer\/id\/' , $livre-&gt;id , '\"&gt;Supprimer&lt;\/a&gt;'; \t\t\t\t?&gt; \t\t\t&lt;\/div&gt; \t\t&lt;?php endforeach; ?&gt; \t\t&lt;\/div&gt; \t&lt;\/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;<\/pre>\n<p>La liste des messages du forum, on oublie pas d&rsquo;inclure le haut et le bas de page (via <q>$this-&gt;render();<\/q>)<\/p>\n<p>On voix ici l&rsquo;utilisation du helper Date afin d&rsquo;afficher la date au format choisi.<\/p>\n<p><strong>ajouter.phtml<\/strong><\/p>\n<pre> &lt;?php echo $this-&gt;render('header.phtml'); ?&gt; \t&lt;div id=\"livre\"&gt; \t&lt;strong&gt;&lt;?php echo $this-&gt;message; ?&gt;&lt;\/strong&gt; \t&lt;?php echo $this-&gt;render('livre\/_form.phtml'); ?&gt; \t&lt;\/div&gt; &lt;?php echo $this-&gt;render('footer.phtml'); ?&gt;<\/pre>\n<p>La page d&rsquo;ajout des messages.<\/p>\n<p><strong>_form.phtml<\/strong><\/p>\n<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; \t&lt;div id=\"livre_haut\"&gt; \t\t&lt;input type=\"text\" name=\"nom\" value=\"&lt;?php echo $this-&gt;escape(trim($this-&gt;livre-&gt;nom)); ?&gt;\"&gt; \t\t&amp;nbsp;&amp;bull;&amp;nbsp; \t\t&lt;input type=\"text\" name=\"site\" value=\"&lt;?php echo $this-&gt;escape($this-&gt;livre-&gt;site);?&gt;\"&gt; \t\t&lt;br \/&gt; \t\t&lt;textarea name=\"message\" cols=\"50\" rows=\"5\"&gt;&lt;?php echo $this-&gt;escape($this-&gt;livre-&gt;message); ?&gt;&lt;\/textarea&gt; \t\t&lt;br \/&gt; \t\t&lt;button type=\"submit\" name=\"add\"&gt;Poster&lt;\/button&gt; \t&lt;\/div&gt; &lt;\/form&gt; &lt;br \/&gt; &lt;br \/&gt;<\/pre>\n<p>Le formulaire d&rsquo;ajout et de modification (not\u00e9 le <q>_<\/q> devant le nom permettant d&rsquo;avoir un <q>template\/gabarit priv\u00e9<\/q>.<\/p>\n<p>En principe vous \u00eates maitenant capable d&rsquo;ajouter des messages et de les afficher!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9ations d&rsquo;un livre d&rsquo;or en 6 \u00e9tapes D\u00e9finition Cr\u00e9ations des tables sql et des r\u00e9pertoires 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\u00f4leur afin qu&rsquo;il affiche le contenu des fichier index.phtml et ajout.phtml. &lt;?php \/** Zend_Controller_Action *\/ [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[9],"tags":[22,110,24,42,65,37,64],"class_list":["post-63","post","type-post","status-publish","format-standard","hentry","category-dev","tag-jouons","tag-php","tag-programmation","tag-script","tag-tutoriel","tag-web","tag-zf"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":1,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions\/207"}],"wp:attachment":[{"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/media?parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/categories?post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grummfy.be\/blog\/wp-json\/wp\/v2\/tags?post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}