﻿<?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>Alexandre JULIEN &#187; CMS</title>
	<atom:link href="http://www.alexandre-julien.com/tag/cms/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexandre-julien.com</link>
	<description>Industrialisation des développements, PHP, .NET, jQuery, HTML5, Web, …</description>
	<lastBuildDate>Sun, 22 Jan 2012 20:26:21 +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>8 conseils pour rendre WordPress performant</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=8-conseils-pour-rendre-wordpress-performant</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 22:04:59 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1554</guid>
		<description><![CDATA[
Le célèbre moteur de Blog / CMS WordPress est de plus en plus utilisé dans des contextes de fortes charges (traffic important).
Contrairement à des CMS plus &#171;&#160;professionnels&#160;&#187; comme Drupal, eZPublish, WordPress de manière native est très peu abouti en terme de performances surtout au niveau de la  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/go/wordpress/"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>Le célèbre moteur de Blog / CMS<a href="http://wordpress.org"> WordPress</a> est de plus en plus utilisé dans des contextes de fortes charges (traffic important).</p>
<p>Contrairement à des CMS plus &laquo;&nbsp;professionnels&nbsp;&raquo; comme Drupal, eZPublish, WordPress de manière native est très peu abouti en terme de performances surtout au niveau de la gestion du cache.</p>
<p>Dans cet article, je vais vous présenter les éléments essentiels pour que votre instance de WordPress soit performante et pour qu&#8217;elle puisse supporter un trafic important en jouant sur la configuration de  Wordpress, l&#8217;utilisation de plugins d&#8217;optimisations, la configuration de PHP et l&#8217;utilisation de logiciels tiers.</p>
<p><span id="more-1554"></span></p>
<h2><span style="line-height: 28px;">1. <span style="text-decoration: underline;">Alléger au maximum votre WordPress</span></span></h2>
<div><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/lotus-flower.jpg"><img class="aligncenter size-full wp-image-1569" title="lotus-flower" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/lotus-flower.jpg" alt="" width="410" height="298" /></a></div>
<div>Je pense que tout le monde conviendra que le principal atout de WordPress est sa communauté importante et sa grande quantité de plugins. Aujourd&#8217;hui on trouve des plugins pour tout, ajouter des boutons de partages pour les réseaux sociaux, faire des cloud-tags, des sliders jQuery, ajouter du flash, ajouter de l&#8217;ajax, &#8230; Bref il n&#8217;est pas rare de voir des configurations avec 30 plugins installés et en fonctionnement sur le front-office. Le problème étant que tous ces plugins ont un coût sur les performance de votre WordPress.</div>
<div>Il est plutôt recommandé de minimiser l&#8217;utilisation des plugins utilisés sur le front et de les intégrer directement sur votre thème graphique.</div>
<div>
<h2>2. <span style="text-decoration: underline;">Utiliser un plugin avancé de cache comme WPSuperCache ou W3 Total Cache</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/compteur_image_photo_leader.jpg"><img class="aligncenter size-full wp-image-1577" title="compteur_image_photo_leader" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/compteur_image_photo_leader.jpg" alt="" width="536" height="357" /></a></p>
<div>Nativement le système de cache WordPress ne permet pas d&#8217;aller bien loin, néanmoins il sert surtout à fournir une API de Cache pour les plugins et pour utiliser des systèmes de cache plus poussés.</div>
<div>Deux systèmes de cache sortent du lot : WPSuperCache et W3 Total Cache.</div>
<div>
<ul>
<li><a href="http://wordpress.org/extend/plugins/wp-super-cache/">WPSuperCache</a> offre principalement des fonctionnalités permettant de produire des pages le plus statiques possibles : générations de pages HTML, de CSS et de javascript. Il permet également d&#8217;utiliser un CDN (site miroir pour vos ressources statiques) ce qui convient à une grande majorité de blog et de sites. Il possède également des options de &laquo;&nbsp;minifier&nbsp;&raquo; qui permet de réduire et d&#8217;assembler des ressources JS et CSS en un seul fichier compressé. Il convient à beaucoup de sites, surtout pour ceux qui sont hébergés sur un système mutualisé.</li>
<li><a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> est quant à lui un système de cache beaucoup plus complet et sophistiqué. Il possède des fonctionnalités similaires à WPSuperCache mais offre une véritable valeur ajoutée sur la mise en cache de données. Il permet d’interagir avec avec des serveurs de cache locaux (APC, eAccelator, XCache) ou distribués (memcached). Nous reviendrons sur ce point un peu plus tard.</li>
</ul>
</div>
<h2>3. <span style="text-decoration: underline;">Un WordPress est performant avec un PHP Performant</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/php/"><img class="aligncenter size-medium wp-image-1578" title="logo-php" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/logo-php-379x199.png" alt="" width="379" height="199" /></a><br />
</span></p>
<p>Il est vivement conseillé d&#8217;utiliser les versions les plus récentes de PHP sur votre instance WordPress. Par exemple, la version 5.3.x de<a href="http://php.net"> PHP</a> consomme facilement 40 % de mémoire en mois et peu faire gagner 30 % de performances par rapport à la version 5.2.x.</p>
<p>Les versions 3.x de WordPress supportent très bien les dernières versions de PHP donc n&#8217;hésitez pas à utiliser les versions les plus récentes !</p>
<h2>3. <span style="text-decoration: underline;">Utiliser un accélérateur d&#8217;OPCode</span></h2>
<p>PHP est un langage interprété et donc par conséquent il compile le code que vous vous apprêtez à exécuter, puis le déroule. Le problème étant est que PHP recompilera ce code autant de fois que vous l&#8217;exécutez si vous l&#8217;utilisez pas un système de cache sur le bytecode produit.</p>
<p>Il est existe plusieurs donc 3 principaux qui sont libres :</p>
<p>- <a href="http://pecl.php.net/package/APC">APC (Advanced PHP Cache)</a> : excellent, libre, fiable, stable, entretenu par les fondateurs de PHP, c&#8217;est le choix que je conseille le plus souvent.</p>
<p>- <a href="http://sourceforge.net/projects/eaccelerator/">eAccelerator</a> : un peu plus performant que APC (environ 5% plus rapide en moyenne)</p>
<p>- <a href="http://xcache.lighttpd.net/">XCache</a></p>
<p>- <a href="http://www.zend.com/fr/products/server/">Zend Optimizer+ </a>: fonctionne de manière distribuée mais il est embarqué dans le serveur d&#8217;application Zend Server uniquement.</p>
<p>Un cache de compilation peut facilement vous réduire de moitié l&#8217;utilisation de la RAM et vous faire gagner des performances non négligeables.</p>
<h2>4. <span style="text-decoration: underline;">Utiliser un serveur de cache pour vos données</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/memcached/"><img class="aligncenter size-full wp-image-1579" title="memcached-logo" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/memcached-logo.jpg" alt="" width="365" height="143" /></a><br />
</span></p>
<p>Stocker les données sur MySQL c&#8217;est bien, les mettre sur un proxy de cache c&#8217;est mieux !</p>
<p>Autre astuce pour réduire le temps d&#8217;accès à vos données est de passer par un serveur de cache. Par défaut les caches de compilation comme <a href="http://pecl.php.net/package/APC">APC</a>, <a href="http://sourceforge.net/projects/eaccelerator/">eAccelerator</a> et <a href="http://xcache.lighttpd.net/">XCache</a> permettent de mettre de faire cela de manière locale.</p>
<p>Toutefois la meilleure solution et la plus performante si votre installation vous le permet est d&#8217;utiliser &laquo;&nbsp;memcached&nbsp;&raquo;. Il s&#8217;agit d&#8217;un serveur de cache écrit en C++ initialement par LiveJournal pour stocker des données directement dans la RAM avec un système simple de clé =&gt; valeur, très rudimentaire mais extrêmement performant, il s&#8217;agit du serveur de cache le plus utilisé. Facebook, Twitter, nombres d&#8217;e-commerce, ne pourraient tourner sans.</p>
<h2>5. <span style="text-decoration: underline;">Utiliser un MySQL performant et bien maintenu</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/mysql/"><img class="aligncenter size-medium wp-image-1580" title="mysql_logo" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/mysql_logo-386x200.png" alt="" width="386" height="200" /></a><br />
</span></p>
<p>Installer les versions les plus récentes possibles de MySQL pour accroître les performances de l&#8217;application là où le cache ne peut pas agir notamment sur l&#8217;interface d&#8217;administration.</p>
<p>MySQL 5.5 a des performances relativement plus importantes que la version 5.1 donc il vaut mieux se tourner vers les dernières versions, ou encore mieux se tourner vers <a href="http://mariadb.org/">MariaDB</a> (fork de MySQL 6 non approuvé par Oracle).</p>
<p>Penser également à effectuer régulièrement (1 fois par jour) des optimisations des tables, pour cela des plusieurs comme WP DB Manager vous permette d&#8217;inclure cette maintenance dans les tâches de WordPress.</p>
<h2>6. <span style="text-decoration: underline;">Utiliser un serveur Web léger pour vos fichiers statiques</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/nginx/"><img class="aligncenter size-full wp-image-1581" title="nginx" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/nginx.jpg" alt="" width="650" height="200" /></a><br />
</span></p>
<p>Apache est un serveur Web extrêmement stable et complet, cependant, il a tendance à être assez lourd lorsque l&#8217;on a une forte charge sur son site Web. Ceci est notamment due au fait que Apache crée un processus léger (thread) pour chaque requête HTTP, si votre serveur vous le permet, je vous recommande d&#8217;utiliser un serveur Web léger en plus d&#8217;Apache pour tous vos fichiers statiques (HTML, CSS, JS, images, flash, &#8230;) en le configurant comme un proxy sur Apache. Le plus connu d&#8217;entre eux qui a fait ses preuves est <a href="http://nginx.org/">NGINX</a>. Il sera beaucoup moins gourmand que Apache et vous réduira la charge de la machine si vous avez une forte audience. En moyenne, un site WordPress qui utilise un système de cache, distribue 90% de fichiers statiques donc cela vaut le coup de se séparer d&#8217;Apache pour un serveur plus puissant !</p>
<p><strong><span style="color: #ff0000;">Les 3 derniers conseils s&#8217;adressent majoritairement à des sites à forte audience de plusieurs dizaines milliers de visites quotidienne.</span></strong></p>
<h2>7. <span style="text-decoration: underline;">Utiliser un CDN (Content Delivery Network)</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/go/cdn/"><img class="aligncenter size-full wp-image-1583" title="globe_3" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/globe_3.jpg" alt="" width="381" height="316" /></a><br />
</span></p>
<p>Dans une optique de distribuer le plus rapidement possibles vos ressources statiques et d&#8217;économiser la bande passante, il peut être intéressant d&#8217;utiliser un CDN pour faire cette distribution. Le but d&#8217;un CDN est de jouer le rôle d&#8217;un site miroir mais uniquement pour vos fichiers statiques. De plus la plupart des CDN offrent un réseau décentralisé de distribution de données avec des serveurs hébergés partout dans le monde qui sont utilisés en fonction de la location de l&#8217;utilisateur. Très pratiques pour les sites internationaux qui ont une audience importante sur divers continents !</p>
<p>Il en existe toute une panoplie, donc <a href="http://maxcdn.com/">MAXCDN</a>.</p>
<h2>8. <span style="text-decoration: underline;">Utiliser un load-balancer et un environnement distribué</span></h2>
<p><span style="text-decoration: underline;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/08/RB100.gif"><img class="aligncenter size-full wp-image-1584" title="cluster" src="http://www.alexandre-julien.com/wp-content/uploads/2011/08/RB100.gif" alt="" width="300" height="229" /></a><br />
</span></p>
<p>Nombreux sites d&#8217;e-commerce sont contraints de tourner sur plusieurs machines. Pour les CMS, ce cas de figure est plus rare, mais se présente sur des sites à forte charge. Opter pour un environnement distribué coûte moins cher, est plus sûre et plus rentable que d&#8217;acheter une machine plus puissante.</p>
<p>Pour mettre cela en place il vous faudra un équipement réseau adapté : le load balancer (répartiteur de charge) qui permet de rediriger le trafic de manière équitable sur &laquo;&nbsp;n&nbsp;&raquo; machines.</p>
<p>Voici la structure standard d&#8217;une architecture PHP simple avec un load balancer :</p>
<p>Dans ce cas, il est impératif de faire attention à certaines choses :</p>
<p>1) Ne pas stocker les sessions en local : utiliser un NAS pour y stocker les fichiers de sessions, ou votre base de données ou encore mieux utiliser Memcached dans votre configuration php.ini.</p>
<p>2) Privilégier un cache de données avec Memcached ou équivalent plutôt qu&#8217;avec un système de cache local tel que APC.</p>
<p>3) Penser à partager ou répliquer les ressources du répertoire &laquo;&nbsp;wp-includes&nbsp;&raquo; de WordPress.</p>
<p>4) Utiliser un distributeur de code source comme rsync pour assurer que vous avez bien les mêmes sources dans les différents serveurs frontaux.</p>
<p>Voilà autant de piste à explorer pour optimiser votre moteur de blog favori, la plupart des optimisations ne sont franchement pas complexes sauf peut être la mise en reverse proxy de nginx sur Apache mais on trouve sur le Web de nombreuses ressources à ce sujet, notamment sur le site de Korben : <a href="http://korben.info/configurer-nginx-reverse-proxy.html">http://korben.info/configurer-nginx-reverse-proxy.html</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-php/8-conseils-pour-rendre-wordpress-performant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress 3.0 : nouveautés du célèbre moteur de blog</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-3-0-nouveautes-du-celebre-moteur-de-blog</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:18:11 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1397</guid>
		<description><![CDATA[
WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.
Les nouveautés sont nombreuses :
- Le compte administrateur par défaut peut être nommer autrement que  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.</p>
<p style="text-decoration: underline;">Les nouveautés sont nombreuses :</p>
<p>- <strong>Le compte administrateur</strong> par défaut peut être nommer autrement que &laquo;&nbsp;admin&nbsp;&raquo; et on saisit le mot de passe dès l&#8217;installation.<br />
-<strong> Les posts personnalisés</strong> : on peut créer des types de posts personnalisés et les paramètres pour créer une sorte de contexte autour d&#8217;un article.<br />
-<strong> </strong><strong>La gestion des menus</strong> : on a plus à choisir entre les catégories du blog et les pages CMS. On peut complètement administrer le menu depuis un manager très ergonomique.<br />
- <strong>Multi-sites</strong> : aurevoir WordPress MU et bonjour WordPress 3, vous l&#8217;aurez compris, WordPress 3.0 est nativement multi-site, plus besoin de passer par WordPress MU, un grand soulagement pour les développeurs de plugins qui étaient obligés de se soucier du cas de WordPress MU.<br />
- <strong>Nouveau thème par défaut</strong> : le Twenty-Ten qui est entièrement paramétrable, il propose un header modifiable, un background modifiable, un menu dynamique, &#8230;</p>
<p><a title="Wordpress 3.0 - FR" href="http://fr.wordpress.org/latest-fr_FR.zip" target="_blank">Télécharger WordPress 3.0 (version Française)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 3.0 : nouveautés du célèbre moteur de blog</title>
		<link>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wordpress-3-0-nouveautes-du-celebre-moteur-de-blog</link>
		<comments>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:18:11 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1397</guid>
		<description><![CDATA[
WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.
Les nouveautés sont nombreuses :
- Le compte administrateur par défaut peut être nommer autrement que  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png"><img class="aligncenter size-full wp-image-1309" title="wordpress-logo-stacked-rgb" src="http://www.alexandre-julien.com/wp-content/uploads/2010/04/wordpress-logo-stacked-rgb.png" alt="" width="500" height="310" /></a></p>
<p>WordPress 3.0 vient de sortir en version finale. Il est disponible sur le site officiel international de WordPress.org en anglais et également en version française sur le site wordpress-fr.org.</p>
<p style="text-decoration: underline;">Les nouveautés sont nombreuses :</p>
<p>- <strong>Le compte administrateur</strong> par défaut peut être nommer autrement que &laquo;&nbsp;admin&nbsp;&raquo; et on saisit le mot de passe dès l&#8217;installation.<br />
-<strong> Les posts personnalisés</strong> : on peut créer des types de posts personnalisés et les paramètres pour créer une sorte de contexte autour d&#8217;un article.<br />
-<strong> </strong><strong>La gestion des menus</strong> : on a plus à choisir entre les catégories du blog et les pages CMS. On peut complètement administrer le menu depuis un manager très ergonomique.<br />
- <strong>Multi-sites</strong> : aurevoir WordPress MU et bonjour WordPress 3, vous l&#8217;aurez compris, WordPress 3.0 est nativement multi-site, plus besoin de passer par WordPress MU, un grand soulagement pour les développeurs de plugins qui étaient obligés de se soucier du cas de WordPress MU.<br />
- <strong>Nouveau thème par défaut</strong> : le Twenty-Ten qui est entièrement paramétrable, il propose un header modifiable, un background modifiable, un menu dynamique, &#8230;</p>
<p><a title="Wordpress 3.0 - FR" href="http://fr.wordpress.org/latest-fr_FR.zip" target="_blank">Télécharger WordPress 3.0 (version Française)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/cms/wordpress-3-0-nouveautes-du-celebre-moteur-de-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joomla! API Framework MVC 1.5 : création d&#039;une application (tuto CRUD)</title>
		<link>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud</link>
		<comments>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 19:38:00 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cmf]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[composant]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[tuto]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=790</guid>
		<description><![CDATA[
Voici un tutorial pour créer une application &#171;&#160;composant&#160;&#187; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5
Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png"><img class="aligncenter size-full wp-image-794" title="Joomla! Api" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png" alt="Joomla! Api" width="500" height="342" /></a></p>
<p>Voici un tutorial pour créer une application &laquo;&nbsp;composant&nbsp;&raquo; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5</p>
<p>Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement d&#8217;applications. Le nouveau framework est basé sur le design-pattern MVC bien que la couche modèle est quelque peu inutile, étant donné que Joomla 1.5 ne fonctionne avec rien d&#8217;autre que MySQL, cela dit, on a le choix entre les drivers &laquo;&nbsp;mysql&nbsp;&raquo; ou &laquo;&nbsp;mysqli&nbsp;&raquo;.</p>
<p>Nous illustrerons une application simple qui saisie des utilisateurs dans une table et qui les affiche sous la forme d&#8217;une liste. Cette application nous permettra de voir d&#8217;une façon pragmatique la structure des applications Joomla! et les fonctions de base du framework : création d&#8217;une classe modèle (ajout, mise à jour, suppression et requêtes en base de données), création d&#8217;un controller avec les actions de base (une action pour création et édition et une autre pour le listing), gestion des templates, redirections et notifications des erreurs et succès.</p>
<p>Télécharger Joomla! 1.5.x : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/Joomla_1.5.15-Stable-Full_Package1.zip">Joomla_1.5.15</a></p>
<p>Télécharger l&#8217;application : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/com_crud.zip">Joomla! Crud Tutoriel</a></p>
<p><span id="more-790"></span></p>
<p>Voici ci-dessous la hiérarchie de notre application, il s&#8217;agit d&#8217;un répertoire à créer dans le dossier &laquo;&nbsp;components&nbsp;&raquo; de Joomla! :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png"><img class="aligncenter size-full wp-image-798" title="joomla! component hierarchy" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png" alt="joomla! component hierarchy" width="198" height="254" /></a></p>
<p>Voici le script SQL correspondant à la table &laquo;&nbsp;jos_crud_users&nbsp;&raquo; qui contient les données :</p>
<pre class="brush: sql; title: ; notranslate">

--
-- Structure de la table `jos_crud_users`
--

CREATE TABLE IF NOT EXISTS `jos_crud_users` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_lastname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
</pre>
<p>Voici le premier fichier à créer, &laquo;&nbsp;crud.php&nbsp;&raquo; il s&#8217;agit du fichier d&#8217;entrée qui est exécuté dès qu&#8217;un utilisateur visite l&#8217;application :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * components/com_crud/crud.php
 * @link http://www.alexandre-julien.com
 * @author Alexandre JULIEN
 */

// Pas d'accès direct à la page
defined( '_JEXEC' ) or die( 'Restricted access' );

// Requiert la classe des contrôleurs

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Requiert un contrôleur spécifique si demander
if($controller = JRequest::getVar('controller')) {
 $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
 if (file_exists($path)) {
 require_once $path;
 } else {
 $controller = '';
 }
}

// Instanciation du contrôleur
$classname    = 'CrudController'.$controller;
$controller   = new $classname( );

// Execute la tâche demandée
$controller-&gt;execute( JRequest::getVar( 'task' ) );

// Redirection si elle est sollicitée par le contrôleur
$controller-&gt;redirect();
?&gt;
</pre>
<p>Voici maintenant le contrôleur, chaque méthode correspond à une tâche accessible par l&#8217;url : &laquo;&nbsp;index.php?option=com_crud&amp;task=lamethode&nbsp;&raquo;</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license GNU / GPL
 * @author Alexandre JULIEN
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class CrudController extends JController
{
 /**
 * Méthode d'affichage
 *
 * @access    public
 */
 function display()
 {
 $model = $this-&gt;getModel();
 $view = $this-&gt;getView('list', 'html');
 $view-&gt;users = $model-&gt;getAllUsers();
 $view-&gt;display();
 }

 /**
 * Formulaire de création d'un utilisateur
 * @return unknown_type
 */
 function add()
 {
 $view =&amp; $this-&gt;getView('edit', 'html');
 $view-&gt;display();
 }

 /**
 * Formulaire d'édition d'un utilisateur
 * @return unknown_type
 */
 function edit()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $view = $this-&gt;getView ('edit', 'html');
 $model =&amp; $this-&gt;getModel();
 $view-&gt;data = $model-&gt;getUser($_GET['id']);
 $view-&gt;display();
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }

 /**
 * Sauvegarde d'un utilisateur
 * @return unknown_type
 */
 function save()
 {
 if (isset($_POST))
 {
 $model =&amp; $this-&gt;getModel();
 if (isset($_POST['id']) &amp;&amp; $model-&gt;getUser($_POST['id']))
 {
 $model-&gt;updateUser($_POST);
 }
 else
 {
 $model-&gt;addUser($_POST);
 }
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les modifications ont bien été enregistrées&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les données sont manquantes&quot;, 'error');
 }
 }

 /**
 * Suppression d'un utilisateur
 * @return unknown_type
 */
 function delete()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $model =&amp; $this-&gt;getModel();
 $model-&gt;removeUser($_GET['id']);
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'utilisateur a bien été supprimé&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }
}
?&gt;
</pre>
<p>La couche modèle qui gère les transactions avec la base de données dans le fichiers &laquo;&nbsp;models/crud.php&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Crud modèle pour le composant Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license    GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.model' );

/**
 * Modèle Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 */
class CrudModelCrud extends JModel
{
 /**
 * Retourne tous les enregistrements de la table
 * @return unknown_type
 */
 function getAllUsers()
 {
 $query = 'SELECT * FROM #__crud_users';
 return $this-&gt;_getList ($query);
 }

 /**
 * Retourne l'enregistrement en fonction de l'identifiant de l'utilisateur
 * @param $user_id
 * @return unknown_type
 */
 function getUser ($user_id)
 {
 $query = 'SELECT * FROM #__crud_users WHERE user_id = '.(int)$user_id;
 $result = $this-&gt;_getList ($query);
 return $result[0];
 }

 /**
 * Ajoute un enregistrement
 * @param $values
 * @return unknown_type
 */
 function addUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;insertObject ('#__crud_users', $row);
 }

 /**
 * Met à jour un enregistrement
 * @param $values
 * @return unknown_type
 */
 function updateUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_id = $values['user_id'];
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;updateObject ('#__crud_users', $row, 'user_id');
 }

 /**
 * Supprime un enregistrement
 * @param $id
 * @return unknown_type
 */
 function removeUser ($id)
 {
 $db =&amp; JFactory::getDBO();
 $query = 'DELETE FROM #__crud_users WHERE user_id = '.(int)$id;
 $db-&gt;setQuery($query);
 return $this-&gt;query();
 }
}
?&gt;
</pre>
<p>Voici un exemple de fichier &laquo;&nbsp;View.html.php&nbsp;&raquo;, il s&#8217;agit de celui de l&#8217;écran de listing :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license   GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View pour afficher la liste des utilisateurs
 *
 * @package    Crud
 */

class CrudViewList extends JView
{
 function display($tpl = null)
 {
 $this-&gt;assignRef('data', $this-&gt;users);
 parent::display($tpl);
 }
}
?&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;edit&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Edition d'un utilisateur&lt;/h1&gt;
&lt;form name=&quot;utilisateur&quot; method=&quot;POST&quot;
	action=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=save') ?&gt;&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;user_id&quot; value=&quot;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&quot; /&gt;
&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Prénom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_name&quot;
				value=&quot;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_lastname&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Email de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_email&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&quot;&gt;&lt;/input&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Enregistrer&quot; /&gt;&lt;/form&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;list&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Liste des utilisateurs&lt;/h1&gt;

&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom&lt;/th&gt;
			&lt;th&gt;Prénom&lt;/th&gt;
			&lt;th&gt;Adresse e-mail&lt;/th&gt;
			&lt;th&gt;Actions&lt;/th&gt;
		&lt;/tr&gt;
		&lt;?php foreach ($this-&gt;data as $key =&gt; $value) { ?&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_lastname ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_name ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_email ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=edit&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;
			Editer &lt;/a&gt; | &lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=delete&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;Supprimer&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;?php } ?&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;a href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=add') ?&gt;&quot;&gt;
Créer un utilisateur &lt;/a&gt;
</pre>
<p>On pourra également créer un package Joomla! qui automatisera l&#8217;installation des fichiers et des tables SQL grâce à un fichier de configuration d&#8217;installation &laquo;&nbsp;hello.xml&nbsp;&raquo; :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE install SYSTEM &quot;http://www.joomla.org/xml/dtd/1.5/component-install.dtd&quot;&gt;
&lt;install type=&quot;component&quot; version=&quot;1.5.0&quot;&gt;
  &lt;name&gt;crud&lt;/name&gt;
  &lt;!-- Les éléments suivants sont optionnels  --&gt;
  &lt;creationDate&gt;2009 09 21&lt;/creationDate&gt;
  &lt;author&gt;Alexandre JULIEN&lt;/author&gt;
  &lt;authorEmail&gt;mail@alexandre.julien.com&lt;/authorEmail&gt;
  &lt;authorUrl&gt;http://www.alexandre-julien.com&lt;/authorUrl&gt;
  &lt;copyright&gt;Le blog d'Alex&lt;/copyright&gt;
  &lt;license&gt;GNU / GPL&lt;/license&gt;
  &lt;!--  Version du composant --&gt;
  &lt;version&gt;stable 1.0&lt;/version&gt;
  &lt;!-- Description du Composant --&gt;
  &lt;description&gt;Petit tutoriel CRUD pour illustrer Joomla! MVC Framework&lt;/description&gt;

  &lt;!-- Fichiers d'installation --&gt;
  &lt;files folder=&quot;site&quot;&gt;
    &lt;filename&gt;crud.php&lt;/filename&gt;
    &lt;filename&gt;controller.php&lt;/filename&gt;
    &lt;filename&gt;models/crud.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/tmpl/default.php&lt;/filename&gt;
    &lt;filename&gt;views/list/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/list/tmpl/default.php&lt;/filename&gt;
  &lt;/files&gt;
  &lt;install&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;uft8&quot; driver=&quot;mysql&quot;&gt;install.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;install.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/install&gt;
  &lt;uninstall&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysql&quot;&gt;uninstall.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;uninstall.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/uninstall&gt;
  &lt;administration&gt;
    &lt;!-- Administration Menu Section --&gt;
    &lt;menu&gt;Joomla! CRUD&lt;/menu&gt;

    &lt;!-- Fichiers de la partie administration --&gt;
    &lt;files folder=&quot;admin&quot;&gt;
      &lt;filename&gt;index.html&lt;/filename&gt;
      &lt;filename&gt;install.sql&lt;/filename&gt;
      &lt;filename&gt;uninstall.sql&lt;/filename&gt;
    &lt;/files&gt;
  &lt;/administration&gt;
&lt;/install&gt;
</pre>
<p>Voici des &laquo;&nbsp;screenshots&nbsp;&raquo; de notre application finale :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png"><img class="aligncenter size-full wp-image-806" title="Joomla Crud Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png" alt="Joomla Crud Tuto MVC" width="595" height="353" /></a><br />
<a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png"><img class="aligncenter size-full wp-image-807" title="List Joomla Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png" alt="List Joomla Tuto MVC" width="594" height="383" /></a></p>
<p>L&#8217;application est disponible ici dans cette archive : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/crud.zip">Tutoriel Joomla! CRUD (installation package)</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 5658px; width: 1px; height: 1px;">&lt;?php</p>
<p>// Pas d&#8217;accÃ¨s direct</p>
<p>defined(&#8216;_JEXEC&#8217;) or die(&#8216;Restricted access&#8217;); ?&gt;</p>
<p>&lt;h1&gt;Edition d&#8217;un utilisateur&lt;/h1&gt;<br />
&lt;form name=&nbsp;&raquo;utilisateur&nbsp;&raquo; method=&nbsp;&raquo;POST&nbsp;&raquo;<br />
action=&nbsp;&raquo;&lt;?php echo JRoute::_(&#8216;index.php?option=com_crud&amp;task=save&#8217;) ?&gt;&nbsp;&raquo;&gt;<br />
&lt;input type=&nbsp;&raquo;hidden&nbsp;&raquo; name=&nbsp;&raquo;user_id&nbsp;&raquo; value=&nbsp;&raquo;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&nbsp;&raquo; /&gt;<br />
&lt;table&gt;<br />
&lt;tbody&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;PrÃ©nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_name&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_lastname&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Email de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_email&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&nbsp;&raquo;&gt;&lt;/input&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/tbody&gt;<br />
&lt;/table&gt;</p>
<p>&lt;br /&gt;<br />
&lt;br /&gt;<br />
&lt;input type=&nbsp;&raquo;submit&nbsp;&raquo; value=&nbsp;&raquo;Enregistrer&nbsp;&raquo; /&gt;&lt;/form&gt;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/feed/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>Sympal : le CMS / CMF du framework Symfony</title>
		<link>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sympal-le-cms-cmf-du-framework-symfony</link>
		<comments>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:07:16 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[sympal]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=722</guid>
		<description><![CDATA[Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png"><img class="aligncenter size-full wp-image-726" title="sympal" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png" alt="sympal" width="180" height="130" /></a>Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il n&#8217;y aura aucun code de Drupal à l&#8217;intérieur.</p>
<p>Il s&#8217;agit avant tout d&#8217;un projet Symfony 1.2 qui utilise le design pattern MVC, Doctrine et Symfony.</p>
<p>Le projet a l&#8217;air très prometteur, il est toujours en version de test mais on peut dors-et-déjà le télécharger sur le site Officiel : <a title="Sympal" href="http://www.sympalphp.org" target="_blank"><strong>http://www.sympalphp.org</strong></a></p>
<p>Le CMS a l&#8217;air tout aussi complet qu&#8217;un Drupal, Spip ou Joomla et s&#8217;intègrera parfaitement avec les applications Symfony.</p>
<p>Voici 2 screencasts présents sur le site officiel pour illustrer le fonctionnement de l&#8217;application :</p>
<p><span id="more-722"></span></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/1.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/1.swf" quality="high"></embed></object></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/2.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/2.swf" quality="high"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/9 queries in 0.060 seconds using disk: basic
Object Caching 1797/1809 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-18 13:32:57 -->
