<?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>M4d3L Blog&#039;s&#187; solution intelligente</title>
	<atom:link href="http://www.m4d3l-network.com/tag/solution-intelligente/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.m4d3l-network.com</link>
	<description>Sky is NOT the limit!</description>
	<lastBuildDate>Sat, 30 Jul 2011 19:30:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: 178184625541198, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>Dites non a Smarty</title>
		<link>http://www.m4d3l-network.com/developpement/php/dites-non-a-smarty/</link>
		<comments>http://www.m4d3l-network.com/developpement/php/dites-non-a-smarty/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 17:00:47 +0000</pubDate>
		<dc:creator>M4d3L</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[solution intelligente]]></category>
		<category><![CDATA[template engine]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zend_layout]]></category>
		<category><![CDATA[Zend_View]]></category>

		<guid isPermaLink="false">http://www.m4d3l-network.com/?p=304</guid>
		<description><![CDATA[Sortit en janvier 2001, Smarty est devenue un projet stagnant et contenant encore beaucoup de bug. De plus est, Smarty est devenu, aujourd&#8217;hui, l&#8217;engin de template PHP le plus populaire et le plus utiliser. Mais cela ne devrait pas être le cas. Cet article est pour avertir les développeurs de ne pas utiliser cet engin [...]
Related posts:<ol>
<li><a href='http://www.m4d3l-network.com/developpement/php/joomla/howto-setup-smarty3-in-joomla/' rel='bookmark' title='Howto setup Smarty3 Engine in Joomla!'>Howto setup Smarty3 Engine in Joomla!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.m4d3l-network.com/developpement/php/dites-non-a-smarty/' layout='default' show_faces='true' width='400' action='recommend' colorscheme='light' send='false' /></div><div id="attachment_339" class="wp-caption alignleft" style="width: 260px"><a href="http://www.smarty.net" rel="nofollow" target="_blank"><img src="http://www.m4d3l-network.com/wp-content/uploads/2009/07/smarty-logo-orange.gif" alt="Smarty - Engin de template" title="Smarty - Engin de template" width="250" height="64" class="size-full wp-image-339" /></a><p class="wp-caption-text">Smarty - Engin de template</p></div>
<p>Sortit en janvier 2001, Smarty est devenue un projet stagnant et contenant encore beaucoup de bug. De plus est, Smarty est devenu, aujourd&#8217;hui, l&#8217;engin de template PHP le plus populaire et le plus utiliser. Mais cela ne devrait pas être le cas. Cet article est pour avertir les développeurs de ne pas utiliser cet engin et utiliser des alternatives qui sont de loin supérieures.</p>
<p>Cette articles est aussi, en partie, une traduction dans mes propres mots du site anglais <a rel="nofollow" href="http://nosmarty.net" target="_blank">nosmarty.net</a></p>
<p><span id="more-304"></span></p>
<h3>Est-ce que SMARTY est bon pour moi?</h3>
<p>Il ne faut pas se fier au nom de l&#8217;engin, car SMARTY n&#8217;est pas la solution la plus intelligente disponible actuellement. C&#8217;est vrai que SMARTY a recu <a href="http://solarphp.com/" rel="nofollow" target="_blank">plusieurs mentions</a> année après année. Mais quoi qu&#8217;il en soit, la plupart d&#8217;entre eux on été écrit par des développeur qui n&#8217;était vraisemblablement pas familier avec une <a href="http://en.wikipedia.org/wiki/Multitier_architecture" rel="nofollow" target="_blank">architecture multi-tier</a>. Pour ces utilisateurs,  le concept de séparation de la logique et de la présentation est un concept innovateur.  Mais SMARTY est seulement une façon pour parvenir a faire cette séparation (qui ne fait pas très bien d&#8217;ailleurs) et aujourd&#8217;hui totalement dépasser par les autres produits existants.</p>
<div class="moreinfo">
<h4>Quelques solutions de rechange plus intelligentes</h4>
<p>Il existe plusieurs alternatives à SMARTY.</p>
<ul>
<li><a rel="nofollow" href="http://framework.zend.com/docs/screencasts" target="_blank">Zend Framework</a></li>
<li><a rel="nofollow" href="http://solarphp.com/" target="_blank">Solar</a></li>
<li><a rel="nofollow" href="http://www.symfony-project.org/installation" target="_blank">Symfony</a></li>
<li><a rel="nofollow" href="http://phptal.motion-twin.com/download.html" target="_blank">PHPTAL</a></li>
<li><a rel="nofollow" href="http://en.wikipedia.org/wiki/XSL_Transformations" target="_blank">XSLT</a></li>
</ul>
<p>Personnellement, comme vous avez pu le remarquer sur mon blogue, je suis vendu à Zend Framework. Il fait une très belle job et assez simple a utiliser et intégrer.  Consultez la documentation sur Zend_View et Zend_Layout et vous pourrez juger par vous même.</p></div>
<p>SMARTY a sur son <a href="http://www.smarty.net" rel="nofollow" target="_blank">site web</a> une <a href="http://www.smarty.net/rightforme.php" rel="nofollow" target="_blank">liste des bénéfices (en anglais)</a>. Allons voir quelque un de ces bénéfices et descendons-les de leurs piédestaux. </p>
<h4>Caching</h4>
<p>Voici ce que SMARTY dit (en anglais) : </p>
<blockquote><p>Smarty provides fine-grained caching features for caching all or parts of a rendered web page, or leaving parts uncached. Programmers can register template functions as cacheable or non-cachable, group cached pages into logical units for easier management, etc.</p></blockquote>
<p>OK. Alors, jetons un oeil au système de cache de Smarty. Pour activer le cache, vous allez écrire quelque chose comme :</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$smarty</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Smarty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">caching</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p></code></p>
<p>Cela configure le cache avec un temps de vie de 3600 secondes (1 heure). Comment faire alors si vous voulez utiliser un <a href="http://fr.wikipedia.org/wiki/Time-To-Live" rel="nofollow" target="_blank">TTL</a>, disons, de 30 minutes? Vous allez écrire :</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$smarty</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Smarty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">caching</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cache_lifetime</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1800</span><span style="color: #339933;">;</span></pre></div></div>

<p></code></p>
<p>Oh, évidement, <em>$smarty->caching = 2;</em>. Quoi d&#8217;autre cela aurait pu être? Bien&#8230; une constante aux lieux d&#8217;un nombre magique aurait été, bien mieux je crois. Mais attendez, pourquoi le TTL dépend qu&#8217;un nombre magique soit configuré pour pouvoir s&#8217;appliquer? Si <em>caching</em> est accessible directement par une propriété publique de Smarty, ne devrait-il pas être au moins un boulean, soit vrai ou faux?</p>
<p>Il y a plusieurs casse-têtes comme cela un peu partout dans Smarty. Le fait que ce soit non intuitif à un impacte réelle sur notre usage au jour le jour de Smarty, car nous sommes forcés de nous référer à la documentation encore et encore pour des choses souvent très courantes.</p>
<p>La syntaxe n&#8217;est pas le seul problème. Utiliser le cache de Smarty dans un environnement avec plusieurs serveurs peut s&#8217;avérer un vrai mal de tête, car les fichiers générés ne peuvent pas être réutilisés par un autre serveur sauf s&#8217;il utilise des systèmes de fichier en cluster comme GFS ou OCFS.</p>
<h4>Configuration</h4>
<p>Jetons un oeil à la configuration (en anglais) :</p>
<blockquote><p>Smarty can assign variables pulled from configuration files. Template designers can maintain values common to several templates in one location without intervention from the programmer, and config variables can easily be shared between the programming and presentation portions of the application.</p></blockquote>
<p>Smarty vous permet de sauvegarder vos fichiers de configuration en format INI et ensuite les charger. Il y a déja une fonction php pour cela. Elle s&#8217;appelle <em>parse_ini_file()</em>. Sauf si vous êtes résistant a utiliser php dans vos template de vue, le chargement des configurations dois ce faire dans la partit logique de toute façons. (Incidemment, Smarty n&#8217;utilise pas cette fonction, il opte plutôt pour sont propre mécanisme de traitement pour aucune raison apparente).</p>
<h4>Sécurité</h4>
<p>Et maintenant la sécurité (toujours en anglais):</p>
<blockquote><p>Templates do not contain PHP code. Therefore, a template designer is not unleashed with the full power of PHP, but only the subset of functionality made available to them from the programmer (application code.)</p></blockquote>
<p>Ne penser jamais qu&#8217;une application est plus sécuritaire simplement parce que sont engin de template assure qu&#8217;il sécurise votre application. La seul sécurité que vous pouvez avoir c&#8217;est de désactiver le tag {php} et cela entraîne une augmentation énorme de l&#8217;inflexibilité qu&#8217;aura votre designer de template. Il faudra alors que votre développeur PHP développe de nombreux plug-ins au fur et à mesure que votre designer de template progressera. La plupart des sites qui utilise Smarty avec le tag {php} activé pour éviter d&#8217;avoir a faire milles courbettes pour arriver à leur résultat. Donc où est la véritable sécurité dans Smarty?</p>
<p> De toutes façons, aujourd&#8217;hui, les trous de sécurité les plus courants ne viennent pas des templates, mais des développeurs paresseux qui ne filtre pas les données entrantes. Si vous avez un trou de sécurité dans un template, je vous conseille de changer de développeur! La meilleure sécurité se trouve dans un bon développeur consciencieux! </p>
<h4>Facile à utiliser et à maintenir</h4>
<p>Smarty dit ceci à propos de sa facilité d&#8217;utilisation (encore et toujours en anglais) :</p>
<blockquote><p>Web page designers are not dealing with PHP code syntax, but instead an easy-to-use templating syntax not much different than plain HTML. The templates are a very close representation of the final output, dramatically shortening the design cycle.</p></blockquote>
<p>Par le passé, j&#8217;ai personnellement beaucoup utilisé Smarty. La syntax est relativement facile et on pouvais bien voir la séparation du html et de la syntax Smarty. J&#8217;ai appris Smarty, car j&#8217;utilisais le CMS XOOPS. Un système de portail évoluer qui existant sous PHP4. J&#8217;ai après PHP avec ce portail. Bien évidemment, ce portail utilisait Smarty comme engin de template. Cela m&#8217;aidait beaucoup dans le développement de nouveau thème pour ce CMS. Enfin, c&#8217;est ce que je croyais!</p>
<p>Mais regardons un peu cette syntaxe.<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #000088;">$foo</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<p>Ce n&#8217;est pas vraiment plus compliquer à utiliser et à maintenir que :</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$foo</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p></code></p>
<p>Bon ok. 3 caractères de plus. Mais comparer à toute la compilation qu&#8217;il va faire pour traiter <em>{$foo}</em>, c&#8217;est pas sa qui devrais vous faire reculer.</p>
<p>Et Smarty demontre qu&#8217;il n&#8217;est pas facile a maintenir en comparaisons :<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?=</span> foo <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p></code></p>
<p>Va afficher &laquo;&nbsp;foo&nbsp;&raquo;, vous donnant un indice que vous vouliez imprimer une variable, mais qu&#8217;il vous manque un signe de $ et puis</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>foo<span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<p>Qui va afficher&#8230; rien! Vous laissant complètement dans ignorance que vous avez oublié le signe $.</p>
<p>Et quand vous assignez une variables :<br />
<code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>assign <span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">=</span>”foo” value<span style="color: #339933;">=</span>”bar”<span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<p>c&#8217;est certainement plus facile a lire et plus intuitif que </p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> ‘bar’<span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p></code></p>
<p>Bien sûr ce ne sont que des exemples très basiques. Le vrai test de syntaxe entre PHP et Smarty c&#8217;est avec une approche plus complexe par exemple :</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>capture assign<span style="color: #339933;">=</span>”foo”<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>my_helper var1<span style="color: #339933;">=</span>”bar” var2<span style="color: #339933;">=</span>”qux”<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span><span style="color: #339933;">/</span>capture<span style="color: #009900;">&#125;</span></pre></div></div>

<p></code></p>
<p>qui est un peu trop bizarre pour les nouveaux utilisateurs comparés a quelque chose comme dans une application MVC :</p>
<p><code></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">myHelper</span><span style="color: #009900;">&#40;</span>‘bar’<span style="color: #339933;">,</span> ‘qux’<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p></code></p>
<p>Qui va être beaucoup plus intuitif et facile a comprendre.</p>
<h4>&laquo;&nbsp;Variable Modifiers&nbsp;&raquo;</h4>
<blockquote><p>The content of assigned variables can easily be adjusted at display-time with modifiers, such as displaying in all upper-case, html-escaped, formatting dates, truncating text blocks, adding spaces between characters, etc. Again, this is accomplished with no intervention from the programmer.</p></blockquote>
<p>L&#8217;idée des &laquo;&nbsp;variable modifiers&nbsp;&raquo; est d&#8217;aider le monteur HTML a ne pas avoir a recourir au programmeur php pour faire ses templates. Smarty vient avec 22 de ces modifiés, mais le programmeur devra en créer plusieurs autres pour atteindre cet objectif. Et il y aura toujours de nouvelle demande, encore et encore, et au final, vous activerez <em>{php}</em> car ce sera moins compliqué. </p>
<h4>Fonction de template, Filtre, Plugins et Add-ons</h4>
<blockquote><p>
    Many functions are available to the template designer to handle tasks such as generating HTML code segments (dropdowns, tables, pop-ups, etc.), displaying content from other templates in-line, looping over arrays of content, formatting text for e-mail output, cycling though colors, etc.</p>
<p>    The programmer has complete control of template output and compiled template content with pre-filters, post-filters and output-filters.</p>
<p>    Almost every aspect of Smarty is controlled through the use of plugins. They are generally as easy as dropping them into the plugin directory and then mentioning them in the template or using them in the application code. Many user-community contributions are also available. (See the plugins section of the forum and wiki.)</p>
<p>    Many user-community contributed Add-ons are available such as Pagination, Form Validation, Drop Down Menus, Calander Date Pickers, etc. These tools help speed up the development cycle, there is no need to re-invent the wheel or debug code that is already stable and ready for deployment. (see the Add-ons section of the forum and wiki.)
</p></blockquote>
<p>Smarty a plusieurs noms pour ses aides de vue. Les aides de vue sont très pratiques, mais il existe des aides de vue bien meilleure que celle de Smarty avec un plus grand lot de fonctionnalité. La vérité c&#8217;est que les aides de vue par défaut de Smarty font le minimum pour aider le programmeur et plusieurs de ces addons contienne du code qui non pas leur place dans un engin de template. C&#8217;est le résultat d&#8217;une mauvaise séparation des logiques.</p>
<h4>Ressources</h4>
<blockquote><p>Templates can be pulled from any number of sources by creating new resource handlers, then using them in the templates.</p></blockquote>
<h4>Mode de debug</h4>
<p>Smarty dit ceci à propos de sont mode de débogage :</p>
<blockquote><p>Smarty comes with a built-in debugging console so the template designer can see all of the assigned variables and the programmer can investigate template rendering speeds.</p></blockquote>
<p>C&#8217;est de loin une interface à la Firebug. C&#8217;est simplement un dump de variable de 200 lignes et plus très difficile à suivre.</p>
<h4>Compilation</h4>
<blockquote><p>Smarty compiles templates into PHP code behind the scenes, eliminating run-time parsing of templates.</p></blockquote>
<p>Smarty va compiler ses templates en code PHP. Ça devrait vous donner une bonne piste! Vraiment!</p>
<h4>Performence</h4>
<blockquote><p>Smarty performs extremely well, despite its vast feature set. Most of Smarty’s capabilities lie in plugins that are loaded on-demand. Smarty comes with numerous presentation tools, minimizing your application code and resulting in quicker, less error-prone application development/deployment. Smarty templates get compiled to PHP files internally (once), eliminating costly template file scans and leveraging the speed of PHP op-code accelerators.</p></blockquote>
<p>Rien en PHP ne pourrait être plus rapide que PHP lui même! PHP est déjà lui même un engin de template à la base.</p>
<h3>Conclusion</h3>
<p>Pour conclure, si Smarty n&#8217;est pas le bon outil pour faire la job, quel autre outil puis-je utiliser? Il y a plusieurs alternatives qui font exactement ce que Smarty fait, mais encore mieux! Mon framework favori pour le moment est <a href="http://framework.zend.com/">Zend Framework</a>. Il supporte plusieurs types de cache, de configuration, de filtre, d&#8217;aide de vue et plus encore. Il est écrit en PHP5 et utilise PHP5 tout simplement pour ses templates. Il y aussi d&#8217;autre alternative que vous pourrez facilement trouver en faisant une petite recherche sur Google.</p>
<p><strong>Mais s&#8217;il vous plait&#8230; n&#8217;utiliserplus SMARTY!</strong></p>
<img src="http://www.m4d3l-network.com/?ak_action=api_record_view&id=304&type=feed" alt="" /><p>Related posts:<ol>
<li><a href='http://www.m4d3l-network.com/developpement/php/joomla/howto-setup-smarty3-in-joomla/' rel='bookmark' title='Howto setup Smarty3 Engine in Joomla!'>Howto setup Smarty3 Engine in Joomla!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.m4d3l-network.com/developpement/php/dites-non-a-smarty/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>

