<?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="http://geekographie.maieul.net/spip.php?id_rubrique=6&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Jouons un peu avec |image_masque</title>
		<link>http://geekographie.maieul.net/98</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/98</guid>
		<dc:date>2012-08-13T18:04:23Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Les lecteurs r&#233;guliers de ce site auront remarqu&#233;, outre le changement de style, que d&#233;sormais les logos des articles poss&#232;dent une petite images dans le coin inf&#233;rieur droit. L'image principale correspond au logiciel dont il est question en priorit&#233;&#160;: par exemple &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. L'image secondaire correspond &#224; la rubrique principale de l'article. Ainsi pour notre article, il s'agit de la rubrique Images. Enfin, dans certains cas, une image est mise dans le coin sup&#233;rieur gauche&#160;: il s'agit de&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les lecteurs r&#233;guliers de ce site auront remarqu&#233;, outre le &lt;a href=&#034;http://contrib.spip.net/Wordpress-2010&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;changement de style&lt;/a&gt;, que d&#233;sormais les logos des articles poss&#232;dent une petite images dans le coin inf&#233;rieur droit.&lt;/p&gt;
&lt;p&gt;L'image principale correspond au logiciel dont il est question en priorit&#233;&#160;: par exemple &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. L'image secondaire correspond &#224; la rubrique principale de l'article. Ainsi pour notre article, il s'agit de la rubrique &lt;a href='http://geekographie.maieul.net/Images' class=&#034;spip_in&#034;&gt;Images&lt;/a&gt;. Enfin, dans certains cas, une image est mise dans le coin sup&#233;rieur gauche&#160;: il s'agit de l'image correspondante au logiciel utilis&#233; de mani&#232;re secondaire dans l'article. Par exemple l'article &#034;&lt;a href='http://geekographie.maieul.net/78' class=&#034;spip_in&#034;&gt;G&#233;rer beaucoup de sites &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; en local sous MacOsX&lt;/a&gt;&#034; parle d'abord du logiciel &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, et ensuite du logiciel &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt;. On a donc le logo de &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt; en petit dans le coin sup&#233;rieur gauche.&lt;/p&gt;
&lt;p&gt;La composition de ces images est effectu&#233;e automatiquement par &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &#224; partir des logos des diff&#233;rentes rubriques, gr&#226;ce au filtre &lt;code&gt;|image_masque&lt;/code&gt;. Cependant ce filtre manque de documentation, et j'ai du fouiller le code pour le comprendre. En attendant une documentation plus compl&#232;te, voici d&#233;j&#224; un tutoriel expliquant comment j'ai proc&#233;d&#233; dans le cas pr&#233;sent.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Il n'y a pas de logo sur les articles.&lt;/li&gt;&lt;li&gt; Les logos d'articles sont calcul&#233;s &#224; l'aide de l'arborescence de l'article&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le logo principal correspond au logo du secteur.&lt;/li&gt;&lt;li&gt; Le logo en bas &#224; droite correspond au logo de la rubrique&lt;/li&gt;&lt;li&gt; Le logo en haut &#224; gauche correspond au logo du premier secteur secondaire configur&#233; avec le plugin &lt;a href=&#034;http://contrib.spip.net/Polyhierarchie&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;polyhierarchie&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Comme il s'agit d'un logo, je n'ai pas jug&#233; utile d'ajouter une balise &lt;code&gt;alt&lt;/code&gt; autre que vide.&lt;/li&gt;&lt;li&gt; Nous allons faire un squelette &lt;code&gt;inclure/logo-rubriques&lt;/code&gt; que nous appellerons via la balise &lt;a href='http://geekographie.maieul.net/81' class=&#034;spip_in&#034;&gt;&lt;code&gt;#INCLURE&lt;/code&gt;&lt;/a&gt;. Ce squelette calculera le logo, pour l'afficher, sans le r&#233;duire&lt;/li&gt;&lt;li&gt; Le logo sera r&#233;duit au cas par cas en filtrant &lt;code&gt;#INCLURE&lt;/code&gt; gr&#226;ce &#224; &lt;code&gt;image_reduire&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Mise en &#339;uvre&lt;/h2&gt;
&lt;p&gt;Dans notre boucle &lt;code&gt;ARTICLES&lt;/code&gt;, &#224; l'endroit o&#249; nous souhaitons afficher notre logo, nous mettons&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#INCLURE{fond=inclure/logo-rubriques,id_article}|image_reduire{xxx})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;en rempla&#231;ant &lt;code&gt;xxx&lt;/code&gt; par la taille souhait&#233; du logo au final.&lt;/p&gt;
&lt;p&gt;Maintenant, il nous reste &#224; cr&#233;er notre squelette &lt;code&gt;inclure/logo-rubriques.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans ce squelette, nous proc&#233;derons ainsi&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Extraction des diff&#233;rents logos de rubriques, et stockage dans des variables.&lt;/li&gt;&lt;li&gt; Calcul de la taille des logos secondaires.&lt;/li&gt;&lt;li&gt; Fabrication de l'image finale.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Il ne faut pas oublier de mettre une boucle englobante dans le squelette&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_article(ARTICLES){id_article}&gt; &lt;/BOUCLE_article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout le code qui va suivre devra se mettre dans cette rubrique.
Donc, premi&#232;re &#233;tape&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_rubrique(RUBRIQUES){id_rubrique}&gt; #SET{rubrique,#LOGO_RUBRIQUE} &lt;/BOUCLE_rubrique&gt; &lt;BOUCLE_secteur(RUBRIQUES){id_secteur}{racine}&gt; #SET{secteur,#LOGO_RUBRIQUE} &lt;/BOUCLE_secteur&gt; &lt;BOUCLE_autre_secteur(RUBRIQUES){parents_indirects}&gt; &lt;BOUCLE_racine(RUBRIQUES){id_rubrique}{racine}&gt; #SET{autre_secteur,#LOGO_RUBRIQUE} &lt;/BOUCLE_racine&gt; &lt;/BOUCLE_autre_secteur&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Commentaires&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L. 1-3&#160;: On s&#233;lectionne le logo de la rubrique de l'article (celui qui sera affich&#233; en bas &#224; droite) et on le stocke dans &lt;code&gt;rubrique&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; L. 5-7&#160;: On s&#233;lectionne le logo du secteur de l'article (celui qui sera affich&#233; en gros) et on le stocke dans &lt;code&gt;secteur&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; L. 9-13&#160;: On s&#233;lectionne le logo du second secteur de l'article (celui qui sera affich&#233; en haut &#224; gauche), et on le stocke dans &lt;code&gt;autre_secteur&lt;/code&gt;. L'imbrication des boucles s'expliques par le fait qu'il n'est pas possible de combiner &lt;code&gt;{racine}&lt;/code&gt; et &lt;code&gt;parents_indirects&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Maintenant, nous sommes pr&#234;ts pour la seconde &#233;tape&#160;: calculer les hauteurs et largeurs maximales de nos logos secondaires. En ce qui concerne la hauteur, j'ai opt&#233; pour 1/3 de l'image principale&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; en ce qui concerne la largeur, j'ai opt&#233; pour 1/2.&lt;/p&gt;
&lt;p&gt;On utilise pour cela les filtres &lt;a href=&#034;http://www.spip.net/fr_article4291.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|hauteur&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#034;http://www.spip.net/fr_article4296.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|largeur&lt;/code&gt;&lt;/a&gt; pour d&#233;terminer la hauteur et la largeur de l'image principale, &lt;a href=&#034;http://www.spip.net/fr_article4279.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|div&lt;/code&gt;&lt;/a&gt; pour proc&#233;der &#224; une division, et &lt;a href=&#034;http://ch.php.net/manual/fr/function.floor.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|floor&lt;/code&gt;&lt;/a&gt; pour arrondir &#224; l'entier inf&#233;rieur.&lt;/p&gt;
&lt;p&gt;Cela donne donc&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;#SET{largeur,#GET{secteur}|largeur|div{2}|round}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il ne nous reste plus qu'&#224; fabrique nos images finales. Pour ce faire nous utiliserons les filtres suivants&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;http://www.spip.net/fr_article4285.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|==&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#034;http://www.spip.net/fr_article4616.html#non&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|non&lt;/code&gt;&lt;/a&gt; et &lt;a href=&#034;http://www.spip.net/fr_article4615.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|oui&lt;/code&gt;&lt;/a&gt;, pour v&#233;rifier la pr&#233;sence des diff&#233;rents logos.&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://www.spip.net/fr_article901.html#image_reduire&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|image_reduire&lt;/code&gt;&lt;/a&gt; qu'on ne pr&#233;sente plus.&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://www.spip.net/fr_article3327.html#image_masque&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;|image_masque&lt;/code&gt;&lt;/a&gt;, qui peut recevoir beaucoup de param&#232;tres en troisi&#232;me argument, que la documentation ne d&#233;taille pas. Ces param&#232;tres sont &#224; s&#233;parer par des virgules. Dans le cas pr&#233;sent, ceux qui nous int&#233;ressent sont&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;mode=normal&lt;/code&gt; pour que l'image du dessus masque totalement l'image du dessous.&lt;/li&gt;&lt;li&gt; &lt;code&gt;text-align&lt;/code&gt; pour le positionnement horizontal.&lt;/li&gt;&lt;li&gt; &lt;code&gt;vertical-align&lt;/code&gt; pour le positionnement vertical.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Au niveau des possibilit&#233;s de combinaison, nous en avons quatre possibilit&#233;s&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'article ne se trouve pas dans une rubrique &#224; la racine. Dans ce cas il nous faut tester s'il dispose d'un secteur secondaire&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; S'il ne dispose pas de secteur secondaire, le logo final correspond au logo du secteur sur lequel on ajoute en bas &#224; droite le logo de la rubrique (cas&#160;1).&lt;/li&gt;&lt;li&gt; S'il dispose d'un secteur secondaire, le logo final correspond au logo du secteur principal sur lequel on superpose (cas&#160;2)&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le logo de la rubrique en bas &#224; droite.&lt;/li&gt;&lt;li&gt; Le logo du secteur secondaire en haut &#224; gauche.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; L'article se trouve dans une rubrique &#224; la racine. Dans ce cas, nous testons s'il dispose d'un secteur secondaire&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; S'il n'en dispose pas, alors le logo correspond tout simplement au logo du secteur (cas&#160;3).&lt;/li&gt;&lt;li&gt; S'il en dispose, alors le logo correspond au logo du secteur, sur lequel on superpose le logo du secteur secondaire (cas&#160;4).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Au final, cela donne&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#GET{rubrique}|=={#GET{secteur}}|non) [(#GET{autre_secteur}|non) [(#REM)&lt;!--cas 1--&gt;] [(#GET{secteur}|image_masque{ #GET{rubrique}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=right, vertical-align=bottom})] ] [(#GET{autre_secteur}|oui) [(#REM)&lt;!--cas 2--&gt;] [(#GET{secteur}|image_masque{ #GET{rubrique}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=right, vertical-align=bottom }|image_masque{ #GET{autre_secteur}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=left, vertical-align=top})] ] ] [(#GET{rubrique}|=={#GET{secteur}}|oui) [(#GET{autre_secteur}|non) [(#REM)&lt;!--cas 3--&gt;] #GET{secteur} ] [(#GET{autre_secteur}|oui) [(#REM)&lt;!--cas 4--&gt;] [(#GET{secteur}|image_masque{ #GET{autre_secteur}|image_reduire{#GET{largeur}, #GET{hauteur}}, mode=normal, text-align=left, vertical-align=top})] ] ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et donc notre squelette &lt;code&gt;inclure/logos-rubriques&lt;/code&gt; final est&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_article(ARTICLES){id_article}&gt; [(#REM)&lt;!-- extraire les logos --&gt;] &lt;BOUCLE_rubrique(RUBRIQUES){id_rubrique}&gt; #SET{rubrique,#LOGO_RUBRIQUE} &lt;/BOUCLE_rubrique&gt; &lt;BOUCLE_secteur(RUBRIQUES){id_secteur}{racine}&gt; #SET{secteur,#LOGO_RUBRIQUE} &lt;/BOUCLE_secteur&gt; &lt;BOUCLE_autre_secteur(RUBRIQUES){parents_indirects}&gt; &lt;BOUCLE_racine(RUBRIQUES){id_rubrique}{racine}&gt; #SET{autre_secteur,#LOGO_RUBRIQUE} &lt;/BOUCLE_racine&gt; &lt;/BOUCLE_autre_secteur&gt; [(#REM)&lt;!-- calcul des dimensions --&gt;] #SET{hauteur,#GET{secteur}|hauteur|div{3}|round} #SET{largeur,#GET{secteur}|largeur|div{2}|round} [(#REM)&lt;!-- fabrication des images r&#233;duites--&gt;] [(#REM)&lt;!-- Fabrication de l'image finale--&gt;] [(#GET{rubrique}|=={#GET{secteur}}|non) [(#GET{autre_secteur}|non) [(#REM)&lt;!--cas 1--&gt;] [(#GET{secteur}|image_masque{ #GET{rubrique}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=right, vertical-align=bottom})] ] [(#GET{autre_secteur}|oui) [(#REM)&lt;!--cas 2--&gt;] [(#GET{secteur}|image_masque{ #GET{rubrique}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=right, vertical-align=bottom }|image_masque{ #GET{autre_secteur}|image_reduire{#GET{largeur},#GET{hauteur}}, mode=normal, text-align=left, vertical-align=top})] ] ] [(#GET{rubrique}|=={#GET{secteur}}|oui) [(#GET{autre_secteur}|non) [(#REM)&lt;!--cas 3--&gt;] #GET{secteur} ] [(#GET{autre_secteur}|oui) [(#REM)&lt;!--cas 4--&gt;] [(#GET{secteur}|image_masque{ #GET{autre_secteur}|image_reduire{#GET{largeur}, #GET{hauteur}}, mode=normal, text-align=left, vertical-align=top})] ] ] &lt;/BOUCLE_article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>G&#233;rer le statut des articles directement depuis le site public sous SPIP 3</title>
		<link>http://geekographie.maieul.net/97</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/97</guid>
		<dc:date>2012-08-12T19:43:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;J'avais publi&#233; il y a plus d'un an et demi un article sur la mani&#232;re de g&#233;rer directement le statut des articles depuis le site public. Voici son adaptation pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3. Comme vous pourrez le voir, le code est beaucoup plus simple. Il suffit en effet de mettre dans son squelette, dans la boucle (&lt;span class=&#034;caps&#034;&gt;ARTICLES&lt;/span&gt;)&#160;: [(#AUTORISERpublier,article,#ID_ARTICLE|oui) #FORMULAIRE_INSTITUER_OBJETarticle,#ID_ARTICLE,#&lt;span class=&#034;caps&#034;&gt;SELF&lt;/span&gt;|parametre_urlvar_mode,preview ] L. 1 et 3&#160;: On v&#233;rifie que la personne connect&#233;e&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;J'avais publi&#233; il y a plus d'un an et demi un article sur la mani&#232;re de &lt;a href='http://geekographie.maieul.net/10' class=&#034;spip_in&#034;&gt;g&#233;rer directement le statut des articles depuis le site public&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici son adaptation pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3. Comme vous pourrez le voir, le code est beaucoup plus simple.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il suffit en effet de mettre dans son squelette, dans la boucle &lt;code&gt;(ARTICLES)&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#AUTORISER{publier,article,#ID_ARTICLE}|oui)
#FORMULAIRE_INSTITUER_OBJET{article,#ID_ARTICLE,#SELF|parametre_url{var_mode,preview}}
]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L. 1 et 3&#160;: On v&#233;rifie que la personne connect&#233;e &#224; bien le droit de publier l'article en question. Voir la documentation sur &lt;a href=&#034;http://programmer.spip.net/La-balise-AUTORISER&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;#AUTORISER&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; L. 2&#160;: appel du formulaire permettant de changer le statut d'un objet. Ici on pr&#233;cise que l'on veut pouvoir modifier le statut d'un article, dont l'identifiant est &lt;code&gt;#ID_ARTICLE&lt;/code&gt; Le troisi&#232;me argument &lt;code&gt;SELF|parametre_url{var_mode,preview}&lt;/code&gt; sert &#224; ne pas tomber sur une erreur 404 si on d&#233;publie l'article&#160;: il indique qu'apr&#232;s l'ex&#233;cution du formulaire on retourne sur la m&#234;me page, en mode &lt;code&gt;previsualisation&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Attention, cela ne fonctionne pas si l'on passe le statut &#224; &#171;&#160;refus&#233;&#160;&#187; ou &#171; (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Attention, cela ne fonctionne pas si l'on passe le statut &#224; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;refus&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ou &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#224; la poubelle&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les diff&#233;rents modes d'inclusion de SPIP</title>
		<link>http://geekographie.maieul.net/81</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/81</guid>
		<dc:date>2012-01-26T10:25:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Suite &#224; une remarque de Tetue apr&#232;s mon article sur les pratiques de d&#233;veloppements avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et &#224; une question d'un th&#233;ologien sur twitter, je fais ici un point sur les deux modes d'inclusion de squelettes dans &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Rappel&#160;: principe de l'inclusion Inclure un squelette A dans un squelette B, c'est dire &#224; B de reprendre le contenu du squelette A &#224; l'endroit de l'inclusion. L'inter&#234;t d'une telle pratique est de mettre en commun des morceaux de codes utilis&#233;s par plusieurs squelettes.&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Organisation-du-code-17" rel="directory"&gt;Organisation du code&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Suite &#224; une &lt;a href='http://geekographie.maieul.net/77#comment113' class=&#034;spip_in&#034;&gt;remarque de Tetue apr&#232;s mon article sur les pratiques de d&#233;veloppements avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt; et &#224; une &lt;a href=&#034;https://twitter.com/#!/NicolasFriedli/status/161470949072441345&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;question d'un th&#233;ologien sur twitter&lt;/a&gt;, je fais ici un point sur les deux modes d'inclusion de squelettes dans &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Rappel&#160;: principe de l'inclusion&lt;/h2&gt;
&lt;p&gt;Inclure un squelette A dans un squelette B, c'est dire &#224; B de reprendre le contenu du squelette A &#224; l'endroit de l'inclusion.&lt;/p&gt;
&lt;p&gt;L'inter&#234;t d'une telle pratique est de mettre en commun des morceaux de codes utilis&#233;s par plusieurs squelettes. Le cas le plus classique &#233;tant l'affichage du menu, mais plus le temps passe, plus le devellopeur &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; aguerri aura tendance &#224; multiplier les inclusions, voyant qu'il utilise beaucoup de code en commun.&lt;/p&gt;
&lt;p&gt;Le &lt;a href=&#034;http://www.spip-contrib.net/Modele-de-squelette-reutilisable&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;principe des squelettes Z&lt;/a&gt; pousse &#224; l'extr&#234;me cette id&#233;e d'inclusion / mutualisation du code.&lt;/p&gt;
&lt;p&gt;Mais attention&#160;: il ne faut pas croire qu'on imite ainsi un &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;copier-coller&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de B dans A.&lt;/p&gt;
&lt;p&gt;Ainsi si je met dans le squelette A&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;XXX&lt;INCLURE{fond=B}&gt;XXX&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et dans le squelette B&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;YYY&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela &lt;strong&gt;ne revient pas au m&#234;me&lt;/strong&gt; que mettre dans A&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;XXXYYYXXX&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pourquoi&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Parce qu'il faut consid&#233;rer que le contexte de chaque squelette est ind&#233;pendant. Par contexte, j'entend l'ensemble des param&#232;tres techniques qui lui sont pass&#233;s, par exemple un num&#233;ro d'article. Ce contexte est r&#233;cup&#233;rable via la balise &lt;code&gt;#ENV&lt;/code&gt; et sert &#224; l'interpr&#233;tation des crit&#232;res de boucles de premier niveaux. J'explique plus en d&#233;tails &lt;a href=&#034;http://www.spip-contrib.net/La-balise-ENV&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;cette notion de contexte dans un article sur contrib&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;&lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt; ou &lt;code&gt;#INCLURE&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Il existe deux modes principaux d'inclusion&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;http://programmer.spip.org/Inclure-des-squelettes&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;&lt;INCLURE{fond=B}&gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://programmer.spip.org/INCLURE&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;#INCLURE{fond=B}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Historiquement, le premier mod&#232;le est apparu d'abord. Quelle est la diff&#233;rence technique entre les deux&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Soit un squelette A appelant un squelette B.&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Dans le cas d'une inclusion avec &lt;code&gt;INCLURE&lt;/code&gt; le squelette B poss&#232;de son propre cache. Lorsque le squelette A est appel&#233;, il produit son cache &#224; lui. Le r&#233;sultat du cache de A est retourn&#233; au navigateur, et c'est &#224; ce moment l&#224; que le cache du squelette B est ins&#233;r&#233;.&lt;/li&gt;&lt;li&gt; Dans le cas d'une inclusion avec &lt;code&gt;#INCLURE&lt;/code&gt;, il n'existe pas de cache du squelette &lt;code&gt;B&lt;/code&gt;. Le morceau de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; / &lt;span class=&#034;caps&#034;&gt;HTML&lt;/span&gt; li&#233; &#224; l'interpr&#233;tation par &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; du squelette B est mis directement dans le cache du squelette A.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Puisqu'il para&#238;t qu'il faut mettre des sch&#233;mas, voici un sch&#233;ma qui tente d'expliquer cette diff&#233;rence&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Toute suggestion d'am&#233;lioration est la bienvenue.&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;div class='spip_document_47 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;75&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L356xH513/inclusion-16b75.png?1760449034' width='356' height='513' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-47 '&gt;&lt;strong&gt;&lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt; ou &lt;code&gt;#INCLURE&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-47 '&gt;Inclusion statique ou inclusion dynamique&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Cons&#233;quences techniques&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Du point de vue de la taille des caches&#160;:
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt; produit plus de fichiers de cache, mais moins gros.&lt;/li&gt;&lt;li&gt; &lt;code&gt;#INCLURE&lt;/code&gt; produit des fichiers de cache plus gros, mais en moindre quantit&#233;.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; Du point de vue de la dur&#233;e des caches&#160;:
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;&lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt; permet d'avoir un squelette fils n'ayant pas la m&#234;me dur&#233;e de cache que le squelette p&#232;re.&lt;/li&gt;&lt;li&gt; &lt;code&gt;#INCLURE&lt;/code&gt; ne permet pas cela, puisque le squelette fils n'a pas vraiment de cache propre.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; Du point de vue des techniques &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; applicables&#160;:
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; On peut pas filtrer le r&#233;sultat d'une inclusion par &lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Une solution pour contourner ce probl&#232;me est de mettre dans le squelette (&#8230;)&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; Par contre avec &lt;code&gt;#INCLURE&lt;/code&gt; on peut appliquer un filtre &lt;code&gt;[(#INCLURE{fond=B}|filtre)]&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Dans tout les cas on peut utiliser &lt;span class=&#034;caps&#034;&gt;AJAX&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; Du point de vue de la performance j'avoue ne pas trop savoir. Avoir un cache propre (&lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt;) permet d'avoir une vrai mutualisation des caches, dont un gain en terme de requ&#234;te &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;, en revanche on a une perte de temps au moment o&#249; le cache de B est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;reinject&#233;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; dans le fichier A renvoy&#233; &#224; l'internaute. C'est donc au d&#233;veloppeur de juger au cas par cas, mais il me semble que dans 90&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% des cas, il vaut mieux utiliser &lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&#034;h2&#034;&gt;Et &lt;code&gt;#MODELE&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;On peut aussi utiliser &lt;a href=&#034;http://programmer.spip.org/MODELE&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;#MODELE&lt;/code&gt;&lt;/a&gt;. Pour ce faire, il faut que le fichier inclu se situe dans le dossier &lt;code&gt;modeles&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Techniquement, faire&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#MODELE{B}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;revient, &#224; peu de chose pr&#232;s, &#224; la m&#234;me chose que faire &lt;code&gt;#INCLURE{fond=modeles/B}&lt;/code&gt;. Une diff&#233;rence toutefois&#160;: dans le cas de &lt;code&gt;#MODELE&lt;/code&gt; l'identifiant de l'objet courant est automatiquement pass&#233; en param&#232;tre.&lt;/p&gt;
&lt;p&gt;Exemple, j'ai un squelette &lt;code&gt;modeles/B.html&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_article(ARTICLES){id_article}&gt; #ID_ARTICLE #TITRE &lt;/BOUCLE_article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans mon squelette A, je cherche &#224; appeler ce squelette pour tout les articles d'une rubrique.&lt;/p&gt;
&lt;p&gt;Je peux faire soit&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_articles(ARTICLES){id_rubrique}&gt; #MODELE{B} &lt;/BOUCLE_articles&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;soit&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_articles(ARTICLES){id_rubrique}&gt; #INCLURE{fond=modeles/B,id_article} &lt;/BOUCLE_articles&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Personnellement je n'aime pas trop &lt;code&gt;#MODELE&lt;/code&gt;, je trouve qu'il induit une confusion. Le seul cas o&#249; l'emploi de mod&#232;le est justifiable, c'est lorsque l'on souhaite permettre &#224; un auteur d'inclure un tel morceau dans son article, en utilisant&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;&lt;B|id_article=xxx&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par exemple &lt;a href=&#034;http://www.spip-contrib.net/Gravatar&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le plugin Gravatar&lt;/a&gt; propose un mod&#232;le &lt;code&gt;gravatar&lt;/code&gt;, que l'on peut appeler&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit dans un squelette &lt;code&gt;#MODELE{gravatar}{id_auteur}&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; soit dans un article &lt;code&gt;&lt;gravatar|id_auteur=42&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;On consultera &lt;a href=&#034;http://www.spip.net/fr_article3454.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la documentation sur les mod&#232;les&lt;/a&gt; pour plus de d&#233;tails.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Pour aider &#224; y voir plus clair dans les diff&#233;rents squelettes inclus, &lt;a href=&#034;http://www.spip.net/fr_article4453.html#var_mode_inclure&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;on utilisera la fonction &lt;code&gt;var_mode=inclure&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Toute suggestion d'am&#233;lioration est la bienvenue.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Une solution pour contourner ce probl&#232;me est de mettre &lt;code&gt;#FILTRE{nom du filtre}&lt;/code&gt; dans le squelette inclus.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Sept bonnes pratiques de d&#233;veloppement avec SPIP</title>
		<link>http://geekographie.maieul.net/77</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/77</guid>
		<dc:date>2012-01-05T00:39:57Z</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 travaille en ce moment sur un squelette qui n'est pas de moi. Il semble que la personne qui l'a cr&#233;&#233; n'&#233;tait pas au courant des bonnes pratiques de d&#233;veloppement sous &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Il est vrai que ces bonnes pratiques ne sont pas n&#233;cessairement accessibles aux premiers abords de la documentation webmaster de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Voici sept r&#232;gles que je juge indispensables 1. Ne pas mettre de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; dans les squelettes Le but de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &#233;tait de permettre de ne pas avoir &#224; conna&#238;tre le &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; pour concevoir un&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/Organisation-du-code-17" rel="directory"&gt;Organisation du code&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Je travaille en ce moment sur un squelette qui n'est pas de moi. Il semble que la personne qui l'a cr&#233;&#233; n'&#233;tait pas au courant des bonnes pratiques de d&#233;veloppement sous &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Il est vrai que ces bonnes pratiques ne sont pas n&#233;cessairement accessibles aux premiers abords de la documentation webmaster de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Voici sept r&#232;gles que je juge indispensables&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;1. Ne pas mettre de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; dans les squelettes&lt;/h2&gt;
&lt;p&gt;Le but de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &#233;tait de permettre de ne pas avoir &#224; conna&#238;tre le &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; pour concevoir un site. Tout un syst&#232;me sp&#233;cifique a &#233;t&#233; pr&#233;vu, pour faire des requ&#234;tes &lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;, mais aussi des tests. C'est parfois perturbant pour les utilisateurs venant du monde &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Mais pour autant, c'est une &lt;a href='http://geekographie.maieul.net/13' class=&#034;spip_in&#034;&gt;tr&#232;s bonne pratique de ne quasiment-jamais mettre de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; dans un squelette&lt;/a&gt;. En r&#233;alit&#233;, c'est une mauvaise pratique d'en mettre.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;2. Ne rien mettre dans le dossier &lt;span class=&#034;caps&#034;&gt;IMG&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Le dossier &lt;span class=&#034;caps&#034;&gt;IMG&lt;/span&gt; ne doit contenir que les images et documents ajout&#233;s par l'utilisateur depuis l'interface priv&#233;. En aucun cas il ne doit contenir des images propres aux squelettes, qui doivent se trouver dans le m&#234;me dossier que les squelettes.&lt;/p&gt;
&lt;p&gt;Choisir de mettre les images dans &lt;span class=&#034;caps&#034;&gt;IMG&lt;/span&gt; (comme je l'ai vu dans ce squelette), c'est compliquer les r&#233;utilisations des squelettes, et m&#233;langer les couches utilisateurs et webmestres de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;3. Utiliser &lt;code&gt;#CHEMIN&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;La balise &lt;code&gt;#CHEMIN&lt;/code&gt; est une balise indispensable de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Elle permet d'indiquer l'adresse d'un fichier sans se pr&#233;occuper du nom du dossier parent. En effet, &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; va cherche le fichier pass&#233; en argument dans l'ordre suivant&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Liste tir&#233;e du site Programmer avec SPIP.&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes&lt;/li&gt;&lt;li&gt; plugin B d&#233;pendant du plugin A&lt;/li&gt;&lt;li&gt; plugin A&lt;/li&gt;&lt;li&gt; squelettes-dist&lt;/li&gt;&lt;li&gt; prive&lt;/li&gt;&lt;li&gt; ecrire&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Exemple&#160;: j'ai une image dans le dossier &lt;code&gt;squelettes&lt;/code&gt;, je ne fais pas&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='html'&gt;&lt;code&gt;&lt;img src='squelettes/toto.png' /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mais bien&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;img src='#CHEMIN{toto.png}' /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mieux, je met mon image &lt;code&gt;toto.png&lt;/code&gt; dans le dossier &lt;code&gt;img&lt;/code&gt; du dossier &lt;code&gt;squelettes&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je peux alors faire&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;img src='#CHEMIN{img/toto.png}' /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'avantage d'un tel syst&#232;me est &#233;vident&#160;: permettre d'avoir un dossier squelettes qui ne s'appelle pas squelettes, par exemple lorsqu'on utilise &lt;a href=&#034;#plugin&#034; class=&#034;spip_ancre&#034;&gt;ma sixi&#232;me recommandation&#160;: les squelettes sous forme de plugins&lt;/a&gt;. Mais aussi permettre &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; de g&#233;rer correctement les &lt;span class=&#034;caps&#034;&gt;URLS&lt;/span&gt; arborescentes (le cas &#233;ch&#233;ant).&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;4. Utiliser &lt;code&gt;|balise_img&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Il est recommand&#233; lorsqu'on ins&#232;re une balise &lt;code&gt;&lt;img&gt;&lt;/code&gt; de lui mettre des attributs &lt;code&gt;height&lt;/code&gt; et &lt;code&gt;with&lt;/code&gt; pour am&#233;liorer les performances du navigateur lors de l'affichage de la page.&lt;/p&gt;
&lt;p&gt;On peut bien s&#251;r indiquer cela manuellement&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;img src='#CHEMIN{toto.png}' width='largeur' height='hauteur' /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mais supposons que je r&#233;duise la taille de &lt;code&gt;toto.png&lt;/code&gt;&#160;: je dois dans ce cas modifier les attributs &lt;code&gt;height&lt;/code&gt; et &lt;code&gt;width&lt;/code&gt; &#224; chaque fois que je l'utilise.&lt;/p&gt;
&lt;p&gt;Pour &#233;viter cela, &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; pr&#233;voit le filtre &lt;code&gt;|balise_img&lt;/code&gt; qui, lorsqu'il est appliqu&#233; au chemin d'un fichier image, cr&#233;e automatiquement la balise &lt;code&gt;&lt;img&gt;&lt;/code&gt;, avec la hauteur et la largeur du fichier. Ainsi, pas besoin de corriger si on r&#233;duit la taille du fichier.&lt;/p&gt;
&lt;p&gt;Le filtre s'utilise de mani&#232;re tr&#232;s simple&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#CHEMIN{toto.png}|balise_img)]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut m&#234;me mettre en argument le contenu de l'attribut &lt;code&gt;alt&lt;/code&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#CHEMIN{toto.png}|balise_img{0+0})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voir en deuxi&#232;me argument la valeur de l'attribut &lt;code&gt;class&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#CHEMIN{toto.png}|balise_img{0+0,blague_pour_enfants})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code au final me produit&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='html'&gt;&lt;code&gt;&lt;img src='squelettes/toto.png' width='largeur_du_fichier_toto.png' height='hauteur_du_fichier_toto.png' alt='0+0' class='blague_pour_enfants' /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;5. Utiliser les cha&#238;nes de langues&lt;/h2&gt;
&lt;p&gt;Bien que cela puisse para&#238;tre inutile et fastidieux pour un site monolingue, &lt;a href=&#034;http://programmer.spip.org/-Elements-linguistiques-&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;utiliser les cha&#238;nes de langue&lt;/a&gt; est quand m&#234;me utile pour trois raisons&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; on ne sait jamais&#160;: si le site devient multilingue, c'est toujours cela de fait.&lt;/li&gt;&lt;li&gt; il est plus facile d'uniformiser les textes.&lt;/li&gt;&lt;li&gt; il est plus facile de corriger en cas de faute ou de changement d'avis.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;6. Utiliser &lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;C'est un principe de base de l'informatique&#160;: d&#232;s qu'une s&#233;quence d'instructions est utilis&#233;e plusieurs fois, il faut non pas la dupliquer, mais la mettre dans un morceau qu'on appelle plusieurs fois.&lt;/p&gt;
&lt;p&gt;En &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; ce morceau, c'est un &lt;a href=&#034;http://programmer.spip.org/Inclure-des-squelettes&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fichier inclus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Typiquement supposons que j'affiche sur toutes les pages de mon site les sites amis.&lt;/p&gt;
&lt;p&gt;Au lieux de copier-coller le code suivant dans les squelettes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;B&gt; &lt;ul&gt; &lt;BOUCLE_sites(SITES){par titre}&gt; &lt;li&gt;&lt;a href='#URL_SITE'&gt;#NOM&lt;/a&gt;&lt;/li&gt; &lt;/BOUCLE&gt; &lt;/ul&gt; &lt;/B&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je le met dans un fichier &lt;code&gt;sites-amis.html&lt;/code&gt;, situ&#233; dans un dossier &lt;code&gt;inclure&lt;/code&gt; du dossier contenant les squelettes.&lt;/p&gt;
&lt;p&gt;Et je met le code suivant l&#224; o&#249; je souhaite afficher les sites amis&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;INCLURE{fond=inclure/sites-amis}&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela me permet si je dois modifier les crit&#232;res de cette liste de ne les modifier qu'&#224; un endroit&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;En outre, cela diminue les requ&#234;tes SQL et donc la charge du serveur SQL, (&#8230;)&#034; id=&#034;nh3-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;La logique est donc&#160;: diviser son site en briques r&#233;utilisables. Chaque brique correspondant &#224; fichier et &#224; un morceau logique de page. Ensuite assembler ces briques dans des fichiers plus globaux&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour comprendre comment passer des param&#232;tres lors de ces inclusions, pour (&#8230;)&#034; id=&#034;nh3-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#034;http://www.spip-contrib.net/Modele-de-squelette-reutilisable&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Le mod&#232;le de squelettes Z pousse &#224; l'extr&#234;me cette logique des inclusions&lt;/a&gt;. Je conseille de le suivre&#160;: on gagne largement en maintenance ce qu'on perd en temps d'apprentissage initial.&lt;/p&gt;
&lt;p&gt;Une r&#232;gle importante dans les inclusions&#160;: les balises html qui s'ouvrent dans un fichier doivent se fermer dans le m&#234;me fichier. Il est tr&#232;s mauvais d'ouvrir une balise dans un fichier puis de la fermer dans un autre&#160;: on y est perd en lisibilit&#233; du code, et donc en maintenance&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;J'ai cr&#251; &#224; un moment qu'une structure html &#233;tait incorrecte du fait qu'un (&#8230;)&#034; id=&#034;nh3-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;plugin&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;7. Mettre ses squelettes sous formes de plugins&lt;/h2&gt;
&lt;p&gt;Cela peut para&#238;tre un luxe ou coquetterie, mais cela facilite &#233;norm&#233;ment le d&#233;ploiement d'un m&#234;me squelette sur plusieurs sites ou le d&#233;m&#233;nagement depuis la version locale vers la version en ligne&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; en indiquant les d&#233;pendances aux plugins.&lt;/li&gt;&lt;li&gt; en incluant le fichier &lt;code&gt;mes_options.php&lt;/code&gt; dans le m&#234;me dossier.&lt;/li&gt;&lt;li&gt; en permettant m&#234;me le cas &#233;ch&#233;ant d'ajouter automatiquement un contenu pr&#233;-d&#233;fini.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Un pr&#233;c&#233;dent article d&#233;taille &lt;a href='http://geekographie.maieul.net/3' class=&#034;spip_in&#034;&gt;comment fabriquer ces squelettes-plugins&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Amis SPIPeurs, j'attends vos remarques et ajouts&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;a href=&#034;http://programmer.spip.org/La-notion-de-chemin&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Liste tir&#233;e du site Programmer avec &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;En outre, cela diminue les requ&#234;tes &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;&lt;/span&gt; et donc la charge du serveur &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SQL&lt;/span&gt;&lt;/span&gt;, mais la contrepartie est de multiplier les fichiers de caches ainsi que les inclusions &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Pour comprendre comment passer des param&#232;tres lors de ces inclusions, pour par exemple conna&#238;tre l'article courant, &lt;a href=&#034;http://www.spip-contrib.net/La-balise-ENV&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;je renvoie &#224; mon article sur la balise #&lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;ENV&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;. Cet article devrais &#234;tre mis &#224; jour pour parler des derni&#232;res nouveaut&#233;s. Mais l'essentiel est l&#224;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;J'ai cr&#251; &#224; un moment qu'une structure html &#233;tait incorrecte du fait qu'un fichier avait plus de &lt;code&gt;&lt;div&gt;&lt;/code&gt; ouvrantes que fermantes. En r&#233;alit&#233;, le dernier &lt;code&gt;&lt;/div&gt;&lt;/code&gt; manquant se trouvait ailleurs.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Archivage avec redirection</title>
		<link>http://geekographie.maieul.net/56</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/56</guid>
		<dc:date>2011-06-24T13:15:24Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Sur ce site, certains articles sont consid&#233;r&#233;s comme &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;obsol&#232;tes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; parce que j'ai trouv&#233; une meilleure m&#233;thode pour obtenir le m&#234;me r&#233;sultat. Je souhaitais que google n'indexe plus ces articles, mais soit redirig&#233; vers leurs rempla&#231;ants respectifs. En m&#234;me temps, je souhaitais qu'une personne qui s'amuse &#224; fouiller dans les archives de ce site puisse le cas &#233;ch&#233;ant retrouver l'article. Voici la mani&#232;re dont j'ai proc&#233;d&#233;. Je remercie xdjuj pour m'avoir fourni l'id&#233;e de d&#233;part. Principe&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Sur ce site, certains articles sont consid&#233;r&#233;s comme &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;obsol&#232;tes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; parce que j'ai trouv&#233; une meilleure m&#233;thode pour obtenir le m&#234;me r&#233;sultat.&lt;/p&gt;
&lt;p&gt;Je souhaitais que google n'indexe plus ces articles, mais soit redirig&#233; vers leurs rempla&#231;ants respectifs. En m&#234;me temps, je souhaitais qu'une personne qui s'amuse &#224; fouiller dans les archives de ce site puisse le cas &#233;ch&#233;ant retrouver l'article.&lt;/p&gt;
&lt;p&gt;Voici la mani&#232;re dont j'ai proc&#233;d&#233;. Je remercie xdjuj pour m'avoir fourni l'id&#233;e de d&#233;part.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe&lt;/h2&gt;
&lt;p&gt;Pour arriver &#224; mes fins, j'utilise le plugin &lt;a href=&#034;http://www.spip-contrib.net/Le-plugin-a2a-pour-lier-des-articless&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;A2A&lt;/span&gt;&lt;/a&gt; qui me permet d'indiquer quel est l'article rempla&#231;ant d'un article obsol&#232;te.&lt;/p&gt;
&lt;p&gt;En interne, les liens vers les articles archiv&#233;s portent la variable &lt;span class=&#034;caps&#034;&gt;GET&lt;/span&gt; &lt;code&gt;archive=oui&lt;/code&gt;. Par exemple &lt;a href='http://geekographie.maieul.net/20' class=&#034;spip_in&#034;&gt;Un index des sources primaires (1)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si une personne arrive sur une page archiv&#233;e sans passer la variable &lt;code&gt;archive=oui&lt;/code&gt; alors elle est redirig&#233;e vers la nouvelle version, par une redirection &lt;span class=&#034;caps&#034;&gt;HTTP&lt;/span&gt; 301 (redirection permanente).&lt;/p&gt;
&lt;p&gt;En revanche si la variable est pass&#233;e, il reste sur cette page, mais celle-ci poss&#232;de une meta-donn&#233;e qui indique de ne pas l'indexer.&lt;/p&gt;
&lt;p&gt;Ceci permet donc d'acc&#233;der aux archives du site via la navigation interne de ce site, tout en r&#233;orientant les liens externes, dont ceux des moteurs de recherches.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;La m&#233;thode&#160;: la modification des liens&lt;/h2&gt;
&lt;p&gt;Il existe deux types de liens internes pointant &#233;ventuellement vers des archives&#160;: ceux g&#233;n&#233;r&#233;s avec &lt;code&gt;#URL_ARTICLE&lt;/code&gt; dans un squelette et ceux g&#233;n&#233;r&#233;s avec des raccourcis de la forme &lt;code&gt;[texte-&gt;xx]&lt;/code&gt; ou &lt;code&gt;[texte-&gt;artxx]&lt;/code&gt; ou &lt;code&gt;[texte-&gt;articlexx]&lt;/code&gt;, dans le texte d'un article.&lt;/p&gt;
&lt;p&gt;Comment faire pour ajouter des arguments &#224; ces liens seulement si l'article de destination est un article &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;obsol&#232;te&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans les squelettes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour les liens dans les squelettes, c'est relativement simple&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[(#URL_ARTICLE|parametre_url{archive,oui})]&lt;/code&gt; me rajoute ma variable. Sauf que cela le fait sur tous les articles.&lt;/p&gt;
&lt;p&gt;Il va donc falloir conditionner. Pour ce faire je cr&#233;e un squelette &lt;code&gt;inclure/obsolete.html&lt;/code&gt;. Celui-ci renvoie &lt;code&gt;1&lt;/code&gt; si un article est li&#233; &#224; l'article pass&#233; en argument, donc si cet article est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;obsol&#232;te&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Il ne renvoie rien dans le cas contraire.&lt;/p&gt;
&lt;p&gt;Voici le code de ce squelette&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_articles(ARTICLES_LIES){id_article}{par rang}{0,1}&gt;1&lt;/BOUCLE_articles&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je remplace dans mes squelettes toutes les r&#233;f&#233;rences &#224; &lt;code&gt;#URL_ARTICLE&lt;/code&gt; par&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#INCLURE{fond=inclure/obsolete}{id_article}|?{#URL_ARTICLE|parametre_url{archive,oui},#URL_ARTICLE})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce qui en gros veut dire&#160;: on utilise le squelette &lt;code&gt;inclure/obsolete&lt;/code&gt; en lui donnant l'id_article courant comme valeur. Si ce squelette retourne quelque chose, alors on renvoie &lt;code&gt;#URL_ARTICLE|parametre_url{archive,oui}&lt;/code&gt;, sinon on renvoie simplement &lt;code&gt;#URL_ARTICLE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&#192; noter qu'ici je filtre un squelette appel&#233; via &lt;code&gt;#INCLURE&lt;/code&gt;, ce que je ne peux faire avec &lt;code&gt;&lt;INCLURE&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour les raccourcis typographiques&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il faut qu'avant que &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; interpr&#232;te les raccourcis typographique, je modifie, si cela est pertinent, les formes &lt;code&gt;[texte-&gt;artxx]&lt;/code&gt; par &lt;code&gt;[texte-&gt;artxx?archive=oui]&lt;/code&gt;. &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; s'occupera ensuite de la question des urls propres.&lt;/p&gt;
&lt;p&gt;Pour faire cela, j'utilise la pipeline &lt;code&gt;pre_liens&lt;/code&gt;, que je d&#233;clare dans mon fichier &lt;code&gt;plugin.xml&lt;/code&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='xml'&gt;&lt;code&gt;&lt;pipeline&gt; &lt;nom&gt;pre_liens&lt;/nom&gt; &lt;inclure&gt;geek_maieul.php&lt;/inclure&gt;
&lt;/pipeline&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sur la pipeline pre_liens, je renvoie &#224; l'&lt;a href=&#034;http://programmer.spip.org/pre_liens&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;article de Marcimat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je la d&#233;clare dans mon fichier &lt;code&gt;geek_maieul.php&lt;/code&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;function geek_maieul_pre_liens($texte){ $match = array(); if (!preg_match(&#034;#-&gt;(?:art)?(?:article)?([0-9]+)\]#&#034;,$texte,$match)){ //trouer les liens vers les articles, sans rien derri&#232;re return $texte; } $obsolete = sql_getfetsel('id_article_lie','spip_articles_lies','id_article='.$match[1]); // y a-t-il un article li&#233; ? if ($obsolete){ $texte = str_replace($match[1].']',$match[1].'?archive=oui]',$texte); // on } return $texte; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Commentaires&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ligne 1&#160;: nom de la fonction / pipeline.&lt;/li&gt;&lt;li&gt; ligne 2 &#224; 5&#160;: je teste si mon lien interne est bien un lien de type article. Si jamais ce n'est pas le cas, je ne modifie rien et renvoie le lien comme il &#233;tait avant. Sinon je stocke le num&#233;ro de l'article dans le tableau $match, dans l'entr&#233;e 1. Pour ce faire, j'utilise une expression r&#233;guli&#232;re.&lt;/li&gt;&lt;li&gt; ligne 7&#160;: je regarde si mon article a un article li&#233;. J'utilise pour cela la fonction de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &lt;a href=&#034;http://programmer.spip.org/sql_getfetsel,582&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;sql_getfetsel()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; ligne 8 et 9&#160;: si mon article a un article li&#233;, je modifie le lien, en ajoutant &lt;code&gt;?archive=oui&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; ligne 11&#160;: je renvoie le tout.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Redirection&lt;/h2&gt;
&lt;p&gt;Dans mon fichier &lt;code&gt;article.html&lt;/code&gt;, je teste si mon article a un article li&#233;, et si c'est le cas, j'appelle filtre sur l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; de l'article li&#233;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_nouveau(ARTICLES_LIES){id_article}{par rang}{0,1}&gt;
[(#URL_ARTICLE{#ID_ARTICLE_LIE}|redirect301)]
&lt;/BOUCLE_nouveau&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le filtre &lt;code&gt;|redirect301&lt;/code&gt; est &#233;crit par moi. C'est une fonction php relativement simple&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;function redirect301($url){ if (_request('archive')!='oui'){ header(&#034;Status: 301 Moved Permanently&#034;, false, 301); header(&#034;Location:$url&#034;); exit(); }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avant de faire une redirection, je v&#233;rifie que je n'ai pas la valeur &lt;code&gt;archive=oui&lt;/code&gt; pass&#233;e dans l'url&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;J'utilise la fonction SPIP .&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Si c'est le cas, je proc&#232;de &#224; la redirection.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;M&#233;ta donn&#233;e pour indiquer de ne pas indexer&lt;/h2&gt;
&lt;p&gt;Dans l'ent&#234;te de mon squelette d'article, je met&lt;/p&gt;
&lt;p&gt;&lt;code class='spip'&gt;[(#INCLURE{fond=inclure/obsolete}{id_article}|oui)&lt;meta name=&#034;robots&#034; content=&#034;noindex&#034;&gt;]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ce qui a pour cons&#233;quent de placer la balise &lt;code&gt;&lt;meta name=&#034;robots&#034; content=&#034;noindex&#034;&gt;&lt;/code&gt; si mon article est obsol&#232;te, afin que les moteurs de recherches ne l'indexent plus.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Il est &#233;vident que si je fais pointer l'article A vers l'article B et l'article B vers l'article A je risque d'avoir des probl&#232;mes de renvois mutuels. Mais comme je suis le seul r&#233;dacteur sur ce site, le risque est minimum.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb4-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;J'utilise la fonction &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/span&gt; &lt;a href=&#034;http://programmer.spip.org/_request&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;_request()&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Afficher plusieurs fois un m&#234;me objet SPIP</title>
		<link>http://geekographie.maieul.net/16</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/16</guid>
		<dc:date>2010-12-19T22:11:04Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Dans le cadre d'un projet associatif, je me sert de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; pour g&#233;rer une base de donn&#233;e. Cette base de donn&#233;e contient un certain nombre d'objets &#8212; des cartes de jeux en fait, que j'ai &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;traduites&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; par des articles &#8212; que j'ai besoin d'afficher plusieurs fois. Le nombre d'affichages n&#233;cessaires est propre &#224; chaque cartes / articles. Pour arriver &#224; mes fins, voici comment j'ai fait&#160;: J'ai ajout&#233; un champ extra nombre &#224; la table articles. Dans ce champ je pr&#233;cise le nombre de fois&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans le cadre d'un projet associatif, je me sert de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; pour g&#233;rer une base de donn&#233;e. Cette base de donn&#233;e contient un certain nombre d'objets &#8212; des cartes de jeux en fait, que j'ai &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;traduites&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; par des articles &#8212; que j'ai besoin d'afficher plusieurs fois. Le nombre d'affichages n&#233;cessaires est propre &#224; chaque cartes / articles.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Pour arriver &#224; mes fins, voici comment j'ai fait&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; J'ai ajout&#233; un &lt;a href=&#034;http://www.spip-contrib.net/Champs-Extras-2&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;champ extra&lt;/a&gt; &lt;code&gt;nombre&lt;/code&gt; &#224; la table &lt;code&gt;articles&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Dans ce champ je pr&#233;cise le nombre de fois o&#249; je souhaite afficher un article. C'est donc un champs de type &lt;code&gt;INT&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; J'utilise ensuite le plugin &lt;a href=&#034;http://www.spip-contrib.net/SPIP-Bonux&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;-Bonux&lt;/a&gt; pour boucler sur un tableau &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt; que je g&#233;n&#232;re gr&#226;ce &#224; la fonction &lt;a href=&#034;http://php.net/manual/fr/function.array-fill.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code&gt;array_fill()&lt;/code&gt;&lt;/a&gt; de &lt;span class=&#034;caps&#034;&gt;PHP&lt;/span&gt;. Ce tableau contient &lt;code&gt;#NOMBRE&lt;/code&gt; fois la valeur &lt;code&gt;''&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; A l'int&#233;rieur de cette boucle, je peux r&#233;cup&#233;rer les informations de l'article directement avec les balise &lt;code&gt;#CHAMP&lt;/code&gt; dont &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; reconnaitra qu'elle font allusion &#224; la boucle &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;m&#232;re&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cela nous donne donc&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;&lt;BOUCLE_article(ARTICLES)&gt; &lt;BOUCLE_repeter(POUR){tableau #VAL{0}|array_fill{#NOMBRE,''}}&gt; J'affiche le titre de l'article #TITRE qui porte le num&#233;ro #ID_ARTICLE etc. &lt;br /&gt; &lt;/BOUCLE_repeter&gt; &lt;/BOUCLE_article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Le code expos&#233; ici n'est pas tout &#224; fait celui que j'utilise pour mon projet, car dans celui-ci je dois m&#233;langer de mani&#232;re al&#233;atoire les diff&#233;rents articles. Je passe donc par un tableau global que je remplis des valeurs des &lt;code&gt;#ID_ARTICLE&lt;/code&gt; le nombre de fois n&#233;cessaires.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Pourquoi ne pas mettre de PHP dans un squelette, sauf exception</title>
		<link>http://geekographie.maieul.net/13</link>
		<guid isPermaLink="true">http://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="http://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>
<item xml:lang="fr">
		<title>G&#233;rer le statut des articles directement depuis le site public</title>
		<link>http://geekographie.maieul.net/10</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/10</guid>
		<dc:date>2010-12-07T23:20:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;J'utilise sur ce site le plugin de pr&#233;visualisation en cours de r&#233;daction, qui me permet de voir le r&#233;sultat de ma r&#233;daction sur le site public, avant que l'article soit publi&#233;. Du coup j'ai voulu pouvoir changer le statut de l'article directement sur le site public. Remarque&#160;: sous &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3, c'est beaucoup plus simple. Pour ce faire, je me suis rendu dans l'espace priv&#233; de spip, et j'ai ajout&#233; un &amp;var_mode=inclure sur la page d'un article. J'ai ainsi reper&#233; que le bloc qui&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;J'utilise sur ce site le plugin &lt;a href=&#034;http://www.spip-contrib.net/Previsualiser-en-cours-de&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;de pr&#233;visualisation en cours de r&#233;daction&lt;/a&gt;, qui me permet de voir le r&#233;sultat de ma r&#233;daction sur le site public, avant que l'article soit publi&#233;.&lt;/p&gt;
&lt;p&gt;Du coup j'ai voulu pouvoir changer le statut de l'article directement sur le site public.&lt;/p&gt;
&lt;p&gt;Remarque&#160;: sous &lt;a href='http://geekographie.maieul.net/97' class=&#034;spip_in&#034;&gt;&lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3, c'est beaucoup plus simple&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Pour ce faire, je me suis rendu dans l'espace priv&#233; de spip, et j'ai ajout&#233; un &lt;code&gt;&amp;var_mode=inclure&lt;/code&gt; sur la page d'un article. J'ai ainsi reper&#233; que le bloc qui m'int&#233;ressait se situait dans &lt;code&gt;prive/infos/article.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En ouvrant ce fichier, j'ai reper&#233; la ligne qui m'int&#233;ressait&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela affiche le bloc de changement de statut.&lt;/p&gt;
&lt;p&gt;J'ai donc recopier cela dans mon squelette &lt;code&gt;article.html&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;En fait comme j'ai un squelette &#171;&#160;Z&#160;&#187;, j'ai mis dans , mais cela ne change (&#8230;)&#034; id=&#034;nh5-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Mais comme je ne voulais pas que n'importe qui voit ce bloc, j'ai test&#233; l'autorisation&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#AUTORISER{instituer,article,#ID_ARTICLE}|oui) [(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Seulement voil&#224;, le filtre &lt;code&gt;|instituer_article&lt;/code&gt; n'existe pas dans tout &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Il est d&#233;fini dans le fichier &lt;code&gt;prive/statuts/article_fonctions.php&lt;/code&gt;, ce qui veut dire qu'il n'existe que pour le squelette &lt;code&gt;prive/infos/article.html&lt;/code&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;function instituer_article($id_article, $id_rubrique, $statut){ $instituer_article = charger_fonction('instituer_article', 'inc'); return $instituer_article($id_article, $statut, $id_rubrique);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J'ai donc recopi&#233; cela dans un fichier &lt;code&gt;article_fonctions.php&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;En fait .&#034; id=&#034;nh5-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Le probl&#232;me est que la fonction &lt;code&gt;instituer_article()&lt;/code&gt; renvoi des liens dans l'espace priv&#233;, et non le lien de l'article dans l'espace public. Du coup, apr&#232;s avoir chang&#233; le statut d'un article, je me retrouvais sur page 404 du type&#160;: &lt;code&gt;http://http://geekographie.maieul.net/ecrire/ecrire/?exec=articles&amp;id_article=10&lt;/code&gt;, ce qui &#233;tait g&#233;nant.&lt;/p&gt;
&lt;p&gt;Comme il n'existe pas de pipeline pour cette fonctions, j'ai du faire quelquechose de &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;sale&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, en modifiant son r&#233;sultat.&lt;/p&gt;
&lt;p&gt;Et du coup mon fichier &lt;code&gt;articles_fonctions.php&lt;/code&gt; contient&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;function instituer_article($id_article, $id_rubrique, $statut){ $instituer_article = charger_fonction('instituer_article', 'inc'); return str_replace('ecrire%2Fecrire%2F%3Fexec%3Darticles%26id_article%3D','spip.php%3Farticle',$instituer_article($id_article, $statut, $id_rubrique));
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par ailleurs, la fonction &lt;code&gt;instituer_article&lt;/code&gt; de &lt;code&gt;inc&lt;/code&gt; contient un appel &#224; fonction &lt;code&gt;puce_statut()&lt;/code&gt;. Il a donc fallu que je rajoute une inclusion suppl&#233;mentaire auparavent.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;include_spip('inc/puce_statut');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et voil&#224;, cela fonctionne&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Je peux modifier le statut d'un article depuis le site public, mais les autres ne voient pas ce bouton.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;En r&#233;sum&#233;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dans le fichier &lt;code&gt;article.html&lt;/code&gt;, &#224; l'endroit souhait&#233;&lt;/strong&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='spip'&gt;&lt;code&gt;[(#AUTORISER{instituer,article,#ID_ARTICLE}|oui) [(#ID_ARTICLE|instituer_article{#ID_RUBRIQUE,#STATUT})]]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Dans le fichier article_fonctions.php&lt;/strong&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;&lt;?php
include_spip('inc/puce_statut');
function instituer_article($id_article, $id_rubrique, $statut){ $instituer_article = charger_fonction('instituer_article', 'inc'); return str_replace('ecrire%2Fecrire%2F%3Fexec%3Darticles%26id_article%3D','spip.php%3Farticle',$instituer_article($id_article, $statut, $id_rubrique));
}
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;&#201;videment, avec la balise #&lt;span class=&#034;caps&#034;&gt;AUTORISER&lt;/span&gt;, cela double le cache de &lt;code&gt;article/extra.html&lt;/code&gt;&#160;: un cache pour moi connect&#233;, un pour les visiteurs non connect&#233;s.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb5-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 5-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;En fait comme j'ai un squelette &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Z&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, j'ai mis dans &lt;code&gt;extra/article.html&lt;/code&gt;, mais cela ne change pas grand chose.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb5-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 5-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;En fait &lt;code&gt;extra/article_fonctions.php&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un fichier mes_options.php minimal</title>
		<link>http://geekographie.maieul.net/2</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/2</guid>
		<dc:date>2010-12-05T13:03:22Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Voil&#224; un fichier mes_options.php minimal, que je conseille &#224; tout webmestre Spipeur. &lt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?php $&lt;span class=&#034;caps&#034;&gt;GLOBALS&lt;/span&gt;['table_des_traitements']['&lt;span class=&#034;caps&#034;&gt;TITRE&lt;/span&gt;'][]='typo(supprimer_numero(%s),&#034;&lt;span class=&#034;caps&#034;&gt;TYPO&lt;/span&gt;&#034;,$connect)'&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; $&lt;span class=&#034;caps&#034;&gt;GLOBALS&lt;/span&gt;['table_des_traitements']['&lt;span class=&#034;caps&#034;&gt;NOM&lt;/span&gt;'][]='typo(supprimer_numero(%s),&#034;&lt;span class=&#034;caps&#034;&gt;TYPO&lt;/span&gt;&#034;,$connect)'&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; $&lt;span class=&#034;caps&#034;&gt;GLOBALS&lt;/span&gt;['table_des_traitements']['&lt;span class=&#034;caps&#034;&gt;TYPE&lt;/span&gt;']['mots']='typo(supprimer_numero(%s),&#034;&lt;span class=&#034;caps&#034;&gt;TYPO&lt;/span&gt;&#034;,$connect)'&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://geekographie.maieul.net/mes_options-php" rel="directory"&gt;mes_options.php&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Voil&#224; un fichier &lt;a href=&#034;http://www.spip.net/fr_article4654.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;mes_options.php&lt;/a&gt; minimal, que je conseille &#224; tout webmestre Spipeur.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;&lt;?php
$GLOBALS['table_des_traitements']['TITRE'][]='typo(supprimer_numero(%s),&#034;TYPO&#034;,$connect)';
$GLOBALS['table_des_traitements']['NOM'][]='typo(supprimer_numero(%s),&#034;TYPO&#034;,$connect)';
$GLOBALS['table_des_traitements']['TYPE']['mots']='typo(supprimer_numero(%s),&#034;TYPO&#034;,$connect)';
$GLOBALS['table_des_traitements']['NOM_SITE'][]='typo(supprimer_numero(%s),&#034;TYPO&#034;,$connect)';
$GLOBALS['quota_cache'] = 100;
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les quatres premi&#232;res lignes permettent de supprimer automatiquement les num&#233;ros de tri des articles / rubriques / auteurs / mot / sites de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb7-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;quand vous appelez un titre&#034; id=&#034;nh7-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Du coup plus besoin de la lame du couteau-suisse, qui est devenu une usine &#224; gaz, et plus besoin de mettre un filtre &lt;code&gt;|supprimer_numero&lt;/code&gt; dans tout les squelettes.&lt;/p&gt;
&lt;p&gt;La derni&#232;re ligne augmente la taille du cache de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. 10 Mo par d&#233;faut, c'est vite juste, surtout quand vous utilisez un squelette de type &lt;span class=&#034;caps&#034;&gt;ZPIP&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb7-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh7-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 7-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;quand vous appelez un titre &lt;code&gt;1. Titre&lt;/code&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>



</channel>

</rss>
