<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: PEJO Framework : moteur de templates (classe TemplateEngine)</title>
	<atom:link href="http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/</link>
	<description>Symfony, Zend Framework, JQuery, WordPress...</description>
	<lastBuildDate>Tue, 10 Jan 2012 14:27:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: zzarbi</title>
		<link>http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/#comment-183</link>
		<dc:creator>zzarbi</dc:creator>
		<pubDate>Mon, 17 Aug 2009 05:02:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.jonathan-petitcolas.com/?p=1084#comment-183</guid>
		<description>Ou comment mal réinventer la roue... 2 grands inconvénients :

&lt;ul&gt;
&lt;li&gt;apprendre l&#039;utilisation du template coté &quot;serveur&quot; (implémentation du script)&lt;/li&gt;
&lt;li&gt;apprendre l&#039;utilisation du template coté &quot;vue&quot; (code et tag HTML)&lt;/li&gt;
&lt;/ul&gt;

Je signale que PHP est historiquement un langage de template pour PERL. Il suffit de faire une classe qui &lt;em&gt;&quot;gère&quot;&lt;/em&gt; la séparation des données, et utiliser un fichier &lt;em&gt;.phtml&lt;/em&gt; pour le template.

Edit : la suite du message n&#039;est pas passé (protection contre les balises PHP sans aucun doute). Reposte les avec les &lt;em&gt;htmlentities&lt;/em&gt;, et je les rajouterai à ce commentaire. ;)</description>
		<content:encoded><![CDATA[<p>Ou comment mal réinventer la roue... 2 grands inconvénients :</p>
<ul>
<li>apprendre l'utilisation du template coté "serveur" (implémentation du script)</li>
<li>apprendre l'utilisation du template coté "vue" (code et tag HTML)</li>
</ul>
<p>Je signale que PHP est historiquement un langage de template pour PERL. Il suffit de faire une classe qui <em>"gère"</em> la séparation des données, et utiliser un fichier <em>.phtml</em> pour le template.</p>
<p>Edit : la suite du message n'est pas passé (protection contre les balises PHP sans aucun doute). Reposte les avec les <em>htmlentities</em>, et je les rajouterai à ce commentaire. ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Petitcolas</title>
		<link>http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/#comment-182</link>
		<dc:creator>Jonathan Petitcolas</dc:creator>
		<pubDate>Sun, 28 Jun 2009 11:15:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.jonathan-petitcolas.com/?p=1084#comment-182</guid>
		<description>Désolé du retard de ces réponses, mais le temps me manque cruellement pour blogger comme je le souhaiterais. :)

@Arbo :

Je ne crois pas (sauf erreur de ma part) que ce moteur de templates, dans sa version actuelle, puisse prendre de tels arguments. En effet, si on considère le code suivant :

[php]$array = array( &#039;key&#039; =&gt; &#039;value&#039; );
$name = &#039;array[&quot;key&quot;]&#039;;
echo $name.&#039;&lt;br /&gt;&#039;;
echo $$name.&#039;&lt;br /&gt;&#039;;
echo $array[&quot;key&quot;];[/php]

Cela affichera :

&lt;pre&gt;array[&quot;key&quot;]

value&lt;/pre&gt;

Par conséquent, l&#039;assignation avec le double dollar ne fonctionne pas pour les objets non scalaires (ce qui se confirme après un test avec ce moteur). Il faudrait donc éventuellement modifier la gestion des variables, afin de permettre de tels traitements. Cela pourrait être intéressant, si on ne perd pas trop en performances.

Cependant, sur ce dernier point, la perte pourrait être compensée par l&#039;utilisation mémoire. A voir donc... :)

@Konal :

Sur ce point, je ne suis pas tout à fait d&#039;accord avec toi. A mon sens, la couche &lt;em&gt;View&lt;/em&gt; ne doit &lt;em&gt;que&lt;/em&gt; gérer l&#039;affichage des données. Or, le parcours d&#039;un tableau d&#039;objets nous fait déjà rentrer à l&#039;intérieur de la couche métier. D&#039;autant plus si on utilise les prédicats.

Par exemple, parcourir un tableau d&#039;objets afin de n&#039;afficher l&#039;objet que s&#039;il remplit certaines conditions ne fait pas partie des affectations de la couche vue. Tout n&#039;est que question de représentation du MVC, mais cela s&#039;éloigne de ma vision de ce modèle. ;)

Qui plus est, le Web est tout de même légèrement différent du monde applicatif. Et, lors de la collaboration de deux équipes (chose que je fais généralement : une équipe s&#039;occupe de l&#039;intégration tandis que l&#039;autre s&#039;occupe de la partie métier), il est bien plus simple pour les infographistes, qui bien souvent sortent d&#039;écoles artistiques sans jamais avoir vu de &lt;em&gt;if&lt;/em&gt; de leur vie - sauf peut-être dans des forêts ? :p - de se contenter d&#039;utiliser des variables déjà toute prêtes, sans avoir à s&#039;embrouiller avec des boucles ou des structures d&#039;itérations, qui leur semblent bien bizarres et compliquées.</description>
		<content:encoded><![CDATA[<p>Désolé du retard de ces réponses, mais le temps me manque cruellement pour blogger comme je le souhaiterais. :)</p>
<p>@Arbo :</p>
<p>Je ne crois pas (sauf erreur de ma part) que ce moteur de templates, dans sa version actuelle, puisse prendre de tels arguments. En effet, si on considère le code suivant :</p>
<pre class="brush: php; title: ;">$array = array( 'key' =&amp;gt; 'value' );
$name = 'array[&amp;quot;key&amp;quot;]';
echo $name.'&amp;lt;br /&amp;gt;';
echo $$name.'&amp;lt;br /&amp;gt;';
echo $array[&amp;quot;key&amp;quot;];</pre>
<p>Cela affichera :</p>
<pre>array["key"]

value</pre>
<p>Par conséquent, l'assignation avec le double dollar ne fonctionne pas pour les objets non scalaires (ce qui se confirme après un test avec ce moteur). Il faudrait donc éventuellement modifier la gestion des variables, afin de permettre de tels traitements. Cela pourrait être intéressant, si on ne perd pas trop en performances.</p>
<p>Cependant, sur ce dernier point, la perte pourrait être compensée par l'utilisation mémoire. A voir donc... :)</p>
<p>@Konal :</p>
<p>Sur ce point, je ne suis pas tout à fait d'accord avec toi. A mon sens, la couche <em>View</em> ne doit <em>que</em> gérer l'affichage des données. Or, le parcours d'un tableau d'objets nous fait déjà rentrer à l'intérieur de la couche métier. D'autant plus si on utilise les prédicats.</p>
<p>Par exemple, parcourir un tableau d'objets afin de n'afficher l'objet que s'il remplit certaines conditions ne fait pas partie des affectations de la couche vue. Tout n'est que question de représentation du MVC, mais cela s'éloigne de ma vision de ce modèle. ;)</p>
<p>Qui plus est, le Web est tout de même légèrement différent du monde applicatif. Et, lors de la collaboration de deux équipes (chose que je fais généralement : une équipe s'occupe de l'intégration tandis que l'autre s'occupe de la partie métier), il est bien plus simple pour les infographistes, qui bien souvent sortent d'écoles artistiques sans jamais avoir vu de <em>if</em> de leur vie - sauf peut-être dans des forêts ? :p - de se contenter d'utiliser des variables déjà toute prêtes, sans avoir à s'embrouiller avec des boucles ou des structures d'itérations, qui leur semblent bien bizarres et compliquées.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Konal</title>
		<link>http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/#comment-181</link>
		<dc:creator>Konal</dc:creator>
		<pubDate>Fri, 26 Jun 2009 22:29:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.jonathan-petitcolas.com/?p=1084#comment-181</guid>
		<description>Honnêtement je n&#039;adhère pas du tout à l&#039;architecture de ce moteur de templates, pour la simple et bonne raison que ton template ne contrôle absolument pas la manière dont il affiche les données. Pourquoi ? L&#039;exemple le plus flagrant est le &lt;em&gt;foreach&lt;/em&gt; qui ne se trouve pas dans le template mais dans le code métier.

Comment gérerais-tu dans ton template un cas classique du type :

[php]if(!empty($book-&gt;auteur)) echo &#039;&lt;a href=&quot;#&quot; rel=&quot;nofollow&quot;&gt;&#039;.$book-&gt;title.&#039;&lt;/a&gt;&#039;;
else echo $book-&gt;title;[/php]

sans créer un sous-template supplémentaire ?

Pour moi un template doit pouvoir utiliser 3 opérations :
&lt;ul&gt;
&lt;li&gt;structures de contrôle,&lt;/li&gt;
&lt;li&gt;itérations&lt;/li&gt;
&lt;li&gt;et récupération de données encapsulées dans une collection, par exemple, via des méthodes dédiées dans le code behind.&lt;/li&gt;
&lt;/ul&gt;</description>
		<content:encoded><![CDATA[<p>Honnêtement je n'adhère pas du tout à l'architecture de ce moteur de templates, pour la simple et bonne raison que ton template ne contrôle absolument pas la manière dont il affiche les données. Pourquoi ? L'exemple le plus flagrant est le <em>foreach</em> qui ne se trouve pas dans le template mais dans le code métier.</p>
<p>Comment gérerais-tu dans ton template un cas classique du type :</p>
<pre class="brush: php; title: ;">if(!empty($book-&amp;gt;auteur)) echo '&amp;lt;a href=&amp;quot;#&amp;quot; rel=&amp;quot;nofollow&amp;quot;&amp;gt;'.$book-&amp;gt;title.'&amp;lt;/a&amp;gt;';
else echo $book-&amp;gt;title;</pre>
<p>sans créer un sous-template supplémentaire ?</p>
<p>Pour moi un template doit pouvoir utiliser 3 opérations :</p>
<ul>
<li>structures de contrôle,</li>
<li>itérations</li>
<li>et récupération de données encapsulées dans une collection, par exemple, via des méthodes dédiées dans le code behind.</li>
</ul>
]]></content:encoded>
	</item>
	<item>
		<title>By: Arbo</title>
		<link>http://www.jonathan-petitcolas.com/pejo-framework-moteur-templates-classe-templateengine/#comment-180</link>
		<dc:creator>Arbo</dc:creator>
		<pubDate>Sat, 13 Jun 2009 14:21:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.jonathan-petitcolas.com/?p=1084#comment-180</guid>
		<description>Pourquoi :

&lt;em&gt;&quot;Si nous insérons l’élément du tableau directement dans le HTML, cela nous fera perdre la possibilité d’effectuer une mise en forme sur l’élément avant de l’afficher. Par exemple, si notre tableau contient un élément de type timestamp (à savoir le nombre de secondes écoulées depuis le 1er janvier 1970)&quot;&lt;/em&gt;

Alors que

[php]foreach($datas as $livre)
{
     $livre[&#039;date&#039;] = date(&#039;d/m/y h:i&#039;, $livre[&#039;date&#039;];
     $livres .= $tpl-&gt;GetHTMLCode(&#039;index.html&#039;, &#039;livre&#039;);
}[/php]

Couplé à :

[xml]&lt;!---===== tpl_name = livre =====--&gt;
${titre[&#039;date&#039;]}
${titre[&#039;auteur&#039;]}[/xml]

marche bien.

On gagne en lisibilité, en assignation de variable et mémoire, non ?</description>
		<content:encoded><![CDATA[<p>Pourquoi :</p>
<p><em>"Si nous insérons l’élément du tableau directement dans le HTML, cela nous fera perdre la possibilité d’effectuer une mise en forme sur l’élément avant de l’afficher. Par exemple, si notre tableau contient un élément de type timestamp (à savoir le nombre de secondes écoulées depuis le 1er janvier 1970)"</em></p>
<p>Alors que</p>
<pre class="brush: php; title: ;">foreach($datas as $livre)
{
     $livre['date'] = date('d/m/y h:i', $livre['date'];
     $livres .= $tpl-&amp;gt;GetHTMLCode('index.html', 'livre');
}</pre>
<p>Couplé à :</p>
<pre class="brush: xml; title: ;">&amp;lt;!---===== tpl_name = livre =====--&amp;gt;
${titre['date']}
${titre['auteur']}</pre>
<p>marche bien.</p>
<p>On gagne en lisibilité, en assignation de variable et mémoire, non ?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

