<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Geekographie Ma&#239;eulesque</title>
	<link>https://geekographie.maieul.net/</link>
	<description>Ce site est consacr&#233; &#224; quelques unes des mes geekeries. J'y donne des conseils, des r&#233;flexions, sur les logiciels et les langages que je connais ou que j'apprends.
J'y parle notamment de l'usage de LaTeX en sciences humaines et sociales, en particulier pour la gestion de la bibliographie.
Le contenu peut &#234;tre sous la forme d'articles d&#233;taill&#233;s ou de simples notes.
L'ensemble du contenu est, sauf pr&#233;cision contraire, sous licence Cr&#233;ative Commons Paternit&#233;-Partage des Conditions Initiales &#224; l'identique France.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://geekographie.maieul.net/spip.php?id_rubrique=10&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Pourquoi ne pas mettre de PHP dans un squelette, sauf exception</title>
		<link>https://geekographie.maieul.net/13</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/13</guid>
		<dc:date>2010-12-10T00:16:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Je tombe r&#233;guli&#232;rement sur des squelettes, faits par des gens venant du monde &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;, qui sont pleins de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;. Voici quelques bonnes raisons de ne pas faire cela. Et puis aussi des pistes sur comment s'en passer. Raison 1&#160;: On ne profite pas du cache de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; dispose d'un syst&#232;me de cache, qui &#233;vite de refaire trop souvent des calculs, et donc acc&#233;l&#232;re les pages. Les parties &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; d'un squelette &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; ne sont pas soumis &#224; ce syst&#232;me, du coup on perd un des avantages de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Raison 2&#160;:&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Squelette" rel="directory"&gt;Squelette&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Je tombe r&#233;guli&#232;rement sur des squelettes, faits par des gens venant du monde &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;, qui sont pleins de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Voici quelques bonnes raisons de ne pas faire cela. Et puis aussi des pistes sur comment s'en passer.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Raison 1&#160;: On ne profite pas du cache de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; dispose d'un syst&#232;me de cache, qui &#233;vite de refaire trop souvent des calculs, et donc acc&#233;l&#232;re les pages. Les parties &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; d'un squelette &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; ne sont pas soumis &#224; ce syst&#232;me, du coup on perd un des avantages de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Raison 2&#160;: C'est illisible&lt;/h2&gt;
&lt;p&gt;Bien souvent, pas toujours, ces &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;squelettes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; sont illisibles, car le code &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; n'est pas bien structur&#233;. Ce n'est pas toujours le cas, mais tr&#232;s souvent. Je pense que les personnes qui utilisent cela &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;bidouillent&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; car ils n'arrivent pas &#224; faire ce qu'ils veulent en &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Bien s&#251;r, on pourrait imaginer un squelette &lt;span class=&#034;caps&#034;&gt;SPIPHP&lt;/span&gt; lisible, mais je n'en ai jamais vu.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Raison 3&#160;: Ce n'est pas optimis&#233;&lt;/h2&gt;
&lt;p&gt;Il m'est arriv&#233; de voir des requ&#234;tes &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt; directement dans un squelette &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Alors m&#234;me que &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; est un m&#233;ta-langage de requ&#234;tes &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;, qui les optimise automatiquement. J'ai vu par exemple des appels via &lt;code&gt;mysql_query()&lt;/code&gt; &#224; des champs qui ne seront jamais utilis&#233;s dans la page. &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; lui n'appel que les champs r&#233;ellement utiles (ceux qu'on ins&#232;re dans la page avec #&lt;span class=&#034;caps&#034;&gt;CHAMP&lt;/span&gt;).&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Raison 4&#160;: On ne profite pas de la souplesse des boucles de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &lt;/h2&gt;
&lt;p&gt;Les boucles de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; poss&#232;dent des ressources insoup&#231;onn&#233;es&#160;: r&#233;cursivit&#233; des requ&#234;tes, requ&#234;tes imbriqu&#233;es. Certe il est possible de faire cela en &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt; / &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;, mais pourquoi r&#233;-invent&#233; la roue, d'autant plus que &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, la lecture sera plus claire.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Raison 5&#160;: On ne profite pas de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Et oui, &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; c'est pr&#233;vu pour pouvoir faire directement les requ&#234;tes &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt; dans la &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;trame&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, dans le &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;moule&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de l'affichage souhait&#233;. Si on en profite pas, alors pourquoi prendre &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et pas un autre &lt;span class=&#034;caps&#034;&gt;CMS&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Une exception&#160;: pour g&#233;rer certains &#233;l&#232;ments de session&lt;/h2&gt;
&lt;p&gt;Toute r&#232;gle &#224; ses exceptions. C'est le cas de la pr&#233;sente r&#232;gle. On lira un article qui explique &lt;a href=&#034;http://contrib.spip.net/du-php-dans-le-squelette-a-la-place-de-SESSION&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;pourquoi, pour g&#233;rer les sessions, mettre du &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; dans certains squelettes peut-&#234;tre une solution&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Comment faire&lt;/h2&gt;
&lt;p&gt;Ceci n'est pas exhaustif, mais je tenterai de donner quelques indications pour les gens venant du monde &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; pour se &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;convertir&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; en &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une requ&#234;te &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt; = Une Boucle &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Pour ceux qui ont besoin d'une explication formaliste, grammaticale de ce qu'est une boucle &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: &lt;a href=&#034;http://programmer.spip.org/-Les-boucles-&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/-Les-boucles-&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Pour modifier le r&#233;sultat d'une balise &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; = d'un champ &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;&#160;: un filtre = une fonction &#224; d&#233;finir dans mes_fonctions.php. D&#233;finition formelle d'une balise&#160;: &lt;a href=&#034;http://programmer.spip.org/-Les-balises-&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/-Les-balises-&lt;/a&gt;, d&#233;finition formelle d'un filtre&#160;: &lt;a href=&#034;http://programmer.spip.org/-Les-filtres-de-balises-&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/-Les-filtres-de-balises-&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Une variable de compteur&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Si c'est pour compter les r&#233;sultats d'une requ&#234;te &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;&#160;: &lt;code&gt;#COMPTEUR_BOUCLE&lt;/code&gt;. Ex&#160;: &lt;code&gt;&lt;BOUCLE_a(ARTICLES)&gt;it&#233;ration #COMPTEUR_BOUCLE &lt;/BOUCLE_a&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Si la variable est plus compliqu&#233;e&#160;: &lt;code&gt;#SET{variable,valeur}&lt;/code&gt;, &lt;code&gt;#GET{variable}&lt;/code&gt; et les &lt;a href=&#034;http://www.spip.net/fr_article901.html#math&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;filtres math&#233;matiques&lt;/a&gt;&#160;: &lt;code&gt;|plus&lt;/code&gt;, &lt;code&gt;|mult&lt;/code&gt; etc. &lt;a href=&#034;http://www.spip.net/fr_article901.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://www.spip.net/fr_article901.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Une variable tout court&#160;: voir ci dessus.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Des tests conditionnels&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; filtres de comparaison et filtres de test&#160;: &lt;a href=&#034;http://programmer.spip.org/Filtres-de-comparaison&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/Filtres-de-comparaison&lt;/a&gt; &lt;a href=&#034;http://programmer.spip.org/Les-filtres-de-tests&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/Les-filtres-de-tests&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; Et pour conditionner en fonction du r&#233;sultat de la requ&#234;te &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;&#160;: la syntaxe compl&#232;te des boucles&#160;: &lt;a href=&#034;http://programmer.spip.org/Syntaxe-complete-des-boucles&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://programmer.spip.org/Syntaxe-complete-des-boucles&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Des tableaux&#160;: la balise &lt;code&gt;#ARRAY&lt;/code&gt;&#160;: &lt;a href=&#034;http://www.spip.net/fr_article4009.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://www.spip.net/fr_article4009.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voil&#224;, avec &#231;a vous avez les bases pour ne plus mettre de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; dans vos squelettes (bien s&#251;r, il faut lire les liens&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Ceci n'est pas un tutoriel).&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Si d'autres SPIPeurs voient des bonnes raisons, ne pas h&#233;siter &#224; les signaler.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
