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




<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;#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>



</channel>

</rss>
