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




<item xml:lang="fr">
		<title>Tous mes plugins SPIP</title>
		<link>https://geekographie.maieul.net/223</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/223</guid>
		<dc:date>2018-11-17T18:12: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 liste ci-dessous recense tous les plugins auquel j'ai contribu&#233; significativement dans &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, et qui fonctionnent sur les versions actuellement maintenues de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. Activit&#233; &#233;ditoriale (categorie ), Un site, c'est bien&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Un site &#224; jour, c'est mieux&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! en collaboration avec St&#233;phanie Caron de Clever Age, Chankalan (&#233;volutions), Teddy &lt;span class=&#034;caps&#034;&gt;PAYET&lt;/span&gt; (&#233;volutions). Agenda Fullcalendar Facile (categorie ), Un calendrier de mani&#232;re simple Ajuster intertitre (categorie )&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;La liste ci-dessous recense tous les plugins auquel j'ai contribu&#233; significativement dans &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, et qui fonctionnent sur les versions actuellement maintenues de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Activite-editoriale&#034;&gt;Activit&#233; &#233;ditoriale&lt;/a&gt; (categorie ), &lt;i&gt;Un site, c'est bien&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Un site &#224; jour, c'est mieux&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; en collaboration avec St&#233;phanie Caron de Clever Age, Chankalan (&#233;volutions), Teddy PAYET (&#233;volutions). &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4843&#034;&gt;Agenda Fullcalendar Facile&lt;/a&gt; (categorie ), &lt;i&gt;Un calendrier de mani&#232;re simple
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5344&#034;&gt;Ajuster intertitre&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5487&#034;&gt;Balise #INTRODUCTION_EXPLICITE&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5645&#034;&gt;Balises #&lt;span class=&#034;caps&#034;&gt;MAINTENANT&lt;/span&gt; / #&lt;span class=&#034;caps&#034;&gt;NOW&lt;/span&gt;&lt;/a&gt; (categorie ), &lt;i&gt;Aujourd'hui ou jamais
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4428&#034;&gt;Choix parmi des couleurs&lt;/a&gt; (categorie ), &lt;i&gt;Formidable&#160;: vous avez le choix de la couleur&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4455&#034;&gt;Correction des liens internes&lt;/a&gt; (categorie ), &lt;i&gt;Liens internes&#160;: soyez beaux&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; en collaboration avec Nicolas Dorigny. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Critere-mots&#034;&gt;Crit&#232;re mots&lt;/a&gt; (categorie ), &lt;i&gt;S&#233;lectionner des objets ayant des mots cl&#233;s en communs
&lt;/i&gt; en collaboration avec Fil, RealET (Formulaires). &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/CVT-Upload-1989&#034;&gt;&lt;span class=&#034;caps&#034;&gt;CVT&lt;/span&gt; Upload&lt;/a&gt; (categorie ), &lt;i&gt;T&#233;l&#233;charger proprement des fichiers depuis un formulaire &lt;span class=&#034;caps&#034;&gt;CVT&lt;/span&gt;
&lt;/i&gt; en collaboration avec RastaPopoulos, Tofulm. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Des-jeux-dans-vos-articles&#034;&gt;Des jeux dans vos articles&lt;/a&gt; (categorie ), &lt;i&gt;Cr&#233;ez des jeux ou des exercices de toute sorte.
&lt;/i&gt; en collaboration avec Patrice VANNEUFVILLE. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4487&#034;&gt;Donn&#233;es &lt;span class=&#034;caps&#034;&gt;CTAN&lt;/span&gt;&lt;/a&gt; (categorie ), &lt;i&gt;Le monde &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; rencontre encore plus le monde TeX&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5143&#034;&gt;Emp&#234;cher le double clic sur les formulaires&lt;/a&gt; (categorie ), &lt;i&gt;Ne b&#233;gayez pas&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Plugin-Exclure-secteur&#034;&gt;Exclure secteur&lt;/a&gt; (categorie ), &lt;i&gt;Exclure automatiquement certains secteurs des boucles &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Formidable-le-generateur-de-formulaires&#034;&gt;Formidable&lt;/a&gt; (categorie ), &lt;i&gt;G&#233;n&#233;rateur de formulaires
&lt;/i&gt; en collaboration avec RastaPopoulos, Les D&#233;veloppements Durables. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5233&#034;&gt;Formidable - restauration de l'information d'obligation&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5594&#034;&gt;Formidable&#160;: responsable d'&#233;v&#232;nement&lt;/a&gt; (categorie ), &lt;i&gt;Optimiser le suivi des &#233;v&#232;nements&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5399&#034;&gt;Formidable&#160;: retour &#233;tendu&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5585&#034;&gt;Formidable participation&#160;: champ &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;organisme&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&lt;/a&gt; (categorie ), &lt;i&gt;Orga de tous les pays, inscrivez-vous&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5385&#034;&gt;Formidable participation&#160;: mailsubscriber&lt;/a&gt; (categorie ), &lt;i&gt;G&#233;rer la correspondance avec les participant&lt;span aria-hidden='true'&gt;&#183;&lt;/span&gt;es
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5639&#034;&gt;Formidable &lt;span class=&#034;caps&#034;&gt;PDF&lt;/span&gt;&lt;/a&gt; (categorie ), &lt;i&gt;Papasserie sans peine
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5615&#034;&gt;Formidable &lt;span class=&#034;caps&#034;&gt;SMS&lt;/span&gt;&lt;/a&gt; (categorie ), &lt;i&gt;Une urgence&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Textote moi
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5562&#034;&gt;Formulaire g&#233;n&#233;rateur de QRcode&lt;/a&gt; (categorie ), &lt;i&gt;Autonomie pour les QRcodes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5255&#034;&gt;Gis - Agenda&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4816&#034;&gt;Import ics&lt;/a&gt; (categorie ), &lt;i&gt;Importez vos &#233;v&#233;nements
&lt;/i&gt; en collaboration avec Amaury, Touti. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Sphinx-Indexer&#034;&gt;Indexer&lt;/a&gt; (categorie ), &lt;i&gt;Indexeur de contenus
&lt;/i&gt; en collaboration avec Matthieu Marcillaud, Rastapopoulos, Fil. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4449&#034;&gt;Introduction distinguante&lt;/a&gt; (categorie ), &lt;i&gt;Ne m&#233;langez pas le chapeau et le texte.
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4953&#034;&gt;Koin&#243;s&lt;/a&gt; (categorie ), &lt;i&gt;Faisons commun&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; en collaboration avec Thi&#233;baut (Vall&#233;e du cousin), Cyriaque (Vall&#233;e du cousin). &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Minus-Eviter-les-titres-en-majuscules&#034;&gt;Minus&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/a&gt; (categorie ), &lt;i&gt;Ne criez pas&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5319&#034;&gt;Mod&#232;les avec notes&lt;/a&gt; (categorie ), &lt;i&gt;Des notes (semi-)automatiques
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Moderation-Moderee&#034;&gt;Mod&#233;ration mod&#233;r&#233;e&lt;/a&gt; (categorie ), &lt;i&gt;Am&#233;lioration de la mod&#233;ration
&lt;/i&gt; en collaboration avec Yohann. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4837&#034;&gt;Mots obligatoires&lt;/a&gt; (categorie ), &lt;i&gt;Ne publier que les objets correctement &#233;tiquet&#233;s
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5648&#034;&gt;Nettoyer les r&#233;visions&lt;/a&gt; (categorie ), &lt;i&gt;Conservateur mais pas trop
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/article5049&#034;&gt;Ressourcoth&#232;que&lt;/a&gt; (categorie ), &lt;i&gt;Classer et retrouver des ressources documentaires
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Rubrique-a-l-inscription&#034;&gt;Rubrique &#224; l'inscription&lt;/a&gt; (categorie ), &lt;i&gt;Cr&#233;er une rubrique &#224; l'inscription d'un auteur
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5179&#034;&gt;Saisie de calcul&lt;/a&gt; (categorie ) &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Saisies&#034;&gt;Saisies pour formulaires&lt;/a&gt; (categorie ), &lt;i&gt;&#201;crire facilement des champs de formulaires.
&lt;/i&gt; en collaboration avec Matthieu Marcillaud, RastaPopoulos, Joseph, Les D&#233;veloppements Durables. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Spip-Bible,1125&#034;&gt;Spip-Bible&lt;/a&gt; (categorie ), &lt;i&gt;Pour faire rapidement des citations de la Bible
&lt;/i&gt; en collaboration avec Teddy Payet (Auteur associ&#233;), Cerdic (Id&#233;e du presse-papier). &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5641&#034;&gt;Statut &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Attest&#233;e&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; pour les r&#233;ponses&lt;/a&gt; (categorie ), &lt;i&gt;Attestons rapidement
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/5211&#034;&gt;Tablesorter pour Formidable&lt;/a&gt; (categorie ), &lt;i&gt;Visualiser synth&#233;tiquement les r&#233;ponses
&lt;/i&gt; en collaboration avec Nicod_. &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Titres-typographies&#034;&gt;Titres typographi&#233;s&lt;/a&gt; (categorie ), &lt;i&gt;Typographiez vos titres&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/4625&#034;&gt;Urls par num&#233;ro d'article&lt;/a&gt; (categorie ), &lt;i&gt;Courtes et m&#233;morisables
&lt;/i&gt; &lt;/li&gt; &lt;li&gt;&lt;a href=&#034;https://contrib.spip.net/Zippeur&#034;&gt;Zippeur&lt;/a&gt; (categorie ), &lt;i&gt;Zippez facilement vos fichiers
&lt;/i&gt; en collaboration avec Julien Coste-Louret. &lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Analyse r&#233;trospective des mes activit&#233;s informatiques</title>
		<link>https://geekographie.maieul.net/186</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/186</guid>
		<dc:date>2015-10-06T12:30: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;Dominique Vinck et Florian Jaton, respectivement professeur et assistant en sociologie des sciences &#224; l'&lt;span class=&#034;caps&#034;&gt;UNIL&lt;/span&gt;, m'ont invit&#233; &#224; intervenir dans un cours d'introduction aux Software Studies qu'ils donnent &#224; l'&lt;span class=&#034;caps&#034;&gt;EPFL&lt;/span&gt;, afin de parler de mon exp&#233;rience de d&#233;veloppeur de logiciels libres. Qu'ils en soient remerci&#233;s, non seulement pour l'honneur qu'ils me font, mais aussi parce que cette demande m'a permis de faire une analyse introspective de mon rapport &#224; mes deux logiciels favoris, &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et LaTeX.&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;a href=&#034;http://www.unil.ch/ssp/home/menuinst/enseignants.html?url_params=-v_faculte=40-v_unite=235-v_personne=1045031-mode=fiche&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Dominique Vinck&lt;/a&gt; et &lt;a href=&#034;http://www.unil.ch/ssp/home/menuinst/enseignants.html?url_params=-v_faculte=40-v_unite=235-v_personne=1058267-mode=fiche&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Florian Jaton&lt;/a&gt;, respectivement professeur et assistant en sociologie des sciences &#224; l'&lt;span class=&#034;caps&#034;&gt;UNIL&lt;/span&gt;, m'ont invit&#233; &#224; intervenir dans un &lt;a href=&#034;http://edu.epfl.ch/coursebook/fr/science-technologie-et-societe-a-HUM-114&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;cours d'introduction aux &lt;i&gt;Software Studies&lt;/i&gt;&lt;/a&gt; qu'ils donnent &#224; l'&lt;span class=&#034;caps&#034;&gt;EPFL&lt;/span&gt;, afin de parler de mon exp&#233;rience de d&#233;veloppeur de logiciels libres. Qu'ils en soient remerci&#233;s, non seulement pour l'honneur qu'ils me font, mais aussi parce que cette demande m'a permis de faire une analyse introspective de mon rapport &#224; mes deux logiciels favoris, &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et LaTeX.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Je diffuse donc ci-dessous les diapositives de mon intervention.&lt;/p&gt;
&lt;div class='spip_document_197 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;51&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://geekographie.maieul.net/IMG/pdf/sociologie-informatique.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 60.5 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772795065' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-197 '&gt;&lt;strong&gt;Mon rapport &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; et &#224; LaTeX en quelques diapos&#8230;
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un formulaire d'inscription &#224; une liste de discussion/diffusion avec Formidable</title>
		<link>https://geekographie.maieul.net/147</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/147</guid>
		<dc:date>2014-08-07T13:06:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Certains h&#233;bergeurs proposent des services de listes de diffusion / de discussion sans proposer pour autant de formulaire d'inscription aux dites listes. C'est par exemple le cas de TuxFamily ou de Toile-Libre. L'inscription se fait alors par courriel. Il en est cependant possible d'afficher un formulaire d'inscription sur son site &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, pour faciliter la vie du public. Du reste, on peut &#233;galement le souhaiter pour les h&#233;bergeurs proposant des listes avec formulaire d'inscription&#160;: cela&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Certains h&#233;bergeurs proposent des services de listes de diffusion / de discussion sans proposer pour autant de formulaire d'inscription aux dites listes. C'est par exemple le cas de &lt;a href=&#034;http://tuxfamily.org&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;TuxFamily&lt;/a&gt; ou de &lt;a href=&#034;http://www.toile-libre.org&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Toile-Libre&lt;/a&gt;. L'inscription se fait alors par courriel. Il en est cependant possible d'afficher un formulaire d'inscription sur son site &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, pour faciliter la vie du public&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;Comme je l'ai fait pour la listes des utilisateurs de eledmac.&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Du reste, on peut &#233;galement le souhaiter pour les h&#233;bergeurs proposant des listes avec formulaire d'inscription&#160;: cela permet d'afficher le formulaire sur son propre site, en gardant ainsi une interface uniforme.&lt;/p&gt;
&lt;p&gt;Une mani&#232;re simple de faire ceci est d'utiliser le plugin nomm&#233; &#224; juste titre &#034;&lt;a href=&#034;http://plugins.spip.net/formidable.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Formidable&lt;/a&gt;&#034;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;r2&#034;&gt;1 - Principe de base&lt;/h2&gt;
&lt;p&gt;Les listes de discussions suivent la norme suivante&#160;: une adresse &lt;code&gt;nom_de_la_liste-request@domaine.tld&lt;/code&gt; peut recevoir des inscriptions de configuration de la liste. Pour la liste des utilisateurs de eledmac, l'adresse est donc&#160;: &lt;code&gt;eledmac-request [arobase] lists.tuxfamily.org&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il suffit d'envoyer un mail avec la requ&#234;te comme objet. Dans le cas qui nous int&#233;resse, il suffit de mettre&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;subscribe&lt;/code&gt; si on veut s'inscrire &#224; la liste&lt;/li&gt;&lt;li&gt; &lt;code&gt;unsubscribe&lt;/code&gt; si on veut se d&#233;sinscrire de la liste.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#201;videment, cette email doit &#234;tre envoy&#233; depuis l'adresse qui souhaite s'inscrire.&lt;/p&gt;
&lt;p&gt;Notre formulaire est donc un simple formulaire qui se contente de faire cela... c'est tout.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;2 - Cr&#233;ation du formulaire&lt;/h2&gt;
&lt;p&gt;Nous supposons que vous avez install&#233; &lt;a href=&#034;http://plugins.spip.net/formidable&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;formidable&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dans le menu &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#233;dition&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, se rendre dans &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;formulaires&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, puis choisir &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;cr&#233;er un nouveau formulaire&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;h3 class=&#034;r3&#034;&gt;2.1 - Configuration de base du formulaire&lt;/h3&gt;
&lt;p&gt;Donnez un titre &#224; votre formulaire, un identifiant pour le m&#233;moriser (par exemple &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;inscription-liste-eledmac&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;), indiquez un message de retour pour pr&#233;venir l'internaute qu'il doit confirmer son inscription via le courriel qu'il recevra, et conservez les autres param&#232;tres.&lt;/p&gt;
&lt;p&gt;Validez alors.&lt;/p&gt;
&lt;h3 class=&#034;r3&#034;&gt;2.2 - Cr&#233;ation des champs&lt;/h3&gt;
&lt;p&gt;Vous arrivez alors sur la page d'ajout des champs.&lt;/p&gt;
&lt;div class='spip_document_131 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;36&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH413/ajout-champ-00dbc.png?1760449034' width='500' height='413' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-131 '&gt;&lt;strong&gt;Ajout de champs dans un formulaire
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h4 class=&#034;r4&#034;&gt;2.2.1 - Champ courriel&lt;/h4&gt;
&lt;p&gt;Choisissez d'ajouter une &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Ligne de texte&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; en cliquant sur le bouton ad hoc. Votre champ &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;ligne de texte&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; est alors ajout&#233; au formulaire. Il vous faut maintenant le configurer en cliquant sur le bouton avec un crayon sur une page.&lt;/p&gt;
&lt;div class='spip_document_130 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;45&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH85/ligne-txt-59e36.png?1760449034' width='500' height='85' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-130 '&gt;&lt;strong&gt;Bascule vers l'&#233;dition d'une ligne de texte
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Dans le champ &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Description&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, entrez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Courriel&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;email&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, si vous &#234;tes sur un site anglophone).&lt;/p&gt;
&lt;p&gt;Basculez ensuite dans l'onglet &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Validation&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Cochez la case &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Champ obligatoire&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, et dans le menu d&#233;roulant, choisissez comme v&#233;rification &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Adresse de courriel&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Validez ensuite le champ.&lt;/p&gt;
&lt;h4 class=&#034;r4&#034;&gt;2.2.2 - Champ action&lt;/h4&gt;
&lt;p&gt;Il vous faut maintenant ajouter le bouton radio pour permettre aux utilisateurs de choisir entre l'inscription et la d&#233;sinscription. Cliquez donc sur le bouton ad hoc, puis &#233;ditez le champ, via l'ic&#244;ne avec un crayon sur une page.&lt;/p&gt;
&lt;div class='spip_document_132 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;27&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH122/edition-radio-6f61f.png?1760449034' width='500' height='122' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-132 '&gt;&lt;strong&gt;&#201;dition des boutons radio
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Dans le champ &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Label&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, saissiez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Action&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (ou tout autre terme ad&#233;quat). Dans &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;liste des choix possibles&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, ajouter les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;subscribe|Inscription unsubscribe|D&#233;sinscription&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez bien s&#251;r changez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Inscription&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; / &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;D&#233;sinscription&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; par tous termes appropri&#233;s.&lt;/p&gt;
&lt;p&gt;Dans &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Valeur par d&#233;faut&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, choisissez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Subscribe&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Validez ensuite le champ.&lt;/p&gt;
&lt;h4 class=&#034;r4&#034;&gt;2.2.3 - Validation des champs&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Il est important de ne pas oubliez de valider les champs&lt;/strong&gt;, en cliquant sur le bouton en bas de page.&lt;/p&gt;
&lt;div class='spip_document_133 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;37&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH75/validation-champ-dbc21.png?1760449034' width='500' height='75' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-133 '&gt;&lt;strong&gt;Validation des champs du formulaire
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h3 class=&#034;r3&#034;&gt;2.3 - Configuration des traitements&lt;/h3&gt;
&lt;p&gt;Il ne vous reste plus qu'&#224; configurer le formulaire pour qu'il envoie les mails.&lt;/p&gt;
&lt;p&gt;Cliquez &#224; gauche sur &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Configurez les traitements&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Cochez alors &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Envoyez par courriel&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Dans le formulaire qui appara&#238;t alors, remplissez ainsi les champs&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Destinataires suppl&#233;mentaires&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&#160;: mettre l'adresse -request. Par exemple&#160;: &lt;code&gt;eledmac-request[arobase]tuxfamily.org&lt;/code&gt; (en rempla&#231;ant bien s&#251;r le [arobase]&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Courriel de l'envoyeur&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&#160;: choisissez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Courriel&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (&#233;tonnant non&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Ne pas oubliez de cochez &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Ins&#233;rer le courriel de l'envoyeur dans le champ &#034;From&#034;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; Dans sujet du message, mettre &lt;code&gt;@radio_1@&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#192; partir de la version 3.7.0 de formidable, il faut aussi cocher la case &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Valeurs brutes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Sinon l'objet du message sera &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Inscription&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; et pas &#034;subscribe.&lt;/p&gt;
&lt;div class='spip_document_219 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;23&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH187/valeurs-brutes-43140.png?1760449034' width='500' height='187' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-219 '&gt;&lt;strong&gt;Options valeur brutes
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Validez alors le formulaire.&lt;/p&gt;
&lt;p&gt;Il vous reste alors &#224; faire un test, en remplissant le formulaire avec un email, ext&#233;rieur au domaine de votre site. Par exemple un &lt;a href=&#034;http://www.yopmail.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;yopmail&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il se peut cependant que votre h&#233;bergeur refuse d'envoyer de tels courriels depuis votre site. Dans ce cas, il faudra voir avec lui... ou bien tester via un &lt;span class=&#034;caps&#034;&gt;SMTP&lt;/span&gt; externe, gr&#226;ce au &lt;a href=&#034;http://plugin.spip.net/facteur&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugin facteur&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;3 - Insertion du formulaire dans un article&lt;/h2&gt;
&lt;p&gt;Il ne vous reste plus qu'&#224; ins&#233;rer le formulaire dans un article, via le raccourci&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;&lt;formulaire|formidable|id=identifiant_du_formulaire&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;r2&#034;&gt;4 - Pour allez plus vite&lt;/h2&gt;&lt;div class='spip_document_135 spip_document spip_documents spip_document_file spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;52&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://geekographie.maieul.net/IMG/yaml/formulaire-test.yaml' class=&#034; spip_doc_lien&#034; title='YAML - 1.3 kio' type=&#034;text/yaml&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/yaml-94e8d.svg?1772797874' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-135 '&gt;&lt;strong&gt;Formulaire d'inscription &#224; une liste de discussion
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt; &lt;p&gt;J'ai export&#233; mon formulaire en &lt;code&gt;.yaml&lt;/code&gt;. Vous pouvez le t&#233;l&#233;charger, puis l'importer avec le bouton ad hoc.&lt;/p&gt;
&lt;div class='spip_document_134 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;47&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L223xH213/import-yaml-fdb8f.png?1760449034' width='223' height='213' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-134 '&gt;&lt;strong&gt;Importer un formulaire depuis un ficher .&lt;span class=&#034;caps&#034;&gt;YAML&lt;/span&gt;
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il vous faut ensuite&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; modifier le formulaire, pour lui donner un titre et un identifiant bien &#224; vous.&lt;/li&gt;&lt;li&gt; configurer les traitements, pour modifier l'option &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Destinataires suppl&#233;mentaires&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&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;Comme je l'ai fait pour la listes des utilisateurs de &lt;a href='https://geekographie.maieul.net/147' class=&#034;spip_in&#034;&gt;eledmac&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Automatiser la sauvegarde de son site en local</title>
		<link>https://geekographie.maieul.net/132</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/132</guid>
		<dc:date>2013-12-05T23:45:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;En th&#233;orie, un bon h&#233;bergeur est cens&#233; avoir une copie des donn&#233;es dans un autre local, en cas d'accident. Mais par pr&#233;caution, avoir soi-m&#234;me une copie des donn&#233;es de son site sur son ordinateur peut toujours &#234;tre utile, comme le prouve une m&#233;saventure arriv&#233;e &#224; Teddy Payet. Comme c'est une op&#233;ration r&#233;guli&#232;re, autant avoir un script qui permette d'automatiser la t&#226;che. J'en ai cr&#233;&#233; un pour moi, que je vous propose ici. Objectifs Pouvoir r&#233;cup&#233;rer les documents aussi bien via &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; que&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;En th&#233;orie, un bon h&#233;bergeur est cens&#233; avoir une copie des donn&#233;es dans un autre local, en cas d'accident. Mais par pr&#233;caution, avoir soi-m&#234;me une copie des donn&#233;es de son site sur son ordinateur peut toujours &#234;tre utile, comme le prouve une m&#233;saventure arriv&#233;e &#224; &lt;a href=&#034;http://www.teddypayet.com/Mon-absence-de-la-toile-pendant-19&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Teddy Payet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comme c'est une op&#233;ration r&#233;guli&#232;re, autant avoir un script qui permette d'automatiser la t&#226;che. J'en ai cr&#233;&#233; un pour moi, que je vous propose ici.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Objectifs&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Pouvoir r&#233;cup&#233;rer les documents aussi bien via &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; que via &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; + clefs publique/priv&#233;e.&lt;/li&gt;&lt;li&gt; Ne r&#233;cup&#233;rer que les documents modifi&#233;s depuis la derni&#232;re r&#233;cup&#233;ration.&lt;/li&gt;&lt;li&gt; Inutile de garder en local un &#233;tat du site &#224; chaque sauvegarde&#160;: on s'appuie sur notre outil de sauvegarde locale.&lt;/li&gt;&lt;li&gt; Pouvoir ajouter facilement un nouveau site &#224; sauvegarder en pr&#233;cisant quels sont les fichiers &#224; sauvegarder.&lt;/li&gt;&lt;li&gt; Pouvoir utiliser le trousseau d'acc&#232;s du syst&#232;me pour stocker les mots de passe &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; Pouvoir r&#233;cup&#233;rer une dump &lt;code&gt;.sql&lt;/code&gt; de la base de donn&#233;es MySql.
&lt;h2 class=&#034;h2&#034;&gt;Outils&lt;/h2&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour remplir les deux premiers objectifs, je me sers de &lt;a href=&#034;https://fr.wikipedia.org/wiki/rsync&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;rsync&lt;/a&gt; et de &lt;a href=&#034;https://fr.wikipedia.org/wiki/lftp&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;lftp&lt;/a&gt;. Le premier est install&#233; sous Mac&#160;&lt;span class=&#034;caps&#034;&gt;OS&lt;/span&gt;&#160;X et a priori sous Linux&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;Pour Windows, je n'en sais fichtre rien.&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Le second en revanche n'est pas install&#233; sous Mac&#160;Os&#160;X par d&#233;faut. Mais son installation est tr&#232;s simple, pour peu que l'on n'ait pas peur d'ouvrir une fen&#234;tre de terminal&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;De toute fa&#231;on il faudra le faire pour lancer mon script.&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;D'abord installer &lt;i&gt;brew&lt;/i&gt; si on ne l'a pas d&#233;j&#224; fait. &lt;a href=&#034;http://brew.sh/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Brew&lt;/a&gt; est un programme en ligne de commande qui permet d'installer facilement d'autres programmes en ligne de commande. Dans son terminal, mettre&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;ruby -e &#034;$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Valider par un retour &#224; la ligne&#160;: le script s'installe. Reste &#224; installer lftp:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;brew install lftp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il me restait &#224; g&#233;rer les autres conditions. J'ai d&#233;cid&#233; d'&#233;crire cela en &lt;a href=&#034;https://fr.wikipedia.org/wiki/python&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;python&lt;/a&gt;, parce que je le connais mieux que &lt;a href=&#034;https://fr.wikipedia.org/wiki/bash&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;bash&lt;/a&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Auquel je ne comprend rien.&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt; et que c'est un langage simple mais puissant.&lt;/p&gt;
&lt;p&gt;Python est install&#233; sous Linux et Os&#160;X par d&#233;faut, donc pas de souci. En revanche il faut installer un module compl&#233;mentaire &lt;a href=&#034;https://pypi.python.org/pypi/keyring&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;keyring&lt;/a&gt;, qui permettra de sauvegarder les mots de passe dans le trousseau.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;sudo easy_install keyring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Bref, les pr&#233;-requis sont l&#224;, il ne reste plus qu'&#224; passer au script.&lt;/p&gt;
&lt;p&gt;Enfin, pour r&#233;cup&#233;rer le dump de la base de donn&#233;es, j'utilise le plugin spip &lt;a href=&#034;http://contrib.spip.net/Le-plugin-saveauto-sauvegarde-automatique-de-la-base&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;saveauto&lt;/a&gt;, en configurant pour que les sauvegardes soient faites tous les jours dans le dossier &lt;code&gt;tmp/dump&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Installation et configuration du script&lt;/h2&gt;
&lt;p&gt;T&#233;l&#233;charger le zip&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Ou cloner le projet depuis Github.&#034; id=&#034;nh2-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;, le d&#233;compresser, installer le dossier &#224; l'emplacement de son choix.&lt;/p&gt;
&lt;div class='spip_document_107 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;46&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href=&#034;https://github.com/maieul/sauvegarde-sites/archive/master.zip&#034; class=&#034; spip_doc_lien&#034; title='Zip - ' type=&#034;application/zip&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/zip-f045b.svg?1772795703' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-107 '&gt;&lt;strong&gt;Script de sauvegarde
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-107 '&gt;Derni&#232;re version stable
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Passons maintenant &#224; la configuration du script. Dans son dossier, &#224; c&#244;t&#233; de &lt;code&gt;sauvegarde-site.py&lt;/code&gt;, cr&#233;er un fichier &lt;code&gt;config.py&lt;/code&gt;, qui contiendra les param&#232;tres du fichier.&lt;/p&gt;
&lt;p&gt;La premi&#232;re ligne contient le chemin absolu vers le dossier o&#249; sera stock&#233; toutes les sauvegardes des sites. Par exemple chez moi&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;dossier = &#034;/Users/maieul/Sites/sauvegarde&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les lignes suivantes vont contenir les descriptions des sites &#224; sauvegarder, sous la forme&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;sites=[ { parametre pour un site }, { parametres pour un autre site }, etc ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un param&#232;tre est une &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;clef&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mise entre guillemets, suivi de &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#160;:&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; puis suivi de sa valeur. Soit g&#233;n&#233;ralement une cha&#238;ne entre guillemets, ou &#224; d&#233;faut une liste de cha&#238;ne entre crochets. Chaque param&#232;tre est s&#233;par&#233; du suivant par une virgule.&lt;/p&gt;
&lt;p&gt;Ainsi donc&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;{ &#034;param1&#034; : &#034;valeur 1&#034;, &#034;param2&#034; : &#034;valeur 2&#034;, &#034;param3&#034; : [&#034;valeur3a&#034;,&#034;valeur3b&#034;] }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le script fonctionne avec sept&#160;param&#232;tres&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;&#034;mode&#034;&lt;/code&gt; qui indique comment on r&#233;cup&#232;re les fichiers. Deux valeurs sont possibles &lt;code&gt;&#034;SSH&#034;&lt;/code&gt; ou &lt;code&gt;&#034;FTP&#034;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;login&#034;&lt;/code&gt; qui indique le login du serveur o&#249; l'on r&#233;cup&#232;re les fichiers. Par exemple&#160;: &lt;code&gt;&#034;toto&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;serveur&#034;&lt;/code&gt; qui indique l'adresse du serveur o&#249; l'on r&#233;cup&#232;re les fichiers, par exemple&#160;: &lt;code&gt;&#034;ftp.toto.net&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;base&#034;&lt;/code&gt; qui indique le chemin sur le serveur du dossier o&#249; se trouve le site, par exemple&#160;: &lt;code&gt;&#034;www/sites/toto&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;recuperation&#034;&lt;/code&gt; qui indique les chemins, depuis la base du site, des dossiers &#224; r&#233;cuperer. Typiquement avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: &lt;code&gt;['IMG','tmp/dump']&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;exclure&#034;&lt;/code&gt; qui indique les dossiers &#224; ne pas r&#233;cup&#233;rer. Typiquement avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: &lt;code&gt;'exclure':['article_PDF','distant','.svn','.ok']&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;dossier&#034;&lt;/code&gt; qui indique dans quel sous-dossier vont &#234;tre rang&#233;s les fichiers r&#233;cup&#233;r&#233;s. Par exemple &lt;code&gt;&#034;toto&#034;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ainsi un fichier &lt;code&gt;config.py&lt;/code&gt; minimum pourra &#234;tre le suivant&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;dossier = &#034;/Users/maieul/Sites/sauvegarde&#034; sites=[ { 'mode':'FTP', 'login':'toto', 'serveur':'ftp.toto.org', 'base':'www/sites/toto', 'recuperation':['IMG','tmp/dump'], 'exclure':['article_PDF','distant','.svn','.ok'], 'dossier':'toto' } ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Lancer le script&lt;/h2&gt;
&lt;p&gt;Il ne reste plus qu'&#224; lancer le script via&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;python chemin-du-fichier-sauvegarde-sites.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le script r&#233;cup&#232;re l'ensemble des sites en les mettant chacun dans le dossier correspondant&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la premi&#232;re fois qu'il rencontre un site &#224; r&#233;cup&#233;rer par ftp, il s'interrompt et vous demande le mot de passe.&lt;/li&gt;&lt;li&gt; les fois suivantes, il ne r&#233;cup&#232;re que les fichiers modifi&#233;s, et, le cas &#233;ch&#233;ant, supprime de la version locale les fichiers supprim&#233;s de la version distante&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-5&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Encore une fois, mon script est simple&#160;: pour avoir un historique du site, (&#8230;)&#034; id=&#034;nh2-5&#034;&gt;5&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; &#224; la fin, ils vous indique les sites dont la sauvegarde a &#233;chou&#233;. Ils ne vous indique pas plus en d&#233;tails les causes de l'&#233;chec, mais les informations sont indiqu&#233;s plus haut, dans les messages affich&#233;s au cour de l'ex&#233;cution.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour ma part, je lance le script tous les matins en arrivant au travail, et je me suis cr&#233;&#233; un &lt;a href=&#034;http://gvallver.perso.univ-pau.fr/?p=265&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;alias bash&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Limites&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Script non con&#231;u pour Windows. En particulier je me base sur l'hypoth&#232;se que les chemins de fichiers sont indiqu&#233;s avec des &lt;code&gt;/&lt;/code&gt; et non des &lt;code&gt;\&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Si vous demandez &#224; r&#233;cup&#233;rer par &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; un dossier qui n'existe pas, vous r&#233;cup&#233;rez l'ensemble du site.&lt;/li&gt;&lt;li&gt; Si votre mdp &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; a chang&#233;, il vous faut le supprimer dans le trousseau d'acc&#232;s. Il est enregistr&#233; avec un titre sous la forme&#160;: &lt;code&gt;sauvegarde login@serveur&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Ce script est beaucoup plus simple et puissant que mon pr&#233;c&#233;dent, que je n'avais os&#233; publier, m&#234;me si j'en avais donn&#233; &lt;a href='https://geekographie.maieul.net/19' class=&#034;spip_in&#034;&gt;des pr&#233;misses&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;Pour Windows, je n'en sais fichtre rien.&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;De toute fa&#231;on il faudra le faire pour lancer mon script.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Auquel je ne comprend rien.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Ou cloner le projet depuis &lt;a href=&#034;https://github.com/maieul/sauvegarde-sites&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-5&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-5&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-5&#034; rev=&#034;appendix&#034;&gt;5&lt;/a&gt;] &lt;/span&gt;Encore une fois, mon script est simple&#160;: pour avoir un historique du site, on s'appuiera sur le syst&#232;me de sauvegarde local.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<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;r2&#034;&gt;5 - 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;r2&#034;&gt;6 - 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>Jouons un peu avec |image_masque</title>
		<link>https://geekographie.maieul.net/98</link>
		<guid isPermaLink="true">https://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="https://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='https://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='https://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;r2&#034;&gt;5 - 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='https://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;r2&#034;&gt;6 - 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>https://geekographie.maieul.net/97</link>
		<guid isPermaLink="true">https://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="https://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='https://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;#nb2-1&#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;nh2-1&#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;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;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>Jeux de squelettes sous forme de plugin pour SPIP&#160;3</title>
		<link>https://geekographie.maieul.net/93</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/93</guid>
		<dc:date>2012-07-23T15:29:48Z</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 un pr&#233;c&#233;dent article, j'expliquais pourquoi et comment distribuer un jeu de squelettes sous forme de plugin. Cet article est une simple adaptation pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;3. Les raisons de distribuer un jeux de squelette sous forme de plugin n'ont pas chang&#233;&#160;: je ne les r&#233;p&#232;te donc pas. En revanche, le passage &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3 a introduit la transformation de plugin.xml &#224; paquet.xml. Ces changements sont li&#233;s &#224; la volont&#233; d'avoir un formalisme plus important et plus propre. Voici donc un fichier&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans un pr&#233;c&#233;dent article, j'expliquais &lt;a href='https://geekographie.maieul.net/3' class=&#034;spip_in&#034;&gt;pourquoi et comment distribuer un jeu de squelettes sous forme de plugin&lt;/a&gt;. Cet article est une simple adaptation pour &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;3.&lt;/p&gt;
&lt;p&gt;Les raisons de distribuer un jeux de squelette sous forme de plugin n'ont pas chang&#233;&#160;: je ne les r&#233;p&#232;te donc pas. En revanche, le passage &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3 a introduit la transformation de &lt;code&gt;plugin.xml&lt;/code&gt; &#224; &lt;code&gt;paquet.xml&lt;/code&gt;. Ces changements sont li&#233;s &#224; la volont&#233; d'avoir un formalisme plus important et plus propre. Voici donc un fichier paquet.xml minimal pour proposer un jeu de squelettes sous forme de paquet.xml. On lira &lt;a href=&#034;http://plugins.spip.net/redaction-du-paquet-xml.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;les sp&#233;cifications du &lt;code&gt;paquet.xml&lt;/code&gt;&lt;/a&gt; pour aller plus loin.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;xml&#034; class='spip_code spip_code_block language-xml' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;paquet prefix='prefix' categorie='squelette' version='x.y.z' etat='dev/test/stable' compatibilite=&#034;compatibilit&#233; de version SPIP&#034; &gt; &lt;nom&gt;Nom du plugin&lt;/nom&gt; &lt;auteur lien=&#034;siteweb&#034; mail=&#034;auteur@domaine.tld&#034;&gt;Nom de l'auteur&lt;/auteur&gt; &lt;licence lien=&#034;siteweb&#034;&gt;Licence&lt;/licence&gt; &lt;necessite nom=&#034;prefixplugin&#034; compatibilite=&#034;une compatibilite&#034; /&gt; &lt;/paquet&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Selon la documentation officielle, la compatibilit&#233; prend l'une des formes suivantes&#160;:&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; [v1&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;v2] qui correspond &#224; v1 &lt;= &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &lt;= v2&lt;/li&gt;&lt;li&gt; [v1&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;[ qui correspond &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &gt;= v1&lt;/li&gt;&lt;li&gt; [&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;v2[ qui correspond &#224; &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; &lt; v2&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;et toutes les autres combinaisons avec inclusion ou pas des bornes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ainsi pour indiquer une compatibilit&#233; sur toute la branche &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3, mettre&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='xml'&gt;&lt;code&gt;&lt;paquet prefix='prefix' categorie='squelette' version='x.y.z' etat='dev/test/stable' compatibilite=&#034;[3.0.0;3.0.*]&#034; &gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#192; noter que ni la balise &lt;code&gt;auteur&lt;/code&gt; ni la balise &lt;code&gt;licence&lt;/code&gt; ne sont obligatoires, et leurs attributs sont facultatifs. En outre, on doit mettre une balise &lt;code&gt;auteur&lt;/code&gt; par auteur.&lt;/p&gt;
&lt;p&gt;Vous &lt;strong&gt;devez&lt;/strong&gt; choisir entre l'un des trois &#233;tats du squelette&#160;: dev, test, ou stable. Le prefix du squelette doit &#234;tre parlant mais court. Vous pouvez pr&#233;ciser dans les attributs &lt;code&gt;documentation&lt;/code&gt; et &lt;code&gt;demonstration&lt;/code&gt; de la balise &lt;code&gt;paquet&lt;/code&gt; l'url de la documentation et du site de d&#233;monstration.&lt;/p&gt;
&lt;p&gt;En ce qui concerne la balise &lt;code&gt;necessite&lt;/code&gt;, il faut en mettre une par plugin n&#233;cessaire, en mettant comme valeur de l'attribut &lt;code&gt;nom&lt;/code&gt; le pr&#233;fixe du plugin demand&#233;.&lt;/p&gt;
&lt;p&gt;Vous pouvez aussi pr&#233;ciser les versions compatibles de ces plugins, via l'attribut &lt;code&gt;compatibilite&lt;/code&gt;, ayant la m&#234;me syntaxe que pour la balise &lt;code&gt;paquet.xml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il ne faut pas mettre de num&#233;ro de version dans le prefix ni dans le titre&#160;: l'attribut &lt;code&gt;version&lt;/code&gt; sert &#224; cela. Cette attribut doit avoir la forme &lt;code&gt;x.y.z&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un changement de X indique un changement majeure (rupture de compatibilit&#233;, r&#233;organisation totale du code).&lt;/li&gt;&lt;li&gt; Un changement de Y indique un changement mineure (nouvelle fonctionalit&#233;).&lt;/li&gt;&lt;li&gt; Un changement de Z indique une correction de bug.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est tr&#232;s fortement demand&#233;e de mettre les trois chiffres pour une version d'un squelette.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;7 - Le fichier de langue&lt;/h2&gt;
&lt;p&gt;Avec &lt;code&gt;paquet.xml&lt;/code&gt; certains &#233;l&#233;ments doivent &#234;tre indiqu&#233;s dans des &lt;a href=&#034;http://programmer.spip.net/Fichiers-de-langues&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;fichiers de langue&lt;/a&gt;. Ces fichiers doivent &#234;tre situ&#233;s dans le dossier &lt;code&gt;lang&lt;/code&gt; du plugin, et avoir un nom sous la forme&#160;: &lt;code&gt;paquet-{pr&#233;fixe_du_plugin}_{code_de_langue}.php&lt;/code&gt;. Par exemple, pour un jeux de squelette dont le prefix est &lt;code&gt;toto&lt;/code&gt;, les cha&#238;nes de langues de descriptions du squelette seront &#224; placer dans &lt;code&gt;lang/paquet-toto_fr.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il existe deux cha&#238;nes de langues &lt;strong&gt;quasi-obligatoires&lt;/strong&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='xml'&gt;&lt;code&gt;&lt;?php $GLOBALS[$GLOBALS['idx_lang']] = array( 'prefix_description' =&gt; 'Description aussi succincte que possible du plugin, pas une documentation.', 'prefix_slogan' =&gt; 'Slogan du plugin' ); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&#034;r2&#034;&gt;8 - Et le fichier &lt;code&gt;options.php&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Dans la pr&#233;c&#233;dente version de cet article, je pr&#233;sentais rapidement un fichier &lt;code&gt;options.php&lt;/code&gt; recommand&#233;s. Ce fichier n'a plus de sens pour une distribution minimale d'un jeu de squelette, puisque &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;3 s'occupe automatiquement de supprimer les num&#233;ros devant les titres.&lt;/p&gt;
&lt;p&gt;Cependant, pour une jeu de squelette propre &#224; votre organisation et non g&#233;n&#233;rique, vous pouvez mettre un fichier &lt;code&gt;prefix_options.php&lt;/code&gt; afin d'augmenter le quotat de cache, en mettant les lignes suivantes (pour augmenter &#224; 100 Mo le quota de cache&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;&lt;?php $GLOBALS['quota_cache'] = 100; ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&#034;r2&#034;&gt;9 - V&#233;rifier son paquet.xml&lt;/h2&gt;
&lt;p&gt;On pourra utiliser l'outil de &lt;a href=&#034;http://plugins.spip.net/validation/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;v&#233;rification en ligne pour s'assurer de la conformit&#233; du fichier &lt;code&gt;paquet.xml&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les diff&#233;rents modes d'inclusion de SPIP</title>
		<link>https://geekographie.maieul.net/81</link>
		<guid isPermaLink="true">https://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="https://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='https://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;r2&#034;&gt;10 - 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;r2&#034;&gt;11 - &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;#nb3-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;nh3-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='https://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;r2&#034;&gt;12 - 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;#nb3-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;nh3-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;r2&#034;&gt;13 - 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;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;Toute suggestion d'am&#233;lioration est la bienvenue.&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;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>G&#233;rer beaucoup de sites SPIP en local sous MacOsX</title>
		<link>https://geekographie.maieul.net/78</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/78</guid>
		<dc:date>2012-01-11T15:38:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Cet article ne s'adresse pas aux SPIPeurs d&#233;butants qui souhaiteraient cr&#233;er un site web en local sous Mac. Un article existe d&#233;j&#224; sur le sujet. Non, cet article s'adresse aux personnes qui souhaitent g&#233;rer beaucoup de site web en local en n'ayant qu'une installation de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; par version, autrement dit en mutualisant le noyau de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. J'y d&#233;taille ma pratique, que j'utilise depuis trois ans, donc que j'estime m&#251;re. Principe Je d&#233;veloppe en local 30 sites. Chaque site que je d&#233;veloppe&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Cet article ne s'adresse pas aux SPIPeurs d&#233;butants qui souhaiteraient cr&#233;er un site web en local sous Mac. &lt;a href=&#034;http://www.spip-contrib.net/Installer-SPIP-sous-Mac-OS-X-avec-MAMP&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Un article existe d&#233;j&#224; sur le sujet&lt;/a&gt;. Non, cet article s'adresse aux personnes qui souhaitent g&#233;rer beaucoup de site web en local en n'ayant qu'une installation de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; par version, autrement dit en mutualisant le noyau de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;J'y d&#233;taille ma pratique, que j'utilise depuis trois ans, donc que j'estime m&#251;re.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;r2&#034;&gt;14 - Principe&lt;/h2&gt;
&lt;p&gt;Je d&#233;veloppe en local 30 sites. Chaque site que je d&#233;veloppe poss&#232;de une adresse r&#233;elle, par exemple &lt;a href=&#034;http://maieul.net&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://maieul.net&lt;/a&gt;&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;Je sais, c'est un peu narcissique, mais que voulez-vous&#8230;&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, correspondant &#224; la version cours de production, et une adresse locale, correspondante &#224; la version en cours de d&#233;veloppement.&lt;/p&gt;
&lt;p&gt;Par principe, chaque adresse d'un site local termine par &lt;code&gt;.dev&lt;/code&gt;. Par exemple &lt;code&gt;maieul.dev&lt;/code&gt;, &lt;code&gt;geek.dev&lt;/code&gt;, &lt;code&gt;maman.dev&lt;/code&gt; etc. Pourquoi &lt;code&gt;.dev&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Parce que cette extension n'existe pas, donc je suis certain que lorsque j'utilise &lt;code&gt;.dev&lt;/code&gt; je suis en version locale.&lt;/p&gt;
&lt;p&gt;Je vais dire &#224; mon ordinateur, via la modification d'un fichier cach&#233;, d'orienter mes adresses en &lt;code&gt;.dev&lt;/code&gt; vers l'&lt;a href=&#034;https://fr.wikipedia.org/wiki/IP&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;&lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;IP&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; &lt;code&gt;127.0.0.1&lt;/code&gt;, autrement dit vers mon propre ordinateur.&lt;/p&gt;
&lt;p&gt;Cons&#233;quent&#160;: lorsque dans mon navigateur je frapperais &lt;code&gt;http://maieul.dev&lt;/code&gt;, celui-ci me redirigera vers 127.0.0.1. L&#224;, mon serveur local, &lt;span class=&#034;caps&#034;&gt;MAMP&lt;/span&gt;, me renverra vers mon &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, que j'aurais organis&#233; selon le principe de la mutualisation facile, c'est &#224; dire &#224; que j'aurais r&#233;gl&#233; pour avoir un seul noyau &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; pour plusieurs sites (par exemple &lt;code&gt;maman.dev&lt;/code&gt;, &lt;code&gt;papa.dev&lt;/code&gt; etc.)&lt;/p&gt;
&lt;p&gt;Par ailleurs, un site fera exception &lt;code&gt;localhost&lt;/code&gt;&#160;: ce site sert de brouillon pour toutes les exp&#233;riences.&lt;/p&gt;
&lt;p&gt;De plus, je souhaite pouvoir disposer de diff&#233;rentes branches de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: je souhaite pouvoir orienter vers la branche 2.0.z ou vers la branche 2.1.z ou vers la branche 3.0.z selon le cas. En revanche, je souhaite pouvoir facilement mettre &#224; jour une branche.&lt;/p&gt;
&lt;p&gt;Je vais donc cr&#233;er un dossier par branches, avec dans chaque dossier une mutualisation. Je configurerais mon serveur Apache local (install&#233; via &lt;span class=&#034;caps&#034;&gt;MAMP&lt;/span&gt;) pour qu'il me renvoi sur l'un ou l'autre des dossiers selon l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; du site.&lt;/p&gt;
&lt;p&gt;Bon, tout ceci c'&#233;tait la th&#233;orie, passons &#224; la pratique.&lt;/p&gt;
&lt;p&gt;Cette pratique n&#233;cessite d'utiliser les Terminal, pour frapper quelques commandes.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;15 - Pr&#233;parer les versions de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Dans le terminal, rendons-nous dans le dossier &lt;code&gt;sites&lt;/code&gt; du r&#233;pertoire de d&#233;part&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;cd ~/sites&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis r&#233;cup&#233;rons les dernieres versions stables des diff&#233;rentes branches de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;. &lt;a href=&#034;http://core.spip.org/projects/spip/repository/show/tags&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Ces versions sont situ&#233;es dans le dossier tags du serveur &lt;span class=&#034;caps&#034;&gt;SVN&lt;/span&gt; de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;svn co svn://trac.rezo.net/spip/tags/spip-2.0.9 SPIP 20 svn co svn://trac.rezo.net/spip/tags/spip-2.1.12 SPIP21&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et soyons fous, prenons m&#234;me la derni&#232;re version de dev de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, instable (pour le moment c'est &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 3)&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;svn co svn://trac.rezo.net/spip/spip SPIPdev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je me retrouve donc dans mon dossier &lt;code&gt;sites&lt;/code&gt; avec trois dossiers&#160;: &lt;code&gt;SPIP20&lt;/code&gt; &lt;code&gt;SPIP21&lt;/code&gt; et &lt;code&gt;SPIPdev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par d&#233;faut mes sites pointeront vers &lt;code&gt;SPIP21&lt;/code&gt;. Les autres sites seront des exceptions.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;16 - Pr&#233;parer la mutualisation&lt;/h2&gt;
&lt;p&gt;Maintenant rendons-nous dans le dossier &lt;code&gt;SPIP21&lt;/code&gt; pour pr&#233;parer le chemin &#224; la mutualisation des sites &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;cd ~/SPIP21&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;D'abord il faut r&#233;cup&#233;rer le plugin mutualisation facile&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;svn://zone.spip.org/spip-zone/_plugins_/mutualisation&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite il me faut copier le fichier &lt;code&gt;mes_options.php&lt;/code&gt; dans le dossier &lt;code&gt;config&lt;/code&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;cp mutualisation mes_options.php.txt mes_options.php&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis ouvrir le fichier &lt;code&gt;config/mes_options.php&lt;/code&gt; avec le logiciel de mon choix.&lt;/p&gt;
&lt;p&gt;Il va falloir r&#233;gler pour indiquer les r&#233;glages MySQL de Mamp.&lt;/p&gt;
&lt;p&gt;Voici le contenu de ce fichier&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;&lt;?php /* * Inscrire ici le nom du site d'administration du tableau de bord * de la mutualisation (ou plusieurs, separes par des virgules) * (dans cet exemple, 'scriibe.net' est le top level domain, TLD) * pour autoriser tous les sites, ne pas definir la constante ; * Si le site maitre n'est pas dans sites/ mais a la racine, mettre '' * et ajouter 'mutualisation' dans $dossier_squelettes */ define ('_SITES_ADMIN_MUTUALISATION', 'scriibe.net'); if (!defined(&#034;_ECRIRE_INC_VERSION&#034;)) return; if (!is_readable (_DIR_RACINE.'mutualisation/mutualiser.php')) { echo _L(&#034;Fichier 'mutualisation/mutualiser.php' manquant dans la racine &#034; . _DIR_RACINE); exit; } require _DIR_RACINE.'mutualisation/mutualiser.php'; /* placer dans ce tableau les sites ou l'on ne veut pas la redirection canonique */ $www = array(); $site = str_replace('www.', '', $_SERVER['HTTP_HOST']); if ($site != $_SERVER['HTTP_HOST'] AND !in_array($site, $www)) { include_spip('inc/headers'); $req = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/'; if (isset($_SERVER['HTTPS']) AND test_valeur_serveur($_SERVER['HTTPS'])) $protocole = 'https'; elseif (!isset($_SERVER[&#034;SCRIPT_URI&#034;]) OR !($p = strpos($_SERVER[&#034;SCRIPT_URI&#034;], '://'))) $protocole = 'http'; else $protocole = substr($_SERVER[&#034;SCRIPT_URI&#034;],0,$p); redirige_par_entete($protocole . '://' . $site . $req); } // Compatibilite avec le &#034;:&#034; de $dossier_squelettes // Si l'url indique explicitement un port (grace a &#034;:&#034;) // tout eliminer s'il s'agit du port 80 // et remplacer &#034;:&#034; par _ pour les autres ports if (strpos($site, ':')) { if (preg_match('/:80$/', $site)) $site = substr($site,-3); else $site = str_replace(':', '_', $site); } define ('_INSTALL_SITE_PREF', prefixe_mutualisation($site)); define ('_INSTALL_NAME_DB', 'mu_'. _INSTALL_SITE_PREF); define ('_INSTALL_SERVER_DB', 'mysql'); define ('_INSTALL_HOST_DB', 'localhost'); define ('_INSTALL_USER_DB', 'loginsql'); define ('_INSTALL_PASS_DB', '123456HDJ'); /* mettre en commentaire la ligne suivante si vous utilisez l'option table_prefixe plus bas dans la config */ define ('_INSTALL_TABLE_PREFIX', 'spip'); /* * Si le nom du serveur est different du nom dns, * ca peut parfois poser probleme * il faut alors le definir ici */ # define ('_INSTALL_HOST_DB_LOCALNAME', 'nom_serveur'); /* * Si le serveur n'est pas mysql, il faut le preciser obligatoirement. * # define ('_INSTALL_SERVER_DB', 'pg'); // mysql|pg|sqlite2|sqlite3 * * /!\ En PG, il est conseille d'utiliser la creation d'utilisateur SQL */ /* * Creer automatiquement les users SQL (pg|mysql) * * Cela permet * - d'avoir un utilisateur root possedant les droits * de creation de bases (cet utilisateur possedant obligatoirement * une base a son nom en PG - PG ne se connecte pas sans donner un nom de bdd) * - de creer des utilisateurs sql automatiquement * ne possedant que les droits d'administation * de leur base de donnee qui sera creee * * Il faut remplacer alors * _INSTALL_(USER|PASS)_DB par _INSTALL_(USER|PASS)_DB_ROOT * * et ajouter dans demarrer_site l'option * 'creer_user_base' =&gt; true */ # define ('_INSTALL_USER_DB_ROOT', 'mon_root'); # define ('_INSTALL_PASS_DB_ROOT', '********'); /* * Creer les bases de donnees via un ping sur une URL (methode AlternC) * * Il suffit de renseigner l'option url_creer_base, en lui passant les bons parametres : * 'url_creer_base' =&gt; 'https://bureau.tld/admin/sql_doadd.php?username=USER&amp;password=PASS&amp;dbn='.prefixe_mutualisation($site) */ /* * Transformer sur les pages publiques les url des images * /sites/mon_site/IMG/* -&gt; /IMG/* * /sites/mon_site/local/* -&gt; /local/* * * - Necessite le mod_rewrite (reecriture d'url) d'apache * - Ne fonctionne qu'avec des mutualisations de nom de domaine * ('http_host' : http://mon_site_mutu.tld) * (donc pas avec une mutualisation de repertoire - http://site/mon_spip_mutu/) * * et ajouter dans demarrer_site l'option * 'url_img_courtes' =&gt; true * * Il est possible de regenerer les fichiers .htaccess * crees automatiquement dans /IMG et /local * grace a ?var_mode=creer_htaccess_img * */ demarrer_site($site, array( 'creer_site' =&gt; true, // Creer ou non le site s'il n'existe pas (defaut: false) 'creer_base' =&gt; true, // Creer ou non la base de donnee si elle n'existe pas (false) 'creer_user_base' =&gt; false, // Creer ou non un utilisateur pour la nouvelle base de donnee (false) 'mail' =&gt; '', // Adresse mail pour recevoir un mail lors d'une creation de site mutualise ('') 'code' =&gt; 'ecureuil', // Code d'activation ('ecureuil') 'table_prefix' =&gt; false, // Definir automatiquement le prefixe de table (false) ... mettre true si tous les sites dans la meme base 'cookie_prefix' =&gt; true, // Definir automatiquement le prefixe de cookie (false) 'repertoire' =&gt; 'sites', // Nom du repertoire contenant les sites mutualises ('sites') 'url_img_courtes' =&gt; true, // Utiliser la redirection des URL d'images courtes dans la partie publique (false) // /!\ il faut qu'apache ait le droit d'ecrire dans les dossiers IMG/ et local/ a la racine du site ! // C'est la que la mutualisation va ecrire les regles de redirection automatiques pour les images de chaque site # 'utiliser_panel' =&gt; false, // Utiliser une table externe pour recuperer des identifiants ... (code, user, pass) permettant a un utilisateur d'installer le site (false) # 'annonce' =&gt; '&lt;p&gt;Un service propos&amp;eacute; par &lt;a href=&#034;http://www.spip.net/&#034;&gt;la communaut&amp;eacute; SPIP&lt;/a&gt;&lt;/p&gt;', // Texte a afficher en bas du formulaire d'activation de la mutualisation 'url_creer_base' =&gt; '' // Creer la base de donnees via une URL (methode AlternC) ) ); /* * Notes concernant SQLite * * 1) creer_base = false * Avec SQLite, il est inutile de mettre creer_base a true. * Si creer_base est true, une base sera cree (par l'outil de mutualisation) * dans le repertoire defini par la constante _DIR_DB. * * Si cette constante n'est pas renseignee, elle vaudra * _DIR_ETC/bases/ soit : config/bases/, ce qui ne correspond pas * a l'emplacement du futur site : sites/X/config/bases. * * En laissant l'option a false, SPIP creera la base de donnee * au moment de l'installation (exec=install) et a ce moment * la, _DIR_ETC vaudra 'sites/X/config' donc la base sera stockee * ou il faut si _DIR_DB n'est pas defini. * * 2) creer_user_base = false * SQLite ne gerant pas de droits d'utilisateurs, * (les droits sont ceux du fichier .sqlite) * mettre true provoquera des erreurs (je suppose) * * 3) constantes a definir : * define ('_INSTALL_SERVER_DB', 'sqlite3'); // sqlite2 ou sqlite3 * define ('_INSTALL_NAME_DB', 'mu_'.prefixe_mutualisation($site)); * * les constantes _INSTALL_(HOST|PASS|USER)_DB sont inutiles. */ /* * Notes concernant MySQL * * - Pour la creation d'utilisateurs MYSQL * (creer_base+creer_user_base) * il est possible de definir les droits de ces utilisateurs avec la constante * _PRIVILEGES_MYSQL_USER_BASE (ici avec les valeurs utilisees par defaut) : * * define('_PRIVILEGES_MYSQL_USER_BASE','Alter, Select, Insert, Update, Delete, Create, Drop'); * */ ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les lignes &#224; changer sont les lignes en mettant 44 et 45&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt; define ('_INSTALL_USER_DB', 'root'); define ('_INSTALL_PASS_DB', 'root');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il nous reste ensuite &#224; cr&#233;er un r&#233;pertoire &lt;code&gt;sites&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;mkdir sites&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;r2&#034;&gt;17 - Affinage&lt;/h2&gt;
&lt;p&gt;Comme je suis sur un site local, donc de dev, je ne veux pas de cache. Je met donc dans le fichier &lt;code&gt;mes_options.php&lt;/code&gt; la ligne suivante&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='php'&gt;&lt;code&gt;define('_NO_CACHE',-1);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans le dossier &lt;code&gt;extensions&lt;/code&gt;, je peux mettre tout les plugins que je souhaite actifs automatiquement pour l'ensemble des sites. Dans le dossier &lt;code&gt;plugins&lt;/code&gt;, je met les plugins qui ne sont pas automatiquement actif.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;18 - R&#233;p&#233;tition pour les autres versions de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Il me faut installer la mutualisation dans chaque dossier correspondant &#224; chaque version de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;19 - Installation et Configuration de Mamp&lt;/h2&gt;
&lt;p&gt;Tout d'abord, v&#233;rifier dans les Pr&#233;f&#233;rences Syst&#232;me que le partage web n'est pas activ&#233;.
Puis &lt;a href=&#034;http://www.mamp.info/en/index.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;t&#233;l&#233;charger &lt;span class=&#034;caps&#034;&gt;MAMP&lt;/span&gt;&lt;/a&gt; et l'installer.&lt;/p&gt;
&lt;p&gt;Ouvrir &lt;span class=&#034;caps&#034;&gt;MAMP&lt;/span&gt; dans le dossier &lt;code&gt;MAMP&lt;/code&gt; du dossier &lt;code&gt;Application&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans les r&#233;glages, aller dans &lt;code&gt;ports&lt;/code&gt;, et mettre le port Apache sur 80.&lt;/p&gt;
&lt;p&gt;Ensuite comme je ne d&#233;sire pas renvoyer mes sites syst&#233;matiquement vers le m&#234;me dossier, il va falloir faire une intervention &lt;code&gt;&#224; la main&lt;/code&gt; dans les fichiers de &lt;span class=&#034;caps&#034;&gt;MAMP&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Ouvrir le dossier &lt;code&gt;/Applications/MAMP/conf/Apache&lt;/code&gt; et faire une copie de s&#233;curit&#233; du fichier &lt;code&gt;httpd.conf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Puis l'ouvrir avec un &#233;diteur de texte.&lt;/p&gt;
&lt;p&gt;Chercher les lignes o&#249; il est &#233;crit&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;# MAMP DOCUMENT_ROOT !! Don't remove this line !! DocumentRoot &#034;/Applications/MAMP/htdocs&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et faire exactement ce qu'il est dit de ne pas faire, en remplacant &lt;code&gt;DocumentRoot &#034;/Applications/MAMP/htdocs&#034;&lt;/code&gt; par &lt;code&gt;Include /Applications/MAMP/conf/Apache/vhost.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Par cela, je signale que je veux que la gestion des dossiers se fasse dans un fichier &lt;code&gt;vhost.conf&lt;/code&gt; du dossier &lt;code&gt;/Applications/MAMP/conf/Apache/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je cr&#233;e ce fichier. Voici ce que j'y met&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;&lt;VirtualHost *&gt; DocumentRoot &#034;/Users/maieul/Sites/SPIP21&#034; &lt;/VirtualHost&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#201;videmment, il faut remplacer &lt;code&gt;maieul&lt;/code&gt; par le nom de votre dossier de d&#233;part.&lt;/p&gt;
&lt;p&gt;Cela indique que par d&#233;faut, mes sites locaux correspondent au dossier &lt;code&gt;/Users/maieul/Sites/SPIP21&lt;/code&gt; de mon ordinateur. Donc mes sites sont cr&#233;&#233;s par d&#233;faut avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 2.1&lt;/p&gt;
&lt;p&gt;En revanche, si je souhaite que le site &lt;code&gt;toto.dev&lt;/code&gt; soit en &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 2.0, je met en dessous de ces lignes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;&lt;VirtualHost *&gt; DocumentRoot &#034;/Users/maieul/Sites/SPIP20&#034; ServerName toto.dev &lt;/VirtualHost&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et ainsi de suite pour chaque site ne fonctionnant pas avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; 2.1.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;20 - Rediriger le site bidule.dev vers 127.0.0.1&lt;/h2&gt;
&lt;p&gt;Bon, maintenant je peux lancer mon site &lt;code&gt;bidule.dev&lt;/code&gt;
Pour ce faire, je vais modifier le fichier &lt;code&gt;/etc/hosts&lt;/code&gt;, qui indique les redirections des adresses web, propres &#224; &lt;strong&gt;mon&lt;/strong&gt; ordinateur.
Pour ce faire, dans le terminal je frappe&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='bash'&gt;&lt;code&gt;sudo pico /etc/hosts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s la saisie de mon mot de passe administrateur, avec le clavier je me rend sur juste avant la ligne &lt;code&gt;255.255.255.255 broadcasthost&lt;/code&gt;, et j'ins&#233;re la ligne suivante&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;127.0.0.1 toto.dev&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J'enregistre en frappant &lt;code&gt;ctrl + X&lt;/code&gt;
&#192; chaque fois que je voudrais cr&#233;er un nouveau site local, je ferais de m&#234;me.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;21 - Lancement du site&lt;/h2&gt;
&lt;p&gt;Aller, on y va&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;! Dans la barre d'adresse du navigateur, j'&#233;cris &lt;code&gt;http://toto.dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je me retrouve alors sur la page me demandant le mot de passe de la mutualisation.&lt;/p&gt;
&lt;p&gt;Comme je ne l'ai pas modifi&#233;, c'est facile&#160;: &lt;code&gt;ecureuil&lt;/code&gt;. Je le rentre donc, et je clique sur ok.&lt;/p&gt;
&lt;p&gt;Je passe ensuite les &#233;tapes suivantes, qui sont automatiques.&lt;/p&gt;
&lt;div class='spip_document_31 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH290/mutu0-da073.png?1760449034' width='500' height='290' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_32 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH259/mutu1-3ab83.png?1760449034' width='500' height='259' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_33 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH258/mutu2-b33c7.png?1760449034' width='500' height='258' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_34 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH258/mutu3-00d4b.png?1760449034' width='500' height='258' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_35 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH355/mutu4-7132d.png?1760449034' width='500' height='355' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_36 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH309/mutu5-85354.png?1760449034' width='500' height='309' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_37 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH295/mutu6-f38ec.png?1760449034' width='500' height='295' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Vient ensuite l'habituel formulaire de cr&#233;ation des comptes sur &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;, que je remplis comme d'habitude&#160;:&lt;/p&gt;
&lt;div class='spip_document_38 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L392xH586/mutu7-5dfcd.png?1760449034' width='392' height='586' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Et voil&#224; mon site lanc&#233;.&lt;/p&gt;
&lt;div class='spip_document_39 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L482xH503/mutu8-5feb1.png?1760449034' width='482' height='503' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;r2&#034;&gt;22 - Particularit&#233; de la mutualisation&lt;/h2&gt;
&lt;p&gt;Chaque sites poss&#232;dent un dossier propre dans le dossier &lt;code&gt;sites&lt;/code&gt;. Dans chaque dossier de sites se trouvent les habituelles dossiers &lt;code&gt;config&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; &lt;code&gt;IMG&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; &lt;code&gt;local&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;code&gt;tmp&lt;/code&gt; et &#233;ventuellement &lt;code&gt;squelettes&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;r2&#034;&gt;23 - Mise &#224; jour mineure de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Imaginons que la version 2.1.13 de &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; sorte.&lt;/p&gt;
&lt;p&gt;Pour faire ma mise &#224; jour en local, c'est simple.&lt;/p&gt;
&lt;p&gt;1. D'abord se rendre dans le dossier avec le terminal&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;cd ~/sites/SPIP21&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;2. Ensuite mettre &#224; jour&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;svn switch svn://trac.rezo.net/spip/tags/spip-2.1.12 &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;Comme d'habitude, j'attends les r&#233;actions des SPIPeurs.&lt;/p&gt;
&lt;p&gt;Voici quelques liens utiles&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;http://www.cuk.ch/articles/4246&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;initiation au terminal&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://lelogiciellibre.net/tutoriaux/fichier-hosts.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le fichier &lt;code&gt;hosts&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://www.spip-contrib.net/La-mutualisation-facile-modifications-manuelles&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la mutualisation facile avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://httpd.apache.org/docs/2.1/fr/vhosts/examples.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;les Virtualhost d'Apache&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Deux articles d'Alexandra qui expliquent &lt;a href=&#034;http://www.spip-contrib.net/Deuxieme-partie-Comment-creer-un-environnement-de&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;comment ouvrir sur l'exterieur son Mac&lt;/a&gt; et &lt;a href=&#034;http://www.spip-contrib.net/Troisieme-partie-Comment-creer-un-environnement-de&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;comment envoyer des mails avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt; en local&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://www.blanche-de-peuterey.com/Mutualiser-Spip-en-local&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;La m&#234;me probl&#233;matique, mais sous Windows&lt;/a&gt;.&lt;/li&gt;&lt;/ul&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;Je sais, c'est un peu narcissique, mais que voulez-vous&#8230;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>



</channel>

</rss>
