<?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=11&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Succession d'articles avec A2A</title>
		<link>https://geekographie.maieul.net/100</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/100</guid>
		<dc:date>2012-09-13T19:16: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;La nouvelle version du plugins &lt;span class=&#034;caps&#034;&gt;A2A&lt;/span&gt; permet de typer les relations entre articles. Je m'en sert sur ce site pour cr&#233;er des succession d'articles, par exemple ma s&#233;rie d'articles sur les stemma. Comment fais-je&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Configuration du plugin Je cr&#233;e un nouveau type de relation, dont la clef est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Suivant&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et le titre est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Article suivant&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Chaque article de la cha&#238;ne, sauf le dernier, est reli&#233; &#224; l'article suivant selon ce type. Voil&#224; pour l'espace priv&#233;. C&#244;t&#233; squelettes Je&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;La nouvelle version du plugins &lt;span class=&#034;caps&#034;&gt;A2A&lt;/span&gt; permet de &lt;a href=&#034;http://contrib.spip.net/Typage-des-relations-entre-articles-avec-A2A&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;typer les relations entre articles&lt;/a&gt;. Je m'en sert sur ce site pour cr&#233;er des succession d'articles, par exemple ma &lt;a href='https://geekographie.maieul.net/88' class=&#034;spip_in&#034;&gt;s&#233;rie d'articles sur les stemma&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comment fais-je&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Configuration du plugin&lt;/h2&gt;
&lt;p&gt;Je cr&#233;e un nouveau type de relation, dont la clef est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Suivant&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et le titre est &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Article suivant&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Chaque article de la cha&#238;ne, sauf le dernier, est reli&#233; &#224; l'article suivant selon ce type.&lt;/p&gt;
&lt;p&gt;Voil&#224; pour l'espace priv&#233;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;C&#244;t&#233; squelettes&lt;/h2&gt;
&lt;p&gt;Je souhaite afficher l'ensemble des articles de la cha&#238;ne dans laquelle se situe l'article courant mais&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; En ne mettant pas de lien sur l'article courant.&lt;/li&gt;&lt;li&gt; En mettant un attribut &lt;code&gt;rel=prev&lt;/code&gt; ou &lt;code&gt;rel=next&lt;/code&gt; pour le liens vers l'article imm&#233;diatement pr&#233;c&#233;dent/suivant.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Voici comme je proc&#233;de, les commentaires suivent.&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; #SET{precedent,''} #SET{suivant,''} #SET{succession,#LISTE{#ID_ARTICLE}} &lt;BOUCLE_precedent(ARTICLES_LIES){id_article_lie=#ID_ARTICLE}{type_liaison=suivant}&gt; #SET{succession,#LISTE{#ID_ARTICLE}|push{#GET{succession}}} [(#ID_ARTICLE_LIE|=={#_article:ID_ARTICLE}|oui) #SET{precedent,#ID_ARTICLE} ] &lt;BOUCLE_precedents(Boucle_precedent) /&gt; &lt;/BOUCLE_precedent&gt; &lt;BOUCLE_suivant(ARTICLES_LIES){id_article=#ID_ARTICLE}{type_liaison=suivant}&gt; #SET{succession,#GET{succession}|push{#ID_ARTICLE_LIE}} #SET{suivant,#ID_ARTICLE_LIE} &lt;BOUCLE_suivants(ARTICLES_LIES){id_article=#ID_ARTICLE_LIE}{type_liaison=suivant}&gt; #SET{succession,#GET{succession}|push{#ID_ARTICLE_LIE}} &lt;BOUCLE_suivantsr(BOUCLE_suivants) /&gt; &lt;/BOUCLE_suivants&gt; &lt;/BOUCLE_suivant&gt; &lt;B_succession&gt; &lt;p&gt;&lt;strong&gt;&lt;:geek:succession_article:&gt; :&lt;/strong&gt;&lt;/p&gt; &lt;ol class='succession'&gt; &lt;BOUCLE_succession(ARTICLES){id_article IN #GET{succession}}{si #GET{succession}|count|&gt;{1}} &gt; &lt;li[ class='(#EXPOSE)']&gt; [(#EXPOSE|non)&lt;a href=&#034;#URL_ARTICLE&#034;[ rel=&#034;next&#034;(#ID_ARTICLE|=={#GET{suivant}}|oui)][ rel=&#034;prev&#034;(#ID_ARTICLE|=={#GET{precedent}}|oui)]&gt;] #TITRE [(#EXPOSE|non)&lt;/a&gt;] &lt;/li&gt; &lt;/BOUCLE_succession&gt; &lt;/ol&gt; &lt;/B_succession&gt; &lt;/BOUCLE_article&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l.&#160;1&#160;: la boucle englobante du squelette, je masque ici les autres contenus.&lt;/li&gt;&lt;li&gt; l.&#160;2-3&#160;: deux variables dans lesquelles on stockera les num&#233;ros de l'article pr&#233;c&#233;dent et de l'article suivant.&lt;/li&gt;&lt;li&gt; l.&#160;4&#160;: liste dans laquelle on va stocker les id de chaque article de la cha&#238;ne. On initialise la liste avec le num&#233;ro de l'article courant.&lt;/li&gt;&lt;li&gt; l.&#160;5 et 11&#160;: on cherche l'article pr&#233;c&#233;dent.&lt;/li&gt;&lt;li&gt; l.&#160;6&#160;: on ajoute l'article pr&#233;c&#233;dent &#224; la liste des articles de la cha&#238;ne, en &lt;i&gt;d&#233;but de liste&lt;/i&gt;.&lt;/li&gt;&lt;li&gt; l.&#160;9&#160;: on indique l'id de l'article imm&#233;diatement pr&#233;c&#233;dent dans la variable &lt;code&gt;precedent&lt;/code&gt;. Notez le test qui permet de jouer avec la r&#233;cursion de la l.&#160;10 sans changer &#224; chaque fois &lt;code&gt;precedent&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; l.&#160;13 &#224; 20&#160;: la m&#234;me chose que l.&#160;5 &#224; 11, mais pour les articles qui suivent dans la cha&#238;ne. Notez qu'on &#233;tend la liste vers la fin, et non pas vers le d&#233;but, comme pr&#233;c&#233;dement.&lt;/li&gt;&lt;li&gt; l.&#160;23 &#224; 38&#160;: boucle &lt;code&gt;(ARTICLES)&lt;/code&gt; classique, mais on choisit comme &lt; code&gt;id_article&lt;/code&gt; ceux list&#233;s dans le tableau. Notez que &lt;code&gt;{id_article IN &#8230;}&lt;/code&gt;. On notera&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;l.&#160;24&#160;: l'utilisation de &lt;code&gt;#EXPOSE&lt;/code&gt; pour styler diff&#233;remment l'article courant, de m&#234;me l.&#160;25 et 27 pour n'afficher le liens que sur les articles diff&#233;rent de l'article courant.&lt;/li&gt;&lt;li&gt;l.&#160;25 &lt;code&gt;[ rel=&#034;next&#034;(#ID_ARTICLE|=={#GET{suivant}}|oui)]&lt;/code&gt; et son comparse &lt;code&gt;[ rel=&#034;prev&#034;(#ID_ARTICLE|=={#GET{precedent}}|oui)]&lt;/code&gt; qui permet d'ajouter l'attribut &lt;code&gt;rel&lt;/code&gt; &#224; la balise &lt;code&gt;&lt;a&gt;&lt;/code&gt;, si besoin.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Archivage avec redirection</title>
		<link>https://geekographie.maieul.net/56</link>
		<guid isPermaLink="true">https://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="https://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='https://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;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;J'utilise la fonction SPIP .&#034; id=&#034;nh1&#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;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;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>https://geekographie.maieul.net/16</link>
		<guid isPermaLink="true">https://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="https://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>Notifications sur un forum plat</title>
		<link>https://geekographie.maieul.net/15</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/15</guid>
		<dc:date>2010-12-17T10:17:40Z</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 j'utilise le plugin Notifications, pour que les personnes re&#231;oivent les r&#233;ponses &#224; leurs r&#233;actions. J'ai coch&#233; dans la configuration &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Fil de discussion&#160;: les participants au m&#234;me fil de discussion re&#231;oivent les notifications des forums (publics).&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Mais les personnes ne recevaient pas les notifications. Voil&#224; comment j'ai r&#233;solu le probl&#232;me. Le probl&#232;me, c'est que mes forums sont en mode plat. Donc il n'y a pas vraiment de fil de discussion, mais seulement des messages&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Sur ce site j'utilise le plugin &lt;a href=&#034;http://www.spip-contrib.net/Notifications,2360&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Notifications&lt;/a&gt;, pour que les personnes re&#231;oivent les r&#233;ponses &#224; leurs r&#233;actions.&lt;/p&gt;
&lt;p&gt;J'ai coch&#233; dans la configuration &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Fil de discussion&#160;: les participants au m&#234;me fil de discussion re&#231;oivent les notifications des forums (publics).&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Mais les personnes ne recevaient pas les notifications. Voil&#224; comment j'ai r&#233;solu le probl&#232;me.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le probl&#232;me, c'est que mes forums sont en mode &lt;code&gt;{plat}&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;En fait j'utilise le plugin de Romy&#160;: Comments, qui met ce mode&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Donc il n'y a pas vraiment de fil de discussion, mais seulement des messages individuels sans liens, du coup notification ne peut fonctionner.&lt;/p&gt;
&lt;p&gt;La solution est de s'arranger pour avoir un fil de discussion unique.&lt;/p&gt;
&lt;p&gt;Pour cela, j'appel de la mani&#232;re suivante le formulaire de r&#233;action&#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_forum(FORUMS){!par date}{id_article}{0,1}&gt;
#FORMULAIRE_FORUM
&lt;/BOUCLE_forum&gt;
#FORMULAIRE_FORUM
&lt;//B_forum&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ainsi, le message est syst&#233;matiquement post&#233; en r&#233;action au dernier message, et s'il n'y a pas de message, il est post&#233; directement en r&#233;action &#224; l'article, et un fil de discussion est ouvert.&lt;/p&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;En fait j'utilise le plugin de Romy&#160;: &lt;a href=&#034;http://www.spip-contrib.net/Comments-2-pour-SPIP-2&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Comments&lt;/a&gt;, qui met ce mode &lt;code&gt;{plat}&lt;/code&gt;&lt;/p&gt;
&lt;/div&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>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>
