<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.spip.net/spip.php?page=backend.xslt" ?>
<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>SPIP</title>
	<link>https://www.spip.net/</link>
	<description>Syst&#232;me de Publication pour Internet</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.spip.net/spip.php?id_auteur=171&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>SPIP</title>
		<url>https://www.spip.net/local/cache-vignettes/L144xH107/siteon0-0ecda.png?1615902774</url>
		<link>https://www.spip.net/</link>
		<height>107</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>Charte d'accueil de SPIP</title>
		<link>https://www.spip.net/fr_article6431.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6431.html</guid>
		<dc:date>2018-11-05T14:56:44Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>



		<description>
&lt;p&gt;SPIP c'est quoi ? &lt;br class='autobr' /&gt;
SPIP est un logiciel libre qui permet de cr&#233;er des sites internet. Il est plac&#233; sous la licence GNU GPL3. SPIP est d&#233;velopp&#233; et maintenu par sa communaut&#233;, avec tendresse. &lt;br class='autobr' /&gt;
La communaut&#233; &lt;br class='autobr' /&gt;
La communaut&#233; SPIP est un collectif informel, constitu&#233; par les personnes contribuant au projet au sens large, comme par exemple, et de fa&#231;on non limitative, au logiciel, aux plugins, aux traductions, aux productions graphiques, comme aux &#233;changes dans les diff&#233;rents espaces de la (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique124.html" rel="directory"&gt;C'est quoi SPIP ?&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69fae92897fa21.59732860&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-c-est-quoi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-c-est-quoi&#034; class=&#034;spip_ancre&#034;&gt;SPIP c'est quoi ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-La-communaute&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#La-communaute&#034; class=&#034;spip_ancre&#034;&gt;La communaut&#233;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Buts-et-valeurs&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Buts-et-valeurs&#034; class=&#034;spip_ancre&#034;&gt;Buts et valeurs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Refus-du-demarchage&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Refus-du-demarchage&#034; class=&#034;spip_ancre&#034;&gt;Refus du d&#233;marchage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Inscription-dans-le-mouvement-Contributor-Covenant&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Inscription-dans-le-mouvement-Contributor-Covenant&#034; class=&#034;spip_ancre&#034;&gt;Inscription dans le mouvement Contributor Covenant&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Fonctionnement-cooperatif-et-gestion-des-conflits&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fonctionnement-cooperatif-et-gestion-des-conflits&#034; class=&#034;spip_ancre&#034;&gt;Fonctionnement coop&#233;ratif et gestion des conflits&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Droit-d-auteur&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Droit-d-auteur&#034; class=&#034;spip_ancre&#034;&gt;Droit d'auteur&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-c-est-quoi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-c-est-quoi'&gt;SPIP c'est quoi ?&lt;a class='sommaire-back sommaire-back-7' href='#s-SPIP-c-est-quoi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP est un logiciel libre qui permet de cr&#233;er des sites internet. Il est plac&#233; sous la licence &lt;a href=&#034;https://www.gnu.org/licenses/gpl-3.0.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;GNU GPL3&lt;/a&gt;.&lt;br class='autobr' /&gt;
SPIP est d&#233;velopp&#233; et maintenu par sa communaut&#233;, avec tendresse.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;La-communaute&#034;&gt;&lt;h2 class=&#034;h2&#034; id='La-communaute'&gt;La communaut&#233;&lt;a class='sommaire-back sommaire-back-7' href='#s-La-communaute' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La communaut&#233; SPIP est un collectif informel, constitu&#233; par les personnes contribuant au projet au sens large, comme par exemple, et de fa&#231;on non limitative, au logiciel, aux plugins, aux traductions, aux productions graphiques, comme aux &#233;changes dans les diff&#233;rents espaces de la galaxie, ou &#224; l'animation du groupe. Ind&#233;pendante de toute association, fondation ou entreprise, la communaut&#233; SPIP s'organise autour de la mutualisation de toutes ces contributions.&lt;/p&gt;
&lt;p&gt;On appelle &#034;galaxie SPIP&#034; l'ensemble des lieux officiels maintenus par la communaut&#233;. Il peut s'agir de sites de documentation, de listes de discussion par email, de forum, d'outils pour le code source&#8230; Ces lieux sont list&#233;s dans un bandeau commun en haut de page des sites, &#034;la boussole&#034;.&lt;/p&gt;
&lt;p&gt;On appelle &#034;&#233;quipe de maintenance&#034;, le groupe des personnes qui maintiennent le code et sortent les nouvelles version du noyau du logiciel SPIP, ainsi que sur les plugins et squelettes qui sont fournis par d&#233;faut. Les nouvelles personnes sont int&#233;gr&#233;es par co-optation au fil du temps.&lt;/p&gt;
&lt;p&gt;Une liste des membres de cette &#233;quipe peut &#234;tre trouv&#233;e dans &lt;a href=&#034;https://discuter.spip.net/g/maintenance&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le groupe maintenance sur discuter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il existe &#233;galement une &#233;quipe d&#233;di&#233;e &#224; la s&#233;curit&#233;, c'est celle-ci qu'il faut joindre pour signaler un probl&#232;me li&#233; &#224; la s&#233;curit&#233; &#224; l'adresse &lt;a href=&#034;mailto:securite@spip.net&#034; class=&#034;spip_mail&#034;&gt;securite@spip.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il existe d'autres &#233;quipes par th&#233;matique : &lt;a href=&#034;https://discuter.spip.net/g/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;on trouvera la liste de ces &#233;quipes sur le Discourse de SPIP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Toute personne inscrite sur un site de la galaxie ou sur une liste de diffusion SPIP est consid&#233;r&#233;e participante &#224; la communaut&#233;. Elle peut y trouver de l'aide, des r&#233;ponses &#224; ses questions et elle peut apporter de l'aide &#224; d'autres utilisateurs et utilisatrices. Elle peut aussi participer &#224; maintenir et faire &#233;voluer SPIP, l'un des sites de sa galaxie, ou l'un de ses plugins.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Buts-et-valeurs&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Buts-et-valeurs'&gt;Buts et valeurs&lt;a class='sommaire-back sommaire-back-7' href='#s-Buts-et-valeurs' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rappelons que SPIP est un logiciel libre, et chaque personne peut l'utiliser et le modifier &#224; sa convenance. Cependant, toute participation doit se faire dans le respect des buts et valeurs promus par le &lt;a href=&#034;http://www.uzine.net/article60.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;projet initial du minir&#233;zo&lt;/a&gt;, et notamment :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; promouvoir et d&#233;fendre la libert&#233; d'expression de toutes et tous sur Internet ;&lt;/li&gt;&lt;li&gt; une d&#233;fiance vis-&#224;-vis de l'argent (&lt;a href=&#034;https://contrib.spip.net/Charte-d-accueil-de-SPIP-precisions#Une-defiance-vis-a-vis-de-l-argent&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;lire cette page pour des pr&#233;cisions&lt;/a&gt;) ;&lt;/li&gt;&lt;li&gt; le respect de l'identit&#233; de chaque personne.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Contribuer &#224; SPIP implique donc de :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; veiller &#224; ce que le langage soit inclusif (&lt;a href=&#034;https://vincent-valentin.name/articles/abreviations-inclusives-oui-mais-comment&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Abr&#233;viations inclusives : oui, mais comment ?&lt;/a&gt;) ;&lt;/li&gt;&lt;li&gt; adopter un comportement ouvert et accueillant, empathique, non-sexiste, non-raciste ;&lt;/li&gt;&lt;li&gt; accorder une priorit&#233; aux besoins associatifs et collectifs sur les besoins marchands ;&lt;/li&gt;&lt;li&gt; s'efforcer d'internationaliser ses contributions.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Refus-du-demarchage&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Refus-du-demarchage'&gt;Refus du d&#233;marchage&lt;a class='sommaire-back sommaire-back-7' href='#s-Refus-du-demarchage' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il est interdit d'utiliser les ressources fournies par la communaut&#233; pour effectuer un d&#233;marchage commercial non sollicit&#233;. Cela s'applique quel que soit le moyen utilis&#233; : dans les forums, en message priv&#233;, ou en utilisant les informations de contact fournies par les gens dans les diff&#233;rents lieux de la galaxie SPIP.&lt;/p&gt;
&lt;p&gt;Bien &#233;videmment, cela ne s'applique pas lorsque l'on r&#233;pond &#224; des personnes qui cherchent explicitement des prestataires, comme cela arrive parfois.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Inscription-dans-le-mouvement-Contributor-Covenant&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Inscription-dans-le-mouvement-Contributor-Covenant'&gt;Inscription dans le mouvement Contributor Covenant&lt;a class='sommaire-back sommaire-back-7' href='#s-Inscription-dans-le-mouvement-Contributor-Covenant' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour suivre ces id&#233;es et faire exister le projet dans un mouvement plus large, la communaut&#233; SPIP s'inscrit dans la ligne du code de conduite Contributor Covenant : &lt;a href=&#034;https://www.contributor-covenant.org/fr/version/1/4/code-of-conduct&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.contributor-covenant.org/fr/version/1/4/code-of-conduct&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Fonctionnement-cooperatif-et-gestion-des-conflits&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Fonctionnement-cooperatif-et-gestion-des-conflits'&gt;Fonctionnement coop&#233;ratif et gestion des conflits&lt;a class='sommaire-back sommaire-back-7' href='#s-Fonctionnement-cooperatif-et-gestion-des-conflits' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ce code de conduite (Contributor Covenant) pose des principes pour pr&#233;venir et aider &#224; r&#233;gler les probl&#232;mes de communication qui pourraient se pr&#233;senter entre diff&#233;rents membres de la communaut&#233;.&lt;/p&gt;
&lt;p&gt;Malgr&#233; tout, en cas de conflit inter-personnel, une commission d'arbitrage peut &#234;tre saisie au cas par cas, qui statue en toute conscience en se basant sur les crit&#232;res d&#233;finis ci-dessus, et dispose de toute latitude.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Droit-d-auteur&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Droit-d-auteur'&gt;Droit d'auteur&lt;a class='sommaire-back sommaire-back-7' href='#s-Droit-d-auteur' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;En accord avec le droit fran&#231;ais, toute contribution partag&#233;e dans la communaut&#233;, de quelque nature qu'elle soit, reste en tant que telle la propri&#233;t&#233; de la personne qui l'a con&#231;ue, mais se fond dans l'&#171; &#339;uvre collective &#187; qu'est le projet SPIP.&lt;/p&gt;
&lt;p&gt;Toutes les contributions h&#233;berg&#233;es par la communaut&#233; sont &#171; libres &#187; au sens de GNU (licences &lt;a href=&#034;https://www.gnu.org/copyleft/gpl.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#8203;GPL&lt;/a&gt;, &lt;a href=&#034;https://www.gnu.org/copyleft/lesser.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#8203;LGPL&lt;/a&gt;, &lt;a href=&#034;https://www.gnu.org/copyleft/fdl.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#8203;FDL&lt;/a&gt; sans sections invariantes, &lt;a href=&#034;http://artlibre.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Art Libre&lt;/a&gt;, &lt;a href=&#034;https://creativecommons.org/share-your-work/licensing-types-examples/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Creative Commons&lt;/a&gt;), de mani&#232;re &#224; s'int&#233;grer dans le projet global SPIP. En particulier, si la contribution porte sur l'adaptation d'une &#339;uvre ant&#233;rieure, il convient de s'assurer des conditions de licence de ladite &#339;uvre.&lt;/p&gt;
&lt;p&gt;... Bienvenue dans SPIP !&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La boucle CONDITION</title>
		<link>https://www.spip.net/fr_article6406.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6406.html</guid>
		<dc:date>2017-06-05T11:33:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>
		<dc:subject>si ...</dc:subject>
		<dc:subject>BOUCLE(CONDITION)</dc:subject>

		<description>
&lt;p&gt;Associ&#233;e au crit&#232;re si ..., la boucle CONDITION permet de cr&#233;er des tests. &lt;br class='autobr' /&gt;
Elle est utile quand la syntaxe &#224; crochets n'est pas utilisable, par exemple quand d'autres boucles doivent &#234;tre imbriqu&#233;es dans les r&#233;sultats d'un test. &lt;br class='autobr' /&gt;
Exemple : &lt;BOUCLE_test(CONDITION)si #ENVtest|&gt;5&gt; vrai &lt;BOUCLE_a(ARTICLES)...&gt;&lt;/BOUCLE_a&gt; &lt;BOUCLE_b(BREVES)...&gt;&lt;/BOUCLE_b&gt; &lt;BOUCLE_c(AUTEURS)...&gt;&lt;/BOUCLE_c&gt; &lt;/BOUCLE_test&gt; faux (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique143.html" rel="directory"&gt;Manuel de r&#233;f&#233;rence des boucles et balises&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@si" rel="tag"&gt;si ...&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@bouclecondition" rel="tag"&gt;BOUCLE(CONDITION)&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-1&#034; id=&#034;nav69fae9289ac0b5.16705169&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Associ&#233;e au crit&#232;re &lt;a href='https://www.spip.net/fr_article5535.html' class=&#034;spip_in&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{si ...}&lt;/code&gt;&lt;/a&gt;, la boucle CONDITION permet de cr&#233;er des tests.&lt;/p&gt;
&lt;p&gt;Elle est utile quand la syntaxe &#224; crochets n'est pas utilisable, par exemple quand d'autres boucles doivent &#234;tre imbriqu&#233;es dans les r&#233;sultats d'un test.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;BOUCLE_test(CONDITION){si #ENV{test}|&gt;{5}}&gt; vrai &lt;BOUCLE_a(ARTICLES){...}&gt;&lt;/BOUCLE_a&gt; &lt;BOUCLE_b(BREVES){...}&gt;&lt;/BOUCLE_b&gt; &lt;BOUCLE_c(AUTEURS){...}&gt;&lt;/BOUCLE_c&gt; &lt;/BOUCLE_test&gt; faux &lt;BOUCLE_x(RUBRIQUES){...}&gt;&lt;/BOUCLE_x&gt; &lt;BOUCLE_y(DOCUMENTS){...}&gt;&lt;/BOUCLE_y&gt; &lt;//B_test&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-1' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le crit&#232;re &lt;a href='https://www.spip.net/fr_article5535.html' class=&#034;spip_in&#034;&gt;&lt;i&gt;si ...&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 3.1</title>
		<link>https://www.spip.net/fr_article5713.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article5713.html</guid>
		<dc:date>2016-01-09T09:21:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP, tofulm</dc:creator>



		<description>
&lt;p&gt;SPIP 3.1 est une version am&#233;lior&#233;e de SPIP 3.0, qui comprend une mise &#224; jour des biblioth&#232;ques JavaScript embarqu&#233;es, un nouvel habillage graphique pour l'espace priv&#233; et les pages publiques ainsi que de nombreuses am&#233;liorations. Sa maintenance active s'arr&#234;te le 30 juin 2019. &#192; compter de cette date, seule les correctifs li&#233;s &#224; la s&#233;curit&#233; lui seront apport&#233;s. &lt;br class='autobr' /&gt; Cette version sort trois ans apr&#232;s SPIP 3.0 et offre essentiellement aux d&#233;veloppeurs : une mise &#224; jour des biblioth&#232;ques (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique785.html" rel="directory"&gt;Anciennes versions&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP 3.1 est une version am&#233;lior&#233;e de SPIP 3.0, qui comprend une mise &#224; jour des biblioth&#232;ques JavaScript embarqu&#233;es, un nouvel habillage graphique pour l'espace priv&#233; et les pages publiques ainsi que de nombreuses am&#233;liorations. Sa maintenance active s'arr&#234;te le 30 juin 2019. &#192; compter de cette date, seule les correctifs li&#233;s &#224; la s&#233;curit&#233; lui seront apport&#233;s.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-6&#034; id=&#034;nav69fae9289ceb40.68304859&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-3-1-des-nouveautes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-3-1-des-nouveautes&#034; class=&#034;spip_ancre&#034;&gt;SPIP 3.1 : des nouveaut&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-3-1-l-ecriture-des-squelettes-est-facilitee&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-3-1-l-ecriture-des-squelettes-est-facilitee&#034; class=&#034;spip_ancre&#034;&gt;SPIP 3.1 : l'&#233;criture des squelettes est facilit&#233;e&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-3-1-sous-le-capot&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-3-1-sous-le-capot&#034; class=&#034;spip_ancre&#034;&gt;SPIP 3.1 : sous le capot&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-3-1-un-code-source-plus-beau&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-3-1-un-code-source-plus-beau&#034; class=&#034;spip_ancre&#034;&gt;SPIP 3.1 : un code source plus beau&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-3-1-les-performances-web-cote-client&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-3-1-les-performances-web-cote-client&#034; class=&#034;spip_ancre&#034;&gt;SPIP 3.1 : les performances web cot&#233; client&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Mettre-a-jour-un-site-existant-vers-SPIP-3-1&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Mettre-a-jour-un-site-existant-vers-SPIP-3-1&#034; class=&#034;spip_ancre&#034;&gt;Mettre &#224; jour un site existant vers SPIP 3.1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Cette version sort trois ans apr&#232;s SPIP 3.0 et offre essentiellement aux d&#233;veloppeurs :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une mise &#224; jour des biblioth&#232;ques JavaScript qui accompagnent le c&#339;ur de SPIP et les plugins fournis, avec notamment jQuery et jQuery UI ;&lt;/li&gt;&lt;li&gt; une actualisation du th&#232;me graphique de l'espace public. Ce th&#232;me int&#232;gre la base CSS &lt;a href=&#034;http://tinytypo.tetue.net&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Tiny Typo&lt;/a&gt; ; Lire &lt;a href='https://www.spip.net/fr_article5720.html' class=&#034;spip_in&#034;&gt;Pr&#233;sentation de la dist &lt;/a&gt;&lt;/li&gt;&lt;li&gt; une actualisation &lt;i&gt;l&#233;g&#232;re&lt;/i&gt; du th&#232;me graphique de l'espace priv&#233; ;&lt;/li&gt;&lt;li&gt; des nouveaut&#233;s et de nombreux bugs corrig&#233;s.&lt;/li&gt;&lt;/ul&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-3-1-des-nouveautes&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-3-1-des-nouveautes'&gt; SPIP 3.1 : des nouveaut&#233;s &lt;a class='sommaire-back sommaire-back-6' href='#s-SPIP-3-1-des-nouveautes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les r&#233;dacteurs et administrateurs pourront trouver utile :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un bouton suppl&#233;mentaire sur les barres d'outils d'&#233;dition qui permet d'&#233;diter le texte en plein &#233;cran, avec sa pr&#233;visualisation directe sur le c&#244;t&#233; ;&lt;/li&gt;&lt;li&gt; le lecteur multim&#233;dia HTML5 &lt;a href=&#034;http://mediaelementjs.com&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://mediaelementjs.com&lt;/a&gt; fourni en standard pour lire directement vid&#233;os et sons ;&lt;/li&gt;&lt;li&gt; l'ajout d'une vid&#233;o calcule, ses dimensions et sa dur&#233;e (int&#233;gration partielle du plugin getID3 dans le plugin m&#233;dias) ;&lt;/li&gt;&lt;li&gt; les forums de discussion dans l'espace priv&#233; peuvent se greffer sur n'importe quel objet &#233;ditorial via un formulaire de configuration ;&lt;/li&gt;&lt;li&gt; les statistiques peuvent &#234;tre affich&#233;es soit sous forme de graphique, soit sous forme de tableau ;&lt;/li&gt;&lt;li&gt; la page plan de l'espace priv&#233; est am&#233;lior&#233;e et permet de d&#233;placer des &#233;l&#233;ments par glisser/d&#233;poser ;&lt;/li&gt;&lt;li&gt; une nouvelle option dans les pr&#233;f&#233;rences personnelles des webmestres pour afficher ou non le menu &#171; D&#233;veloppement &#187; ;&lt;/li&gt;&lt;li&gt; des am&#233;liorations de l'ergonomie du multilinguisme par secteur.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-3-1-l-ecriture-des-squelettes-est-facilitee&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-3-1-l-ecriture-des-squelettes-est-facilitee'&gt; SPIP 3.1 : l'&#233;criture des squelettes est facilit&#233;e&lt;a class='sommaire-back sommaire-back-6' href='#s-SPIP-3-1-l-ecriture-des-squelettes-est-facilitee' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt; Crit&#232;res &lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{age}&lt;/code&gt; est modifi&#233;, code simplifi&#233; et d&#233;bogu&#233; pour certaines dur&#233;es ;&lt;/li&gt;&lt;li&gt; le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{tri}&lt;/code&gt; accepte un 3e argument avec le nom commen&#231;ant par 'session' et indiquant que le sens et l'&#233;l&#233;ment tri&#233; doivent &#234;tre sauv&#233;s dans la session de l'utilisateur ;&lt;/li&gt;&lt;li&gt; le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{branche}&lt;/code&gt; accepte un second argument pour pr&#233;ciser la ou les rubriques &#224; parcourir.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt; Balises &lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#MODELE&lt;/code&gt; accepte le param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;env&lt;/code&gt; transmettant l'environnement complet ;&lt;/li&gt;&lt;li&gt; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; transmet l'&#233;ventuel param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;connect&lt;/code&gt; pr&#233;sent dans l'URL, tout comme le fait d&#233;j&#224; l'inclusion &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE...&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt; Filtres&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le nouveau filtre &lt;a href='https://www.spip.net/fr_article5840.html' class=&#034;spip_in&#034;&gt;|setenv&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt; Logos et images &lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre_inactif&lt;/code&gt; au lieu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;no_image_filtrer&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; la classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.spip_logo&lt;/code&gt; sur les documents &#224; la place de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.spip_logos&lt;/code&gt; (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.spip_logos&lt;/code&gt; support&#233; encore quelques temps) ;&lt;/li&gt;&lt;li&gt; l'action d'&#233;dition des logos a &#233;volu&#233; :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la hauteur ou largeur maximale des logos peuvent &#234;tre d&#233;finies seules ;&lt;/li&gt;&lt;li&gt; si un logo ou une image t&#233;l&#233;vers&#233;e d&#233;passe la taille maximale autoris&#233;e, et que les miniatures sont autoris&#233;es, on r&#233;duit le logo ou l'image transmise &#224; la taille maximale plut&#244;t que renvoyer une erreur ;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; si un document d&#233;passe la taille exploitable par le serveur, une erreur est affich&#233;e sans poser de probl&#232;me ajax.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; meilleure ergonomie de l'interface de gestion des plugins ;&lt;/li&gt;&lt;li&gt; nouvelles balises dans le paquet.xml ;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;script&lt;/code&gt; pour ajouter un script JavaScript dans le header public ou priv&#233; ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;style&lt;/code&gt; pour ajouter un fichier CSS ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;genie&lt;/code&gt; pour ex&#233;cuter une tache cron simplement ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;procure&lt;/code&gt; pour indiquer qu'un plugin procure des fonctionnalit&#233;s.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-3-1-sous-le-capot&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-3-1-sous-le-capot'&gt; SPIP 3.1 : sous le capot&lt;a class='sommaire-back sommaire-back-6' href='#s-SPIP-3-1-sous-le-capot' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Certaines modifications mineures du core peuvent int&#233;resser les h&#233;bergeurs ou webmestres de sites SPIP :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les sessions anonymes de SPIP utilisent maintenant les sessions PHP ;&lt;/li&gt;&lt;li&gt; le cache des vignettes d'images est stock&#233; dans 256 sous-r&#233;pertoires (&lt;a href=&#034;http://core.spip.org/issues/3277&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;#3277&lt;/a&gt;), ce qui peut am&#233;liorer les performances sur les disques NAS ;&lt;/li&gt;&lt;li&gt; lors de l'utilisation d'une base MySQL, les fonctions PHP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mysqli_*&lt;/code&gt; sont utilis&#233;es &#224; la place des fonctions &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mysql_*&lt;/code&gt;. Il faut donc que les fonctions &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mysqli&lt;/code&gt; soient pr&#233;sentes sur le serveur h&#233;bergeant le site (elles sont actives par d&#233;faut dans PHP depuis la version 5.0) ;&lt;/li&gt;&lt;li&gt; les tables MySQL utilisent maintenant MyISAM par d&#233;faut (les versions r&#233;centes de MySQL s'installaient en INNODB) ;&lt;/li&gt;&lt;li&gt; la gestion du cache a &#233;t&#233; am&#233;lior&#233;e en reprenant la m&#233;thode &lt;i&gt;filecache&lt;/i&gt; du plugin m&#233;moization ;&lt;/li&gt;&lt;li&gt; les r&#233;visions des objets &#233;ditoriaux ne sont plus stock&#233;es de fa&#231;on compress&#233;e afin d'&#233;viter des probl&#232;mes lors de la restauration de sauvegardes de la base de donn&#233;es ;&lt;/li&gt;&lt;li&gt; int&#233;gration des fonctions d'import/export de fichiers CSV du plugin SPIP-Bonux ;&lt;/li&gt;&lt;li&gt; API &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;objet_inserer()&lt;/code&gt; plus consistante avec le second param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$set&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; API de r&#244;les sur les liens : aux liens entre objets peuvent &#234;tre associ&#233;s des r&#244;les.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-3-1-un-code-source-plus-beau&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-3-1-un-code-source-plus-beau'&gt; SPIP 3.1 : un code source plus beau &lt;a class='sommaire-back sommaire-back-6' href='#s-SPIP-3-1-un-code-source-plus-beau' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Un gros travail sur la pr&#233;sentation du code source a &#233;t&#233; effectu&#233; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; adoption des &lt;a href=&#034;http://www.spip.net/fr_article3497.html#regles_codage&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;normes de codage PSR2 &lt;strong&gt;personnalis&#233;es&lt;/strong&gt;&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; annotation de nombreuses fonctions PHP au format phpDoc&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;texte de documentation pr&#233;c&#233;dent le code source d'une fonction, dans un (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; qui permet de g&#233;n&#233;rer automatiquement une &lt;a href=&#034;http://code.spip.net/autodoc/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation technique du code source&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; nombreuses &#171; notices &#187; PHP corrig&#233;es.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-3-1-les-performances-web-cote-client&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-3-1-les-performances-web-cote-client'&gt; SPIP 3.1 : les performances web cot&#233; client&lt;a class='sommaire-back sommaire-back-6' href='#s-SPIP-3-1-les-performances-web-cote-client' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dans une optique de performance, la m&#233;thode &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getScript&lt;/code&gt; de la biblioth&#232;que JavaScript jQuery est surcharg&#233;e pour utiliser le cache navigateur. En effet, par d&#233;faut, jQuery ne met pas en cache ces &#233;l&#233;ments. Il est par cons&#233;quent conseill&#233; dans un squelette SPIP, utilisant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;jQuery.getScript(...)&lt;/code&gt;, d'appliquer le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;timestamp&lt;/code&gt; au fichier demand&#233;, de sorte qu'une modification du fichier source entra&#238;ne une actualisation du cache navigateur.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;jQuery.getScript('[(#CHEMIN{prive/javascript/ui/widget.js}|timestamp)]', function(){ ... }); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un header Link est envoy&#233; dans les en-t&#234;tes HTTP pour annoncer la feuille de style compress&#233;e pour qu'elle soit charg&#233;e plus rapidement par le navigateur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Biblioth&#232;que jQL dans le plugin Compresseur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il est &#233;galement possible d'activer via la constante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_JS_ASYNC_LOAD&lt;/code&gt; un chargement asynchrone du JavaScript compress&#233; de l'espace public par l'interm&#233;diaire de la biblioth&#232;que jQL int&#233;gr&#233;e au compresseur. Il faut que les scripts &#171; inline &#187; soient compatibles.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Mettre-a-jour-un-site-existant-vers-SPIP-3-1&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Mettre-a-jour-un-site-existant-vers-SPIP-3-1'&gt;Mettre &#224; jour un site existant vers SPIP 3.1&lt;a class='sommaire-back sommaire-back-6' href='#s-Mettre-a-jour-un-site-existant-vers-SPIP-3-1' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;V&#233;rifier la compatibilit&#233; de ses plugins&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Avant le lancer la mise &#224; jour par les m&#233;thodes habituelles (FTP, Spip loader, Subversion), il est conseill&#233; de mettre &#224; jour ses plugins.&lt;br class='autobr' /&gt;
Le plugin suivant permet aussi de v&#233;rifier si les plugins de votre site sont bien compatibles avec SPIP 3.1&lt;br class='autobr' /&gt;
&lt;a href=&#034;http://contrib.spip.net/Verifier-ses-plugins-pour-le-passage-a-SPIP-3-1&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://contrib.spip.net/Verifier-ses-plugins-pour-le-passage-a-SPIP-3-1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Passer un plugin SPIP 3.0 vers SPIP 3.1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; ce sujet, &lt;a href=&#034;http://contrib.spip.net/Passer-un-plugin-SPIP-3-0-vers-SPIP-3-1&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;consulter l'article de spip-contrib&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Au sommaire :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Biblioth&#232;ques JavaScript jQuery et jQuery UI&lt;/li&gt;&lt;li&gt; Formulaires CVT&lt;/li&gt;&lt;li&gt; Jointures&lt;/li&gt;&lt;li&gt; Manipulation des logos&lt;/li&gt;&lt;li&gt; Balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FICHIER&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Une fois test&#233; et approuv&#233;...&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&#201;volution des biblioth&#232;ques JavaScript&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La mise-&#224;-jour des biblioth&#232;ques JavaScript int&#233;gr&#233;es &#224; SPIP 3.1 peut dans certains cas n&#233;cessiter une mise-&#224;-jour des squelettes ou plugins lors d'une migration depuis SPIP 3.0. Particuli&#232;rement, pour les mises-&#224;-jour de jQuery et jQuery UI.&lt;br class='autobr' /&gt;
Vous pouvez regarder les conseils de mise-&#224;-jour de ces biblioth&#232;ques respectives :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; jQuery est mis &#224; jour de 1.7.2 &#224; 1.11.3 . Voir &lt;a href=&#034;http://blog.jquery.com/2012/08/09/jquery-1-8-released/&#034; class=&#034;spip_out&#034; hreflang=&#034;en&#034; rel=&#034;external&#034;&gt;jquery 1.8&lt;/a&gt;, &lt;a href=&#034;http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;jQuery 1.9&lt;/a&gt;, &lt;a href=&#034;http://jquery.com/upgrade-guide/1.9/&#034; class=&#034;spip_out&#034; hreflang=&#034;en&#034; rel=&#034;external&#034;&gt;jquery 1.9 guide de mise-&#224;-jour&lt;/a&gt;, &lt;a href=&#034;http://blog.jquery.com/2013/05/24/jquery-1-10-0-and-2-0-1-released/&#034; class=&#034;spip_out&#034; hreflang=&#034;en&#034; rel=&#034;external&#034;&gt;jQuery 1.10&lt;/a&gt;, &lt;a href=&#034;http://blog.jquery.com/2014/01/24/jquery-1-11-and-2-1-released/&#034; class=&#034;spip_out&#034; hreflang=&#034;en&#034; rel=&#034;external&#034;&gt;jQuery 1.11&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; jQuery UI est mis &#224; jour de 1.8.21 &#224; 1.11.4. Voir les &lt;a href=&#034;http://jqueryui.com/upgrade-guide/&#034; class=&#034;spip_out&#034; hreflang=&#034;en&#034; rel=&#034;external&#034;&gt;guides de migration&lt;/a&gt;. Notez &#233;galement que les emplacement des fichiers JavaScript et CSS dans jQuery UI comme dans le plugin SPIP jQuery UI ont chang&#233;. Les inclusions de ces scripts dans les squelettes devront donc probablement &#234;tre r&#233;&#233;crites.&lt;/li&gt;&lt;/ul&gt;&lt;/section&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;texte de documentation pr&#233;c&#233;dent le code source d'une fonction, dans un format pr&#233;cis&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Structure g&#233;n&#233;rale de SPIP</title>
		<link>https://www.spip.net/fr_article3634.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3634.html</guid>
		<dc:date>2010-08-13T11:59:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>Manuel</dc:subject>
		<dc:subject>SPIP 4.4</dc:subject>

		<description>
&lt;p&gt;SPIP est un CMS unique en son genre. &lt;br class='autobr' /&gt;
Au-del&#224; de son fonctionnement qu'on peut qualifier de &#171; data driven &#187;, &#224; savoir &#171; pilot&#233; par les donn&#233;es &#187; (les fameuses BOUCLES), il a toujours fourni en premi&#232;re ligne les moyens de &#171; customiser &#187;, adapter son fonctionnement et sa pr&#233;sentation au go&#251;t et aux besoins propres du site. &lt;br class='autobr' /&gt;
C'&#233;tait d'abord la possibilit&#233; de fournir ses propres squelettes (templates), d'adjoindre des fragments de php sp&#233;cifiques et de surcharger les fonctions de base du &#171; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique171.html" rel="directory"&gt;Pr&#233;sentation&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@manuel" rel="tag"&gt;Manuel&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@spip44" rel="tag"&gt;SPIP 4.4&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-14&#034; id=&#034;nav69fae9289f59b4.62627780&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Dossiers-livres-avec-SPIP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Dossiers-livres-avec-SPIP&#034; class=&#034;spip_ancre&#034;&gt;Dossiers livr&#233;s avec SPIP&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-racine-du-site&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#racine-du-site&#034; class=&#034;spip_ancre&#034;&gt;racine du site&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-ecrire&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#ecrire&#034; class=&#034;spip_ancre&#034;&gt;ecrire/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-prive&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#prive&#034; class=&#034;spip_ancre&#034;&gt;prive/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-squelettes-dist&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#squelettes-dist&#034; class=&#034;spip_ancre&#034;&gt;squelettes-dist/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-vendor&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#vendor&#034; class=&#034;spip_ancre&#034;&gt;vendor/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Dossiers-permanents&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Dossiers-permanents&#034; class=&#034;spip_ancre&#034;&gt;Dossiers permanents&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-config&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#config&#034; class=&#034;spip_ancre&#034;&gt;config/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-IMG&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#IMG&#034; class=&#034;spip_ancre&#034;&gt;IMG/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-squelettes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#squelettes&#034; class=&#034;spip_ancre&#034;&gt;squelettes/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-plugins&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#plugins&#034; class=&#034;spip_ancre&#034;&gt;plugins/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Dossiers-temporaires&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Dossiers-temporaires&#034; class=&#034;spip_ancre&#034;&gt;Dossiers temporaires&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-local&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#local&#034; class=&#034;spip_ancre&#034;&gt;local/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-tmp&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#tmp&#034; class=&#034;spip_ancre&#034;&gt;tmp/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;SPIP est un CMS unique en son genre.&lt;/p&gt;
&lt;p&gt;Au-del&#224; de son fonctionnement qu'on peut qualifier de &#171; &lt;i&gt;data driven&lt;/i&gt; &#187;, &#224; savoir &#171; &lt;i&gt;pilot&#233; par les donn&#233;es&lt;/i&gt; &#187; (les fameuses BOUCLES), il a toujours fourni en premi&#232;re ligne les moyens de &#171; &lt;i&gt;customiser&lt;/i&gt; &#187;, adapter son fonctionnement et sa pr&#233;sentation au go&#251;t et aux besoins propres du site.&lt;/p&gt;
&lt;p&gt;C'&#233;tait d'abord la possibilit&#233; de fournir ses propres &lt;strong&gt;squelettes&lt;/strong&gt; (templates), d'adjoindre des fragments de php sp&#233;cifiques et de surcharger les fonctions de base du &#171; &lt;i&gt;core&lt;/i&gt; &#187; (les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;function xxx_dist()&lt;/code&gt; que nous verrons plus loin).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les plugins&lt;/strong&gt; permettent d'ouvrir SPIP &#224; des fonctionnalit&#233;s suppl&#233;mentaires sans alourdir son noyau (le &#171; &lt;i&gt;core&lt;/i&gt; &#187;). La tendance actuelle est m&#234;me d'all&#233;ger ce &lt;i&gt;core&lt;/i&gt; en transf&#233;rant les fonctionnalit&#233;s optionnelles dans des plugins.&lt;/p&gt;
&lt;p&gt;Les r&#233;pertoires qui le constituent permettent de bien s&#233;parer les &#233;l&#233;ments selon leur dur&#233;e de vie, le fait qu'il soient modifiables et leur appartenance &#224; ce qui est propre ou sp&#233;cifique au site ou au code de base. Un des autres objectifs vis&#233;s ici est la possibilit&#233; de mutualiser le noyau : que plusieurs sites puissent partager une base de code commune.&lt;/p&gt;
&lt;p&gt;&#201;tudions d'abord cette nouvelle organisation des r&#233;pertoires, de ce qui appartient &#224; SPIP &#224; ce qui est propre au site, de ce qui reste constant &#224; ce qui bouge.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Dossiers-livres-avec-SPIP&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Dossiers-livres-avec-SPIP'&gt;Dossiers livr&#233;s avec SPIP&lt;a class='sommaire-back sommaire-back-14' href='#s-Dossiers-livres-avec-SPIP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;racine-du-site&#034;&gt;&lt;h3 class=&#034;h3&#034; id='racine-du-site'&gt;racine du site&lt;a class='sommaire-back sommaire-back-14' href='#s-racine-du-site' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La racine a &#233;t&#233; compl&#232;tement vid&#233;e et ne contient pratiquement plus que &lt;i&gt;index.php&lt;/i&gt; qui redirige sur &lt;i&gt;spip.php&lt;/i&gt;, c'est maintenant l'unique point d'entr&#233;e de la partie publique du site.&lt;/p&gt;
&lt;p&gt;SPIP est fourni avec un fichier htaccess.txt qu'on pourra renommer en &lt;br class='autobr' /&gt;
&lt;i&gt;.htaccess&lt;/i&gt; pour l'url rewriting essentiellement.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;ecrire&#034;&gt;&lt;h3 class=&#034;h3&#034; id='ecrire'&gt;ecrire/&lt;a class='sommaire-back sommaire-back-14' href='#s-ecrire' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ce dossier contient l'ensemble des fichiers interpr&#233;tables c&#244;t&#233; serveur (PHP et MySQL) et ce, aussi bien pour l'affichage &lt;i&gt;public&lt;/i&gt; (sous-dossier &lt;i&gt;public/&lt;/i&gt;) que pour l'affichage &lt;i&gt;priv&#233;&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Le nom de ce dossier est historique, c'&#233;tait auparavant l&#224; o&#249; on trouvait le code permettant de modifier le contenu du site. Paradoxalement, c'est un dossier maintenant immuable, on n'&#233;crira plus jamais dedans. Dans une installation normale, il ne contient que les scripts livr&#233;s par la distribution et il est quasi imp&#233;ratif de ne pas y faire de modification.&lt;/p&gt;
&lt;p&gt;Son script &lt;i&gt;index.php&lt;/i&gt; est le point d'entr&#233;e de &lt;i&gt;ecrire/&lt;/i&gt;, la partie priv&#233;e du site.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;prive&#034;&gt;&lt;h3 class=&#034;h3&#034; id='prive'&gt; prive/&lt;a class='sommaire-back sommaire-back-14' href='#s-prive' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Interface de la partie priv&#233;e de SPIP&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;squelettes-dist&#034;&gt;&lt;h3 class=&#034;h3&#034; id='squelettes-dist'&gt;squelettes-dist/&lt;a class='sommaire-back sommaire-back-14' href='#s-squelettes-dist' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Il contient tous les fichiers livr&#233;s au client (HTML, Javascript, feuilles de style, images de diff&#233;rents formats) ainsi que les patrons de mise en page nomm&#233;s &lt;i&gt;squelettes&lt;/i&gt;. Ces squelettes sont interpr&#233;t&#233;s c&#244;t&#233; serveur afin d'envoyer au client un texte purement MIME (la plupart du temps du HTML, mais aussi du RSS, du SVG... voire du JS).&lt;/p&gt;
&lt;p&gt;Ce sont les mod&#232;les standards livr&#233;s avec SPIP, ils ne doivent eux aussi pas &#234;tre modifi&#233;s mais &lt;i&gt;remplac&#233;s&lt;/i&gt; en les copiant dans &lt;i&gt;squelettes/&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;vendor&#034;&gt;&lt;h3 class=&#034;h3&#034; id='vendor'&gt; vendor/&lt;a class='sommaire-back sommaire-back-14' href='#s-vendor' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Biblioth&#232;ques PHP.&lt;/p&gt;
&lt;/section&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Dossiers-permanents&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Dossiers-permanents'&gt;Dossiers permanents&lt;a class='sommaire-back sommaire-back-14' href='#s-Dossiers-permanents' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;config&#034;&gt;&lt;h3 class=&#034;h3&#034; id='config'&gt;config/&lt;a class='sommaire-back sommaire-back-14' href='#s-config' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ce dossier, cr&#233;&#233; &#224; l'installation, contient le script de connexion &#224; la base de donn&#233;es : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;connect.php&lt;/code&gt; et le script fixant le mode des fichiers cr&#233;&#233;s par le serveur : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chmod.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;C'est aussi ici qu'on place les options universelles du site, dans un fichier (&#224; cr&#233;er) : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_options.php&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;Lire : Le fichier mes_options.php&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;IMG&#034;&gt;&lt;h3 class=&#034;h3&#034; id='IMG'&gt;IMG/&lt;a class='sommaire-back sommaire-back-14' href='#s-IMG' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Il contient tous les documents originaux (taille r&#233;elle) du site. Il est subdivis&#233; en sous-dossiers par types de documents.&lt;br class='manualbr' /&gt;&#192; l'installation, il ne contient que des documents de test pour la fabrication des images.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;squelettes&#034;&gt;&lt;h3 class=&#034;h3&#034; id='squelettes'&gt;squelettes/&lt;a class='sommaire-back sommaire-back-14' href='#s-squelettes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;C'est ici qu'on dispose tous les fichiers : scripts, images, formulaires... propres au site en suivant la m&#234;me structure que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dist/&lt;/code&gt;. Par exemple, pour red&#233;finir le &lt;i&gt;sommaire&lt;/i&gt; du site, on y copie/adapte le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sommaire.html&lt;/code&gt; du r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dist/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On met l&#224; notamment, le script &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_fonctions.php&lt;/code&gt; (&#224; cr&#233;er) qui est charg&#233; &#224; chaque recalcul de page. &#192; noter qu'il est possible de faire un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;xxx_fonctions.php&lt;/code&gt; qui sera charg&#233; (en plus du &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_fonctions.php&lt;/code&gt;) uniquement lorsque la page &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;xxx&lt;/code&gt; sera demand&#233;e (par exemple : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sommaire_fonctions.php&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&#192; l'installation, ce dossier n'existe pas, il faut le cr&#233;er.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;plugins&#034;&gt;&lt;h3 class=&#034;h3&#034; id='plugins'&gt;plugins/&lt;a class='sommaire-back sommaire-back-14' href='#s-plugins' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ce dossier re&#231;oit les sous-dossiers de chaque plugin. Par exemple, le plugin &lt;i&gt;crayons&lt;/i&gt; est plac&#233; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins/crayons/&lt;/code&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Dossiers-temporaires&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Dossiers-temporaires'&gt;Dossiers temporaires&lt;a class='sommaire-back sommaire-back-14' href='#s-Dossiers-temporaires' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;local&#034;&gt;&lt;h3 class=&#034;h3&#034; id='local'&gt; local/&lt;a class='sommaire-back sommaire-back-14' href='#s-local' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Il contient tous les fichier (re-)calculables &#224; partir des documents et donn&#233;es du site.&lt;/p&gt;
&lt;p&gt;Il s'agit essentiellement des &lt;i&gt;caches&lt;/i&gt; d'images r&#233;duites. On y trouve aussi les caches calcul&#233;s par certains plugins comme &#171; &lt;i&gt;coloration_code&lt;/i&gt; &#187;.&lt;/p&gt;
&lt;p&gt;Les fichiers de ce cache sont accessibles depuis le web.&lt;/p&gt;
&lt;p&gt;Ce dossier peut &#234;tre vid&#233;, cela ne co&#251;tera que son recalcul.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;tmp&#034;&gt;&lt;h3 class=&#034;h3&#034; id='tmp'&gt; tmp/&lt;a class='sommaire-back sommaire-back-14' href='#s-tmp' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ici sont stock&#233;s tous les fichiers temporaires comme les caches de squelettes, les sessions, les logs etc.&lt;/p&gt;
&lt;p&gt;Il contient aussi le sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dump/&lt;/code&gt; o&#249; sont archiv&#233;es les sauvegardes de la base de donn&#233;es.&lt;/p&gt;
&lt;p&gt;Contrairement &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;local/&lt;/code&gt;, les fichiers de ce cache ne sont pas accessibles depuis le web.&lt;/p&gt;
&lt;p&gt;Ce dossier peut &#234;tre vid&#233; &#224; tout moment.&lt;/p&gt;
&lt;p&gt;Voir aussi : &lt;a href=&#034;http://www.spip.net/fr_article3497.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#201;tendre SPIP&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/section&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;Lire : &lt;a href='https://www.spip.net/fr_article4654.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Le fichier mes_options.php&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 2.1</title>
		<link>https://www.spip.net/fr_article4728.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article4728.html</guid>
		<dc:date>2010-04-09T21:59:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>SPIP 2.1</dc:subject>

		<description>
&lt;p&gt;C'est avec un certain plaisir que l'&#233;quipe de SPIP vous annonce la sortie de SPIP 2.1 &lt;br class='autobr' /&gt; Ce mill&#233;sime 2010 s'annonce comme une cuv&#233;e exceptionnelle. Il a &#233;t&#233; fortement test&#233; et dispose d'un jeu plus &#233;tendu de tests unitaires, qui permettent de coder de fa&#231;on plus sure. Cette version 2.1 est un premier pas vers la modularisation des fonctionnalit&#233;s de SPIP, et voit &#224; ce titre l'apparition d'un r&#233;pertoire &#171; extensions &#187;. Les plugins pr&#233;sents dans ce r&#233;pertoire sont activ&#233;s d&#232;s l'installation (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique785.html" rel="directory"&gt;Anciennes versions&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@spip21" rel="tag"&gt;SPIP 2.1&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;C'est avec un certain plaisir que l'&#233;quipe de SPIP vous annonce la sortie de SPIP 2.1&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-2&#034; id=&#034;nav69fae928a1fb82.39262233&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Principales-ameliorations-apportees-par-la-version-2-1&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Principales-ameliorations-apportees-par-la-version-2-1&#034; class=&#034;spip_ancre&#034;&gt;Principales am&#233;liorations apport&#233;es par la version 2.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Incompatibilites-connues&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Incompatibilites-connues&#034; class=&#034;spip_ancre&#034;&gt;Incompatibilit&#233;s connues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Ce mill&#233;sime 2010 s'annonce comme une cuv&#233;e exceptionnelle. Il a &#233;t&#233; fortement test&#233; et dispose d'un jeu plus &#233;tendu de tests unitaires, qui permettent de coder de fa&#231;on plus sure. Cette version 2.1 est un premier pas vers la modularisation des fonctionnalit&#233;s de SPIP, et voit &#224; ce titre l'apparition d'un r&#233;pertoire &#171; extensions &#187;. Les plugins pr&#233;sents dans ce r&#233;pertoire sont activ&#233;s d&#232;s l'installation de SPIP et non d&#233;sactivables, ce qui ouvre la voie &#224; des distributions sp&#233;cifiques de SPIP.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Principales-ameliorations-apportees-par-la-version-2-1&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Principales-ameliorations-apportees-par-la-version-2-1'&gt;Principales am&#233;liorations apport&#233;es par la version 2.1&lt;a class='sommaire-back sommaire-back-2' href='#s-Principales-ameliorations-apportees-par-la-version-2-1' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus rapide :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; meilleure gestion des acc&#232;s disque&lt;/li&gt;&lt;li&gt; cache sur les chemins calcul&#233;s&lt;/li&gt;&lt;li&gt; am&#233;liorations et extension du serveur SQL virtuel&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus s&#233;curis&#233;e :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; sha256 sur les mots de passe et actions&lt;/li&gt;&lt;li&gt; v&#233;rification du fonctionnement des .htaccess&lt;/li&gt;&lt;li&gt; d&#233;tection automatique des mises &#224; jour de SPIP&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus belle :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; int&#233;gration (comme extension) du plugin &#171; &lt;i&gt;porte-plume&lt;/i&gt; &#187; qui am&#233;liore grandement l'&#233;dition des champs texte et offre une pr&#233;visualisation en cours d'&#233;dition&lt;/li&gt;&lt;li&gt; interface graphique par d&#233;faut plus l&#233;g&#232;re et &#233;l&#233;gante&lt;/li&gt;&lt;li&gt; possibilit&#233; de d&#233;finir des th&#232;mes graphiques (comme par exemple avec le plugin &#171; &lt;i&gt;themes_interface_privee&lt;/i&gt; &#187;)&lt;/li&gt;&lt;li&gt; meilleure gestion de la taille des champs texte (agrandissement conditionnel)&lt;/li&gt;&lt;li&gt; gestion (configurable et d&#233;sactivable) de la transparence PNG24 sous MSIE6 sur le site public&lt;/li&gt;&lt;li&gt; retour des liens &#171; &lt;i&gt;modifier cet article&lt;/i&gt; &#187; et &#171; &lt;i&gt;proposer cet article&lt;/i&gt; &#187; lors de l'&#233;dition des articles&lt;/li&gt;&lt;li&gt; nouvelle interface de gestion des plugins&lt;/li&gt;&lt;li&gt; remodelage des proc&#233;dures de sauvegarde/restauration&lt;/li&gt;&lt;li&gt; possibilit&#233; de cr&#233;er des URL accentu&#233;es en d&#233;finissant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_TRANSLITTERER_URL&lt;/code&gt; &#224; &#171; &lt;i&gt;false&lt;/i&gt; &#187; (attention &#224; la configuration du serveur)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus &#224; jour :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; compatibilit&#233; PHP 5.3&lt;/li&gt;&lt;li&gt; int&#233;gration de la biblioth&#232;que jQuery 1.4.2&lt;/li&gt;&lt;li&gt; int&#233;gration de la biblioth&#232;que pclzip 2.8.2&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus svelte :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; premi&#232;res mises en extensions de fonctionnalit&#233;s du core : compresseur (js, css, html), porte-plume (barre d'outils), filtres images et couleurs (traitement d'image), safehtml (s&#233;curisation des forums et p&#233;titions), support pour vieux navigateurs&lt;/li&gt;&lt;li&gt; gestion d'un nouveau r&#233;pertoire (extensions/) pour y placer ces plugins actifs d&#232;s l'installation et non d&#233;sactivables&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus extensible :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; apparition de nouveaux points d'entr&#233;e pour les plugins&lt;/li&gt;&lt;li&gt; remodelage de la gestion des plugins (et r&#233;pertoire sp&#233;cifique pour leur gestion : ecrire/plugins)&lt;/li&gt;&lt;li&gt; les plugins peuvent &#234;tre install&#233;s dans un ou des r&#233;pertoire(s) suppl&#233;mentaires si d&#233;finis par la constante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_DIR_PLUGINS_SUPPL&lt;/code&gt; (facilte leur usage en cas de mutualisation)&lt;/li&gt;&lt;li&gt; possibilit&#233; d'&#233;tendre l'aide en ligne pour y int&#233;grer des sections personnalis&#233;es et gestion automatique de ses traductions&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus structur&#233;e :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; mise en oeuvre d'une API d'authentification&lt;/li&gt;&lt;li&gt; am&#233;lioration de l'interface LDAP&lt;/li&gt;&lt;li&gt; refonte de l'API de notification&lt;/li&gt;&lt;li&gt; homog&#233;n&#233;isation des balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_&lt;/code&gt; : les param&#232;tres sont d&#233;sormais pass&#233;s entre accolades et disparition des &#171; &lt;i&gt;doubles pipes&lt;/i&gt; &#187; (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx||filtre&lt;/code&gt; (&#233;criture obsol&#232;te mais toutefois encore fonctionnelle)&lt;/li&gt;&lt;li&gt; apparition de nouvelles balises et fonctions : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#BOUTON_ACTION&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|balise_img&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|couleur_luminance&lt;/code&gt; (similaire &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|couleur_saturation&lt;/code&gt;, mais agissant sur l'intensit&#233; lumineuse de la couleur)&lt;/li&gt;&lt;li&gt; possibilit&#233; pour les balises dynamiques (de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_&lt;/code&gt;) de manipuler &#224; l'ex&#233;cution des valeurs qui ne sont connues que durant la compilation&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus facile &#224; d&#233;bugger :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; am&#233;lioration du d&#233;buggueur d&#233;sormais capable d'indiquer la ligne fautive dans un squelette&lt;/li&gt;&lt;li&gt; le d&#233;buggueur informe d&#233;sormais sur l'endroit pr&#233;cis de l'&#233;ventuelle mauvaise utilisation des balises dynamiques&lt;/li&gt;&lt;li&gt; API du d&#233;buggueur plus fonctionnelle (possibilit&#233;s d'appel et de personnalisations accrues)&lt;/li&gt;&lt;li&gt; am&#233;lioration du mode inclure (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?var_mode=inclure&lt;/code&gt;) affichant les diff&#233;rentes inclusions (int&#233;gration avec le plugin Skeleditor permettant de surcharger et d'&#233;diter facilement en ligne des squelettes)&lt;/li&gt;&lt;li&gt; possibilit&#233; de surcharger la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_log()&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; &lt;strong&gt;plus geek :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le compilateur offre une meilleure s&#233;paration entre le phraseur et l'arbre d'abstraction, permettant de cr&#233;er de nouvelles syntaxes (pour les courageux)&lt;/li&gt;&lt;li&gt; r&#233;apparition d'un d&#233;compilateur complet et param&#233;trable offrant la possibilit&#233; de cr&#233;er et d'exp&#233;rimenter de nouvelles syntaxes&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Incompatibilites-connues&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Incompatibilites-connues'&gt;Incompatibilit&#233;s connues&lt;a class='sommaire-back sommaire-back-2' href='#s-Incompatibilites-connues' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Comme toute nouvelle version majeure, cette 2.1 s'accompagne de quelques&lt;br class='autobr' /&gt;
incompatibilit&#233;s heureusement ais&#233;ment corrigeables :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Dans les boucles, le nom des tables SQL ext&#233;rieures &#224; SPIP doit &#234;tre pass&#233; dans sa graphie r&#233;elle et non plus en majuscules :&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_a(MaTable)...&lt;/code&gt; en lieu et place de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_a(MATABLE)...&lt;/code&gt;&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_a(mes_infos)...&lt;/code&gt; en lieu et place de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_a(MES_INFOS)...&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|reduire_image&lt;/code&gt; dispara&#238;t d&#233;finitivement (il &#233;tait d&#233;j&#224; obsol&#232;te, remplac&#233; par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|image_reduire&lt;/code&gt;)&lt;/li&gt;&lt;li&gt; Ajouter &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;include_spip(&#034;inc/filtres_images&#034;);&lt;/code&gt; dans les scripts php faisant appel &#224; des fonctions utilisant les filtres graphiques&lt;/li&gt;&lt;li&gt; S'inspirer des nouveaux fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/url/&lt;/code&gt; pour &#233;crire des scripts de personnalisation d'URL&lt;/li&gt;&lt;li&gt; Le pipeline &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;creer_chaine_url&lt;/code&gt; disparait, remplac&#233; par des pipelines sp&#233;cifiques : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;propres_creer_chaine_url&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;arbo_creer_chaine_url&lt;/code&gt;, ...&lt;/li&gt;&lt;li&gt; Toute accolade ouvrante coll&#233;e &#224; une balise est d&#233;sormais consid&#233;r&#233;e comme fournissant des arguments &#224; cette balise&lt;br class='manualbr' /&gt;exemple : dans une feuille de style : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.rub_#ID_RUBRIQUE{font-size:1.2em;}&lt;/code&gt; ne fonctionnera pas&lt;br class='manualbr' /&gt;il faut soit s&#233;parer l'accolade : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.rub_#ID_RUBRIQUE {font-size:1.2em;}&lt;/code&gt;&lt;br class='manualbr' /&gt;soit utiliser la notation compl&#232;te pour la balise : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.rub_[(#ID_RUBRIQUE)]{font-size:1.2em;}&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Les appels jQuery du type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$(&#034;input[@name=prenom]&#034;)&lt;/code&gt;, d&#233;j&#224; obsol&#232;tes avec jQuery 1.3, ne fonctionnent plus avec la version 1.4.2 de jQuery, utilis&#233;e par SPIP 2.1 ; il faut d&#233;sormais &#233;crire : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$(&#034;input[name=prenom]&#034;)&lt;/code&gt;&lt;/li&gt;&lt;li&gt; L'&#233;criture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SET{variable,}&lt;/code&gt; n'est plus accept&#233;e (d&#233;finir une variable comme vide) et doit &#234;tre remplac&#233;e par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SET{variable, ''}&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Pour les plugins, la d&#233;claration vide &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;fonctions&gt;&lt;/fonctions&gt;&lt;/code&gt; dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin.xml&lt;/code&gt; n'est plus accept&#233;e&lt;/li&gt;&lt;li&gt; Pour utiliser une fonction sp&#233;cifique d'un plugin seulement si ce plugin est activ&#233; (et sinon ne rien faire) il faut d&#233;sormais &#233;crire : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#BALISE|appliquer_filtre{fonction_specifique})]&lt;/code&gt; en lieu et place de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#BALISE|fonction_specifique)]&lt;/code&gt; qui g&#233;n&#232;rera une erreur.&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;logos&#034;&gt;&lt;/a&gt; &lt;strong&gt;Pour les balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx&lt;/code&gt;&lt;/strong&gt;&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;voir le d&#233;tail des changements&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, les &lt;i&gt;faux filtres&lt;/i&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|fichier&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|lien&lt;/code&gt; sont remplac&#233;s respectivement par l'&#233;criture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx**&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx*&lt;/code&gt;.&lt;br class='manualbr' /&gt;Les &lt;i&gt;faux filtres&lt;/i&gt; de positionnement (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|top&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|left&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|right&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|center&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|bottom&lt;/code&gt;) et les balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|#URL_yyy&lt;/code&gt; en position de filtre sont &#224; pr&#233;sent &#224; &#233;crire comme &lt;i&gt;argument&lt;/i&gt; de la balise.&lt;br class='manualbr' /&gt;L'&#233;criture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#LOGO_xxx|left)]&lt;/code&gt; est donc remplac&#233;e par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx{left}&lt;/code&gt; et l'&#233;criture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#LOGO_xxx|#URL_yyy)]&lt;/code&gt; est remplac&#233;e par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGO_xxx{#URL_yyy}&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Il est fortement recommand&#233; d'utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INSERT_HEAD&lt;/code&gt; pour que les extensions puissent fournir leur feuille de style et code javascript sp&#233;cifique.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;a href=&#034;https://core.spip.net/projects/spip/repository/revisions/13550&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;voir le d&#233;tail des changements&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 2.0</title>
		<link>https://www.spip.net/fr_article3784.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3784.html</guid>
		<dc:date>2008-12-12T22:45:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>ajax</dc:subject>
		<dc:subject>$GLOBALS['debut_italique']</dc:subject>
		<dc:subject>$GLOBALS['fin_italique']</dc:subject>
		<dc:subject>$GLOBALS['class_spip']</dc:subject>
		<dc:subject>$GLOBALS['debut_gras']</dc:subject>
		<dc:subject>$GLOBALS['fin_gras']</dc:subject>
		<dc:subject>$GLOBALS['class_spip_plus']</dc:subject>
		<dc:subject>$GLOBALS['debut_date_publication']</dc:subject>
		<dc:subject>couleur_saturation</dc:subject>
		<dc:subject>couleur_web</dc:subject>

		<description>
&lt;p&gt;SPIP passe en version 2.0, sept ans apr&#232;s le lancement de la version 1.0, huit ans apr&#232;s la version d'uZine, et presque deux ans apr&#232;s la pr&#233;c&#233;dente version. &lt;br class='autobr' /&gt;
La branche 1 de SPIP &#233;tait un syst&#232;me de publication int&#233;gr&#233;, c'est-&#224;-dire fond&#233; sur un sch&#233;ma unique de base de donn&#233;es, pr&#234;t &#224; l'emploi. Ses fontionnalit&#233;s, en particulier son syst&#232;me de squelettes de mise en pages, ont suscit&#233; de nouveaux besoins pour lesquels il n'&#233;tait pas pr&#233;vu au d&#233;part. Le nouveau compilateur de squelettes (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique785.html" rel="directory"&gt;Anciennes versions&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@ajax" rel="tag"&gt;ajax&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsdebut_italique" rel="tag"&gt;$GLOBALS['debut_italique']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsfin_italique" rel="tag"&gt;$GLOBALS['fin_italique']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsclass_spip" rel="tag"&gt;$GLOBALS['class_spip']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsdebut_gras" rel="tag"&gt;$GLOBALS['debut_gras']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsfin_gras" rel="tag"&gt;$GLOBALS['fin_gras']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsclass_spip_plus" rel="tag"&gt;$GLOBALS['class_spip_plus']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalsdebut_date_publication" rel="tag"&gt;$GLOBALS['debut_date_publication']&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@couleur_saturation" rel="tag"&gt;couleur_saturation&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@couleur_web" rel="tag"&gt;couleur_web&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.spip.net/local/cache-vignettes/L150xH96/arton3784-fdd49.png?1594840460' class='spip_logo spip_logo_right' width='150' height='96' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav69fae928aa06c8.64620549&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-et-la-publication-Web&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-et-la-publication-Web&#034; class=&#034;spip_ancre&#034;&gt;SPIP et la publication Web&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-et-le-design-Web&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-et-le-design-Web&#034; class=&#034;spip_ancre&#034;&gt;SPIP et le design Web&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SPIP-et-le-developpement-Web&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SPIP-et-le-developpement-Web&#034; class=&#034;spip_ancre&#034;&gt;SPIP et le d&#233;veloppement Web&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-A-vous-de-jouer&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#A-vous-de-jouer&#034; class=&#034;spip_ancre&#034;&gt;&#192; vous de jouer !&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;SPIP passe en version 2.0, &lt;i&gt;sept ans&lt;/i&gt; apr&#232;s le lancement de la version 1.0, &lt;i&gt;huit ans&lt;/i&gt; apr&#232;s la version d'&lt;a href=&#034;http://www.uzine.net&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;uZine&lt;/a&gt;,
et presque deux ans apr&#232;s la &lt;a href='https://www.spip.net/fr_article3567.html' class=&#034;spip_in&#034;&gt;pr&#233;c&#233;dente version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La branche 1 de SPIP &#233;tait un syst&#232;me de publication int&#233;gr&#233;, c'est-&#224;-dire fond&#233; sur un sch&#233;ma unique de base de donn&#233;es,
pr&#234;t &#224; l'emploi. Ses fontionnalit&#233;s, en particulier son syst&#232;me de squelettes de mise en pages, ont suscit&#233; de nouveaux besoins pour lesquels il n'&#233;tait pas pr&#233;vu au d&#233;part. Le nouveau compilateur de squelettes de &lt;a href='https://www.spip.net/fr_article2991.html' class=&#034;spip_in&#034;&gt;SPIP 1.8&lt;/a&gt; avait augment&#233; leur expressivit&#233;, que beaucoup de contributions ont alors utilis&#233;e pour pr&#233;senter toute sorte d'informations impr&#233;vues : catalogues, informations g&#233;ographiques, s&#233;rie d'&#233;v&#233;nements... &lt;a href='https://www.spip.net/fr_article3368.html' class=&#034;spip_in&#034;&gt;SPIP 1.9&lt;/a&gt; avait introduit diff&#233;rents m&#233;thodes d'&lt;a href='https://www.spip.net/fr_article3497.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;extensions&lt;/a&gt;, surcharges, &lt;a href=&#034;http://doc.spip.org/@Les-points-d-entree-pipelines&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;point d'entr&#233;es&lt;/a&gt;, greffons (les &lt;i&gt;plugins&lt;/i&gt;). Le succ&#232;s des sites de contributions &#224; SPIP fut au rendez-vous, et plusieurs contributeurs sont venus renforcer l'&#233;quipe des d&#233;veloppeurs. Mais seuls les programmeurs avaient acc&#232;s &#224; ces nouveaut&#233;s dont l'interface de programmation devait gagner en maturit&#233;.&lt;/p&gt;
&lt;p&gt;La branche 2 de SPIP se pr&#233;sente donc &lt;i&gt;&#224; la fois&lt;/i&gt; comme le syst&#232;me de publication int&#233;gr&#233; (compatible avec les versions pr&#233;c&#233;dentes), et comme une plate-forme de d&#233;veloppement multi-serveurs SQL pour qui veut aller plus loin. Cette plate-forme propose elle-m&#234;me deux niveaux d'expertise, permettant de conserver la progressivit&#233; de la courbe d'apprentissage de SPIP tout en augmentant le nombre de services rendus.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le premier niveau, d&#233;j&#224; pr&#233;sent dans les versions de SPIP ant&#233;rieures, s'adresse &#224; ceux qui veulent innover graphiquement, sans avoir &#224; programmer en
SQL, PHP et JavaScript. Connaissant HTML et CSS et pr&#234;ts &#224; apprendre le syst&#232;me de squelettes SPIP, ils peuvent mettre en page de mani&#232;re innovante des informations issues de bases de donn&#233;es &#233;ventuellement h&#233;t&#233;rog&#232;nes.&lt;/li&gt;&lt;li&gt; Le deuxi&#232;me niveau s'adresse aux programmeurs, qui pourront &#233;crire des extensions portables sur diff&#233;rents serveurs SQL, &#224; l'aide d'une interface de programmation fond&#233;e sur un &lt;i&gt;serveur virtuel SQL&lt;/i&gt;. Cette interface peut m&#234;me &#234;tre utilis&#233;e ind&#233;pendamment de la base de donn&#233;es install&#233;e par SPIP.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Compte tenu de l'abondance des nouveaut&#233;s, la description de cette nouvelle version de SPIP s'articule en trois th&#232;mes, renvoyant parfois &#224; des articles d&#233;di&#233;s :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; SPIP et la publication Web,
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; URLs symboliques g&#233;rant leur historique et permettant la notation arborescente ;&lt;/li&gt;&lt;li&gt; incrustation dans les textes de m&#233;dia divers ;&lt;/li&gt;&lt;li&gt; forums permettant l'inclusion de documents ;&lt;/li&gt;&lt;li&gt; nombreuses fonctionnalit&#233;s nouvelles autour des p&#233;titions ;&lt;/li&gt;&lt;li&gt; gestion des &#233;ditions concurrentes ;&lt;/li&gt;&lt;li&gt; installation automatique de plugins ;&lt;/li&gt;&lt;li&gt; acc&#232;s simultan&#233; &#224; plusieurs serveurs (MySQL PostGres, SQLite2 et 3), fusion d'extraits de bases, squelettes automatiques ;&lt;/li&gt;&lt;li&gt; mutualisation facilit&#233;e, notamment pour les h&#233;bergeurs ;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; SPIP et le design Web
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes fond&#233;s sur des CSS LayoutGala ;&lt;/li&gt;&lt;li&gt; nouveaux filtres ;&lt;/li&gt;&lt;li&gt; nouveaux modes d'inclusion, notamment de formulaires en AJAX ;&lt;/li&gt;&lt;li&gt; nouveaut&#233;s dans les balises, notamment celle g&#233;rant URL et cl&#233; primaire ;&lt;/li&gt;&lt;li&gt; nouveaut&#233;s dans les crit&#232;res, notamment pour les jointures et le moteur de recherche ;&lt;/li&gt;&lt;li&gt; gestion automatique des cha&#238;nes de langues &#224; traduire ;&lt;/li&gt;&lt;li&gt; validateur XML int&#233;gr&#233; applicable sur un ensemble de pages ;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; SPIP et la programmation Web
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; serveur SQL virtuel s'appuyant directement sur les couches basses de PHP ;&lt;/li&gt;&lt;li&gt; nouveaux pipelines ;&lt;/li&gt;&lt;li&gt; d&#233;clarations de biblioth&#232;ques externes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Signalons enfin qu'&#224; partir de cette version, SPIP est distribu&#233; sous la licence GNU/GPL 3. Cette licence, qui succ&#232;de &#224; la licence GNU/GPL 2 vieille de 15 ans, prend mieux en compte le droit d'auteur dans d'autres pays que les Etats-Unis, ainsi que l'&#233;volution de la pratique du logiciel libre.
Explications compl&#232;tes et argumentaire par la &lt;i&gt;Free
Software Foundation&lt;/i&gt; et Richard Stallman :
&lt;br /&gt;&#8212; &lt;a href=&#034;http://www.gnu.org/licenses/gpl-3.0.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la licence&lt;/a&gt;
&lt;br /&gt;&#8212; &lt;a href='https://www.spip.net/IMG/txt/gpl-3.0.fr.txt' class=&#034;spip_in&#034; type='text/plain'&gt;la licence en fran&#231;ais (traduction non officielle)&lt;/a&gt;
&lt;br /&gt;&#8212; &lt;a href=&#034;http://www.gnu.org/licenses/rms-why-gplv3.fr.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Pourquoi mettre &#224; jour vers la GPLv3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme toujours, merci &#224; celles et ceux qui ont contribu&#233; de pr&#232;s ou de loin &#224; cette nouvelle version. Merci d'abord aux traducteurs, en particulier aux nouveaux venus qui permettent &#224; SPIP d'&#234;tre d&#233;sormais disponible en indon&#233;sien, en birman, en khmer (cambodgien), en asturien et en su&#233;dois.&lt;br class='manualbr' /&gt;Merci &#224; celles et ceux qui ont suivi la version en d&#233;veloppement presque au jour le jour, merci pour leur patience face &#224; l'immensit&#233; du chantier mis en &#339;uvre et les fausses pistes que nous leur avons parfois inflig&#233;es, merci pour leur confiance malgr&#233; les difficult&#233;s que nous rencontrions.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-et-la-publication-Web&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-et-la-publication-Web'&gt;SPIP et la publication Web&lt;a class='sommaire-back sommaire-back-4' href='#s-SPIP-et-la-publication-Web' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP est un syst&#232;me de cr&#233;ation et de gestion de sites Web muni d'une interface induisant des structures &#233;ditoriales fiables, c'est-&#224;-dire p&#233;rennes et &#233;volutives&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;Concevoir et maintenir la structure &#233;ditoriale d'un site enrichi (&#8230;)&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Apr&#232;s son installation par la seule saisie de cinq formulaires Web, il est imm&#233;diatement pr&#234;t &#224; l'emploi, et permet de faire vivre, seul ou avec une &#233;quipe de r&#233;dacteurs, un site Web dot&#233; des meilleures technologies du moment.&lt;/p&gt;
&lt;p&gt;Pour SPIP 2.0, l'interface et l'ergonomie ont &#233;t&#233; enrichies, les normes XHTML et CSS sont mieux respect&#233;es, les interactions avec le syst&#232;me ont &#233;t&#233; acc&#233;l&#233;r&#233;es, notamment par l'utilisation syst&#233;matique d'AJAX&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;AJAX : ensemble de fonctions Javascript permettant de manipuler la structure (&#8230;)&#034; id=&#034;nh4-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;. L'ajout de documents de divers types a &#233;t&#233; unifi&#233;, tout en en permettant une utilisation diversifi&#233;e.
Ces &#171; lissages &#187; progressifs font que les nouveaux utilisateurs b&#233;n&#233;ficient d'une interface &#233;prouv&#233;e, et les anciens pr&#233;servent leurs (bonnes) habitudes.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Jeux d'URLs symboliques&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De nouvelles URLs dites propres permettent d'avoir plusieurs noms d'URL associ&#233;s &#224; un m&#234;me objet, donc en particulier de modifier le titre d'un article, ce qui cr&#233;era la nouvelle URL sans invalider la pr&#233;c&#233;dente. En outre, un client HTTP demandant celle-ci sera d&#233;finitivement redirig&#233; vers la nouvelle.&lt;/p&gt;
&lt;p&gt;Ces URLs sont &#224; pr&#233;sent g&#233;r&#233;es dans une table SQL s&#233;par&#233;e dont elles sont la cl&#233; primaire, ce qui acc&#233;l&#232;re leur emploi. La compatibilit&#233; avec les anciennes URLs propres est assur&#233;e lors de la mise &#224; jour du site.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Ces nouvelles URLs sont la finalisation du travail pionnier effectu&#233; par feu Toggg (&lt;a href=&#034;http://web.archive.org/web/20070309220121/toggg.com/spip/spip.php?article19&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://web.archive.org/web/20070309220121/toggg.com/spip/spip.php?article19&lt;/a&gt; et &lt;a href=&#034;http://web.archive.org/web/20070309220112/toggg.com/spip/spip.php?article18&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://web.archive.org/web/20070309220112/toggg.com/spip/spip.php?article18&lt;/a&gt;) &#224; la m&#233;moire de qui cette nouvelle version de SPIP est d&#233;di&#233;e (&lt;a href=&#034;http://contrib.spip.net/Adieu-l-ami&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://contrib.spip.net/Adieu-l-ami&lt;/a&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un nouveau jeu d'URLs, nomm&#233; &lt;i&gt;arbo&lt;/i&gt;, a &#233;galement &#233;t&#233; introduit, offrant une notation arborescente, comme :
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://www.monsite.com/secteur/rubrique1/rubrique2/article&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Enfin, un simple clic dans un tableau affich&#233; par les pages d'administration permet &#224; pr&#233;sent de choisir le jeu d'URLs.
L'ancienne m&#233;thode utilisant la variable globale PHP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$type_urls&lt;/code&gt; fonctionne toujours, mais il est conseill&#233; d'&#233;vacuer cette variable de votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_options.php&lt;/code&gt;, afin de voir appara&#238;tre ce tableau de configuration. Si vous avez un jeu d'URLs personnel dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls&lt;/code&gt; de votre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SPIP_PATH&lt;/code&gt;, il appara&#238;tra automatiquement dans ce tableau.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Incrustation dans les textes de m&#233;dia divers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les mod&#232;les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;img&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;emb&lt;/code&gt; permettant d'incruster un document dans le corps d'un texte ont &#233;t&#233; totalement repens&#233;s.
Ils s'appuient &#224; pr&#233;sent sur la nomenclature officielle des types MIME, en utilisant des filtres homonymes de ceux-ci. Cette architecture permet de r&#233;gler tr&#232;s finement l'incrustation d'un document de tout type ; elle est d&#233;crite dans &lt;a href='https://www.spip.net/article3715.html'&gt;article 3715&lt;/a&gt; qui compl&#232;te l'article &lt;a href='https://www.spip.net/fr_article3454.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Utiliser les mod&#232;les&lt;/a&gt; &#233;crit lors de la sortie de &lt;a href='https://www.spip.net/fr_article3462.html' class=&#034;spip_in&#034;&gt;SPIP 1.9.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les r&#233;dacteurs peuvent ainsi incruster un plus grand nombre de types de documents qu'auparavant. C'est ainsi que SPIP pr&#233;sente automatiquement en HTML le contenu d'un fichier CSV issu d'un tableur. De m&#234;me,
un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;txt&lt;/code&gt; sera ainsi incrust&#233; apr&#232;s transcodage des chevrons et placement dans une balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pre&lt;/code&gt; afin d'appara&#238;tre &lt;i&gt;verbatim&lt;/i&gt;. Enfin, pour un document HTML, ses feuilles de styles seront automatiquement import&#233;es, ce qui permet en particulier de facilement transformer un site statique en un site sous SPIP.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Envoi de documents dans les forums&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une nouvelle option permet d'autoriser les visiteurs a poster des documents dans les forums ; &#233;videmment ce n'est pas activ&#233; par d&#233;faut.&lt;/p&gt;
&lt;p&gt;L'option se r&#232;gle en listant les extensions de fichier accept&#233;es, par exemple &#171; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;gif,png,jpg,mp3&lt;/code&gt; &#187;, le signe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;*&lt;/code&gt; indiquant que tout type de documents est accept&#233;, hormis ceux pr&#233;sentant des trous de s&#233;curit&#233; potentiels.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Nombreuses fonctionnalit&#233;s nouvelles autour des p&#233;titions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Beaucoup de nouveaut&#233;s d&#233;crites dans &lt;a href='https://www.spip.net/fr_article3802.html' class=&#034;spip_in&#034;&gt;Les p&#233;titions sous SPIP&lt;/a&gt; : recherche et tris multiples des signataires, pagination, flux RSS, statistiques journali&#232;res et mensuelles, interface pour tableur, p&#233;titions multilingues.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Gestion des &#233;ditions concurrentes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'espace priv&#233; de SPIP g&#232;re les conflits d'&#233;dition concurrente des articles, rubriques, br&#232;ves, mots-cl&#233;s, auteurs et sites.&lt;/p&gt;
&lt;p&gt;Le sc&#233;nario est le suivant : supposons que Alice et Bob ouvrent en m&#234;me temps le m&#234;me article en &#233;dition ; ensuite chacun renvoie ses modifications, d'abord Alice, puis Bob.&lt;/p&gt;
&lt;p&gt;Les situations sont diverses :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Alice a modifi&#233; le titre, Bob le texte : on accepte les deux modifications, le titre de Bob (inchang&#233;) n'&#233;crase pas le titre d'Alice ;&lt;/li&gt;&lt;li&gt; Alice modifie le titre, Bob lui aussi :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit ils ont mis le m&#234;me titre : pas de probl&#232;me ;&lt;/li&gt;&lt;li&gt; soit le titre diff&#232;re : on pr&#233;vient Bob, on lui montre le titre qu'il vient d'envoyer, celui qui est stock&#233; dans la base, la diff&#233;rence entre les deux, et un formulaire pour copier/coller ses modifications. Le titre envoy&#233; n'est pas enregistr&#233; dans la base.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces &#233;l&#233;ments sont trait&#233;s champ par champ ind&#233;pendamment : ainsi s'il y a conflit sur le titre mais pas sur le chapeau, celui-ci est enregistr&#233;, et le message d'erreur ne porte que sur le titre.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Faciliter l'utilisation des plugins&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#8212; Installations manuelle et/ou automatique&lt;/p&gt;
&lt;p&gt;Les plugins s'installent dans un dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/plugins&lt;/code&gt;. En cr&#233;ant un sous-dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/plugins/auto&lt;/code&gt;, on active l'installation automatique de plugins.&lt;/p&gt;
&lt;p&gt;Il est possible d'ajouter, via l'installation automatique :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; des plugins individuels, en indiquant l'URL d'un fichier Zip,&lt;/li&gt;&lt;li&gt; des listes de plugins r&#233;pertori&#233;s dans un flux RSS.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#8212; Trouver des plugins&lt;/p&gt;
&lt;p&gt;Trois espaces permettent aux utilisateurs de trouver des plugins selon diff&#233;rentes orientations (d&#233;veloppeurs, contributif, r&#233;f&#233;rencement) :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; tous les plugins d&#233;velopp&#233;s sur la Zone peuvent appara&#238;tre, &#224; l'initiative de leurs auteurs, dans le r&#233;pertoire &lt;a href=&#034;http://files.spip.org/spip-zone/&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://files.spip.org/spip-zone/&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;http://contrib.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;SPIP-Contrib&lt;/a&gt; &#233;volue pour am&#233;liorer la recherche de plugins ;&lt;/li&gt;&lt;li&gt; lanc&#233; &#224; l'occasion de cette nouvelle mouture de SPIP, le site &lt;strong&gt;&lt;a href=&#034;http://plugins.spip.net&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Plugins.spip&lt;/a&gt;&lt;/strong&gt; propose un r&#233;f&#233;rencement plus fin, par th&#232;me, par compatibilit&#233; de version SPIP, par langues...&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les sites Plugins.spip et SPIP-contrib proposent des flux RSS directement utilisables pour l'installation automatique de plugins compatibles avec SPIP 2.0.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Acc&#232;s &#224; plusieurs bases et serveurs, fusion partielle et squelettes automatiques&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SPIP est &#224; pr&#233;sent disponible non seulement &#224; travers un serveur MySQL mais aussi &#224; travers un serveur PostGreSQL et &#224; travers les extensions SQLite 2 et 3 de PHP. Le choix est propos&#233; en d&#233;but d'installation puis m&#233;moris&#233; dans le fichier de connexion. A noter que le format des sauvegardes est commun &#224; toutes les versions, de sorte qu'il est possible de revenir sur le choix initial en restaurant une sauvegarde apr&#232;s r&#233;installation de SPIP sous un autre serveur SQL.&lt;/p&gt;
&lt;p&gt;Cette nouvelle portabilit&#233; de SPIP a permis de stabiliser une fonctionnalit&#233; jusqu'&#224; pr&#233;sent lacunaire, savoir l'utilisation des squelettes sur plusieurs bases SQL &#224; la fois.&lt;/p&gt;
&lt;p&gt;Un formulaire comparable &#224; celui d'installation,
accessible dans le menu &lt;i&gt;maintenance du site&lt;/i&gt;, permet de d&#233;clarer ses identifiants de connexion &#224; une autre base, et produit un fichier de connexion semblable &#224; celui du site principal, suffisant pour utiliser cette base. Dans le cas d'une base cr&#233;&#233;e par un autre site sous SPIP, cette d&#233;claration peut se r&#233;duire &#224; un simple copie de son fichier de connexion.&lt;/p&gt;
&lt;p&gt;Cette d&#233;claration faite, on peut appliquer les squelettes du site appelant sur les tables d'un autre site, simplement en rajoutant dans l'URL du site appelant un param&#232;tre suppl&#233;mentaire, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;connect&lt;/code&gt;, avec comme valeur le nom de son fichier de connexion (sans l'extension &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.php&lt;/code&gt;). On peut aussi m&#234;ler dans un m&#234;me squelette des boucles sur des bases diff&#233;rentes, SPIP ouvrant autant de connexions et passant de l'une &#224; l'autre quand n&#233;cessaire. &#192; noter que ces bases peuvent &#234;tre g&#233;r&#233;es par d'autres impl&#233;mentations SQL que celle du site principal, SPIP jouant donc un r&#244;le d'agr&#233;gateur d'extraits de plusieurs bases.&lt;/p&gt;
&lt;p&gt;Pour permettre d'explorer rapidement les tables d'une base, un m&#233;canisme de cr&#233;ation automatique d'un squelette se d&#233;clenche lorsque la valeur du param&#232;tre d'URL &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt; est de la forme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;table:&lt;/code&gt;&lt;i&gt;la table&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Ce &lt;i&gt;vert&#233;breur&lt;/i&gt; visualise le contenu de la table selon plusieurs modes de navigation, et permet de sauvegarder le squelette cr&#233;&#233;.&lt;/p&gt;
&lt;p&gt;Il est ainsi facile de d&#233;velopper un utilitaire de gestion de bases de donn&#233;es avec SPIP, donc &#233;ventuellement multi-serveurs.&lt;/p&gt;
&lt;p&gt;Pour des raisons de confidentialit&#233;, ce m&#233;canisme n'est accessible qu'au webmestre principal mais peut &#234;tre plus ouvert en surchargeant la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;autoriser_webmestre&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Autre fonctionnalit&#233; stabilis&#233;e &#224; l'occasion du portage multi-serveurs :
la sauvegarde d'une partie seulement de la base, et sa fusion ult&#233;rieure avec la base d'un autre site.&lt;/p&gt;
&lt;p&gt;Une pr&#233;sentation synth&#233;tique des fonctionnalit&#233;s sur les bases SQL sont d&#233;crites dans un article complet : &lt;a href='https://www.spip.net/fr_article3681.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Les bases de donn&#233;es en SPIP&lt;/a&gt;. Il propose en particulier un nommage
des fichiers de connexion tel que toutes les bases des sites install&#233;s se connaissent les une les autres sans aucune d&#233;claration suppl&#233;mentaire.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Mutualisation des sources&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La &lt;a href='https://www.spip.net/fr_article3514.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Mutualisation du noyau SPIP&lt;/a&gt;, propos&#233;e depuis &lt;a href='https://www.spip.net/fr_article3368.html' class=&#034;spip_in&#034;&gt;SPIP 1.9&lt;/a&gt;, s'applique &#224; pr&#233;sent quels que soient les r&#233;pertoires de donn&#233;es de SPIP, la limitation sur le chemin du r&#233;pertoire IMG ayant &#233;t&#233; lev&#233;e.&lt;/p&gt;
&lt;p&gt;La mutualisation est recommand&#233;e aux webmestres administrant plusieurs sites, afin de leur faciliter leur t&#226;ches de maintenance. Elle leur assurera aussi un maximum de confort s'ils veulent profiter du multi-bases, d&#233;crit ailleurs dans cet article.&lt;/p&gt;
&lt;p&gt;Nous invitons &#233;galement tous les h&#233;bergeurs &#224; investiguer cette fonctionnalit&#233;, car ils pourront ainsi consid&#233;rablement &#233;conomiser de la place disque et diminuer globalement le nombre de chargements des multiples copies de SPIP pouvant exister sur leurs serveurs. Plusieurs extensions r&#233;alisant automatiquement de telles configurations ont &#233;t&#233; d&#233;velopp&#233;es, voir la &lt;a href=&#034;http://contrib.spip.net/Mutualisation&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;rubrique Mutualisation de SPIP-Contrib&lt;/a&gt;. Dans cette configuration, SPIP agit comme une &lt;i&gt;ferme &#224; blog&lt;/i&gt; ou comme un &lt;i&gt;serveur de CMS&lt;/i&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-et-le-design-Web&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-et-le-design-Web'&gt;SPIP et le design Web&lt;a class='sommaire-back sommaire-back-4' href='#s-SPIP-et-le-design-Web' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;- &lt;strong&gt;Squelettes fond&#233;s sur des CSS LayoutGala&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SPIP fournit &#224; la fois des squelettes standards structur&#233;s qui utilisent les m&#233;thodes modernes et des outils destin&#233;s aux webmestres (le langage des boucles, balises et crit&#232;res et filtres) qui leur permettent de personnaliser progressivement leur site en d&#233;passant l'utilisation des squelettes &#171; cl&#233;s en main &#187;.&lt;/p&gt;
&lt;p&gt;Les squelettes livr&#233;s en standard, la &#171; dist &#187;, s'appuient d&#233;sormais sur la structure HTML des mod&#232;les &#171; &lt;a href=&#034;http://blog.html.it/layoutgala/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Layout Gala&lt;/a&gt; &#187;, qui permettent de modifier la disposition des diff&#233;rents blocs en modifiant quelques lignes de CSS :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div id=&#034;page&#034;&gt; &lt;div id=&#034;entete&#034;&gt;Ent&#234;te&lt;/div&gt; &lt;div id=&#034;conteneur&#034;&gt; &lt;div id=&#034;contenu&#034;&gt;Contenu&lt;/div&gt; &lt;/div&gt; &lt;div id=&#034;navigation&#034;&gt;Navigation&lt;/div&gt; &lt;div id=&#034;extra&#034;&gt;Extra&lt;/div&gt; &lt;div id=&#034;pied&#034;&gt;Pied de page&lt;/div&gt; &lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le code HTML des squelettes int&#232;gre par d&#233;faut les &lt;a href=&#034;https://fr.wikipedia.org/wiki/Microformats&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;Microformats&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les squelettes respectent le XHTML 1.0 &lt;i&gt;strict&lt;/i&gt;, ainsi que les scripts de l'espace priv&#233;. Toutefois le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Doctype&lt;/code&gt; d&#233;clar&#233; est le XHTML &lt;i&gt;transitionnal&lt;/i&gt;, afin de ne pas contraindre les r&#233;dacteurs &#224; l'apprentissage d'une norme difficile et assez critiquable (voir le premier paragraphe de l'article sur &lt;a href='https://www.spip.net/article3541.html'&gt;article 3541&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;La gestion des raccourcis a &#233;volu&#233; et de nouvelles variables permettent de les personnaliser.
(Cf. : &lt;a href=&#034;http://archives.rezo.net/spip-core.mbox/200703.mbox/%3c20070316111736.GA25592@rezo.net%3e&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://archives.rezo.net/spip-core....&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Personnalisation des balises ins&#233;r&#233;es par SPIP&lt;/strong&gt; pour l'italique et le gras :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['debut_italique'] = '&lt;i&gt;' ; $GLOBALS['fin_italique'] = '&lt;/i&gt;' ; $GLOBALS['debut_gras'] = '&lt;strong&gt;' ; $GLOBALS['fin_gras'] = '&lt;/strong&gt;' ; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;- &lt;strong&gt;Paragraphes&lt;/strong&gt; : tous les textes sont d&#233;sormais paragraph&#233;s par SPIP de fa&#231;on identique et coh&#233;rente. Pour retrouver le fonctionnement ant&#233;rieur, il suffit de r&#233;gler la variable de personnalisation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$toujours_paragrapher&lt;/code&gt; &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;false&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['toujours_paragrapher'] = false; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;- &lt;strong&gt;Suppression des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class=&#034;spip&#034;&lt;/code&gt;&lt;/strong&gt; sur les p, i, strong et li. La variable de personnalisation pour les remettre est (attention, notez l'espace initial !) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['class_spip'] = 'class=&#034;spip'; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Remarquez que, dans les notes, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;p class=&#034;spip_note&#034;&gt;&lt;/code&gt; est conserv&#233; si &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;p class=&#034;spip&#034;&gt;&lt;/code&gt; est conserv&#233; (pour compatibilit&#233; ascendante), sinon il dispara&#238;t aussi.&lt;/p&gt;
&lt;p&gt;On peut intervenir plus finement, par exemple, pour enlever le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class=&#034;spip&#034;&lt;/code&gt; des paragraphes mais pas des italiques :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['class_spip'] = ''; $GLOBALS['debut_italique'] = '&lt;i class=&#034;spip&#034;&gt;'; $GLOBALS['debut_gras'] = '&lt;strong class=&#034;spip&#034;&gt;'; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par ailleurs, si on veut vraiment enlever le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class=&#034;spip&#034;&lt;/code&gt; des autres raccourcis (ul, ol, tables, hr, h3 et blockquote g&#233;n&#233;r&#233;s par les raccourcis), on peut faire :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['class_spip_plus'] = ''; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;- &lt;strong&gt;Po&#233;sie&lt;/strong&gt; : le code cr&#233;&#233; par le raccourcis SPIP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;poesie&gt;&lt;/code&gt; devient :
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;blockquote class=&#034;spip_poesie&#034;&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Date de premi&#232;re publication&lt;/strong&gt; : signalons enfin ici une autre variable de personnalisation, bien qu'elle ne concerne pas les styles.
Par d&#233;faut, l'ann&#233;e de la date de publication reste libre. Pour forcer l'affichage d'un menu d&#233;roulant &#224; partir d'une certaine ann&#233;e (comme pour la date de mise en ligne), on peut personnaliser la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$debut_date_publication&lt;/code&gt;, par exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['debut_date_publication'] = 1997; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;- &lt;strong&gt;Nouveaut&#233;s dans les filtres&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#8212; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_typo&lt;/code&gt; fonctionne (de mani&#232;re exp&#233;rimentale) avec l'arabe (et sans doute l'h&#233;breu). La pr&#233;sence de caract&#232;res arabes et h&#233;breux est d&#233;tect&#233;e automatiquement, ce qui d&#233;clenche alors un certain nombre d'automatismes destin&#233;s &#224; inverser l'ordre des lettres (de droite &#224; gauche) et &#224; g&#233;rer le syst&#232;me complexe de ligatures de l'arabe.&lt;/p&gt;
&lt;div class='spip_document_2256 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://www.spip.net/local/cache-vignettes/L195xH56/01756a08cc2ace645de9664e2c194c8b-4900c.gif?1594835766' width='195' height='56' alt='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&#8212; Trois nouveaux filtres de manipulation des couleurs apparaissent : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_saturation&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_web&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_4096&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_saturation&lt;/code&gt; admet une valeur entre 0 et 1 indiquant la saturation de la couleur :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; 0 : blanc&lt;/li&gt;&lt;li&gt; 1 : couleur compl&#232;tement satur&#233;e (attention : la couleur totalement satur&#233;e n'est pas le noir).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce filtre est tr&#232;s pratique pour fabriquer un cama&#239;eu de couleurs, l&#224; o&#249; les fonctions &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_eclaircir&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_foncer&lt;/code&gt; manquent de pr&#233;cision et, surtout, affadissent les couleurs (en ne jouant pas sur la saturation, mais sur la luminosit&#233;).&lt;/p&gt;
&lt;p&gt;Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_web&lt;/code&gt; retourne un arrondi de la couleur dans une gamme de 256 couleurs. Le but n'est pas r&#233;ellement de r&#233;aliser un affichage pour &#233;cran en 256 couleurs (de tels &#233;crans existent-ils encore ?), mais plus g&#233;n&#233;ralement de limiter le nombre de couleurs possibles appliqu&#233;es &#224; un filtre graphique (par exemple colorer une image typographique ou changer une feuille de style) et ainsi &#233;viter d'obtenir potentiellement 16 millions de variantes d'un tel fichier.&lt;/p&gt;
&lt;p&gt;Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_4096&lt;/code&gt; retourne un arrondi de la couleur dans une gamme de 4096 couleurs.&lt;/p&gt;
&lt;p&gt;&#8212; Enfin, le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_extreme&lt;/code&gt; admet maintenant une variable optionnelle, entre 0 et 1 (par d&#233;faut : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;0.5&lt;/code&gt;), pour r&#233;gler le seuil de luminosit&#233; &#224; partir duquel on bascule en noir ou en blanc.&lt;/p&gt;
&lt;p&gt;Au passage, les fonctions de conversion entre RGB, HSL et HSV sont int&#233;gr&#233;es dans les sources (&#224; usage interne des fonctions de manipulation des couleurs). Le passage en HSL est d'ailleurs utilis&#233; d&#233;sormais dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couleur_extreme&lt;/code&gt;, ce qui fait que le basculement noir-blanc se fait sur une base &#171; visuelle &#187;, et pas seulement sur la moyenne des composantes.&lt;/p&gt;
&lt;p&gt;&#8212; Le filtre graphique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_aplatir&lt;/code&gt; accepte d&#233;sormais un quatri&#232;me param&#232;tre, permettant de conserver la transparence (notamment pour la conversion vers le format GIF).&lt;/p&gt;
&lt;p&gt;&#8212; Le nouveau filtre graphique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; image_format&lt;/code&gt; permet de forcer le passage d'un format &#224; un autre, en conservant la transparence dans le cas du PNG et du GIF. Il s'agit d'un raccourci (simplifi&#233;, donc) de la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_aplatir&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Attention, dans le cas d'une conversion du PNG avec transparence vers le GIF, cette fonction ne permet pas de choisir la couleur vers laquelle on r&#233;alise la transformation des points semi-transparents ; dans une telle situation, c'est donc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_aplatir&lt;/code&gt; qui devra &#234;tre utilis&#233;e.&lt;/p&gt;
&lt;p&gt;&#8212; Les filtres de traitement d'image ont &#233;t&#233; enrichis d'un m&#233;canisme automatis&#233; de collecte et nettoyage des images temporaires. Ainsi lors de la succession de plusieurs filtres dans une m&#234;me expression, seule l'image finale est conserv&#233;e, ce qui permet de r&#233;duire l'espace disque consomm&#233;.&lt;/p&gt;
&lt;p&gt;&#8212; Le nouveau filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;compacte_head&lt;/code&gt; compacte les diff&#233;rents fichiers Javascript et CSS appel&#233;s depuis une squelette, dans deux fichiers uniques de taille r&#233;duite, ce qui permet d'acc&#233;l&#233;rer le chargement des pages visit&#233;es (on n'appelle plus ainsi plusieurs fichiers Javascript mais un seul, et ce fichier est plus l&#233;ger). Si l'on utilise (comme c'est le cas du squelette de la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dist&lt;/code&gt;) une inclusion &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc-head.html&lt;/code&gt; r&#233;unissant les appels Javascript et CSS, cette fonction sera automatiquement activ&#233;e gr&#226;ce &#224; un r&#233;glage dans la page de configuration de SPIP.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Nouveaux mode d'inclusions, notamment en AJAX&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; interpr&#232;te l'argument &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{env}&lt;/code&gt; comme la transmission de tout l'environnement
au squelette inclus. Cette notation fonctionne aussi avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE ...&gt;&lt;/code&gt;. Si d'autres arguments sont pr&#233;sents, les valeurs qu'ils indiquent pour leurs variables seront prioritaires sur l'environnement inclus :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;INCLURE{fond=gribouille/rubrique}{env}{lang=en}&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;incluera gribouille/rubrique en lui passant les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{id_rubrique}&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{debut_pages}&lt;/code&gt; du contexte incluant (de l'URL, autrement dit), mais en for&#231;ant la langue anglaise m&#234;me si l'URL comporte &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?lang=&lt;/code&gt;&lt;i&gt;XX&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;L'argument &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{ajax}&lt;/code&gt; ajout&#233; a une balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; ou a &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE ...&gt;&lt;/code&gt; permet d'ajaxer automatiquement tous les liens de classe ajax et tous les liens contenus dans une classe pagination. Pour plus de d&#233;tail, se reporter &#224; &lt;a href='https://www.spip.net/fr_article3753.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;`&lt;i&gt;ajax&lt;/i&gt;` pour les `inclure`&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Signalons que la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;INCLURE&lt;/code&gt; admet un &lt;i&gt;slash&lt;/i&gt; final optionnel, afin de se rapprocher de la syntaxe XML.&lt;/p&gt;
&lt;p&gt;Autre cas d'inclusion, les balises dites dynamiques, dont le nom commence par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_&lt;/code&gt; car elles produisent des formulaires.
Ces formulaires de l'espace public, et m&#234;me d'une partie de l'espace priv&#233;, ont &#233;t&#233; r&#233;&#233;crits &#224; l'aide d'un nouvelle m&#233;thode, CVT (charger, v&#233;rifier, traiter). Elle permet de cr&#233;er de nouveaux formulaires en &#233;crivant seulement des squelettes, SPIP se chargeant de rep&#233;rer les formulaires mal remplis, et sinon d'ins&#233;rer des enregistrements dans la base de donn&#233;es.&lt;/p&gt;
&lt;p&gt;Ainsi,
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/contenu/&lt;/code&gt; contient les squelettes de rendu des objets &#233;ditoriaux, et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/editer/&lt;/code&gt; les squelette d'&#233;dition correspondants, qui font appels &#224; la s&#233;rie des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_EDITER_...&lt;/code&gt; situ&#233;s dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/formulaires&lt;/code&gt;.
Il devient possible de personnaliser ces pages en fonction des numeros de rubrique avec un suffixe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;-xx.html&lt;/code&gt; comme pour tout autre squelette.&lt;/p&gt;
&lt;p&gt;Ces nouvelles possibilit&#233;s sont d&#233;taill&#233;es dans &lt;a href='https://www.spip.net/fr_article3796.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Formulaires CVT par l'exemple&lt;/a&gt; et &lt;a href='https://www.spip.net/fr_article3800.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Les formulaires CVT de SPIP&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Nouveaut&#233;s dans les balises&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#8212; Les balises commen&#231;ant par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;URL_&lt;/code&gt; sont trait&#233;es g&#233;n&#233;riquement, ce qui g&#233;n&#233;ralise celles disponibles auparavant.
Si la balise n'a pas d'argument, comme dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;URL_&lt;/code&gt;&lt;i&gt;type&lt;/i&gt;, le compilateur de SPIP produit un appel &#224; la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_entite&lt;/code&gt; appliqu&#233; sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$id_&lt;/code&gt;&lt;i&gt;type&lt;/i&gt; (qui doit &#234;tre d&#233;fini dans le contexte), et sur &lt;i&gt;type&lt;/i&gt;. On retrouve ainsi les habituels &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;URL_ARTICLE&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;URL_RUBRIQUE&lt;/code&gt; etc, fond&#233;s sur les fonctions &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_article&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_rubrique&lt;/code&gt; etc qui sont &#224; pr&#233;sent obsol&#232;tes car manquant de g&#233;n&#233;ralit&#233;.
Si la balise a un argument, c'est sur lui et non sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$id_&lt;/code&gt;&lt;i&gt;type&lt;/i&gt; que sera appliqu&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_entite&lt;/code&gt;. Toute cette famille de balises tient compte d'un &#233;ventuel acc&#232;s &#224; plusieurs bases SPIP (voir ci-dessus).
Cette fonctionnalit&#233; de navigation &#224; distance permet en particulier de tester un nouveau jeu de squelettes sur un site en production sans modifier son installation.&lt;/p&gt;
&lt;p&gt;&#8212; La balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#EXPOSE&lt;/code&gt; (voir &lt;a href='https://www.spip.net/fr_article2319.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;Exposer un article dans une liste&lt;/a&gt;) &#233;tend son mode d'application. Elle prend la cl&#233; primaire de la boucle imm&#233;diatement englobante (ou de celle explicitement d&#233;sign&#233;e si l'on emploie la syntaxe #&lt;i&gt;nom&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:EXPOSE&lt;/code&gt; &#224; pr&#233;sent autoris&#233;e ici) et compare sa valeur courante &#224; chaque it&#233;ration avec la valeur du param&#232;tre homonyme dans l'URL d'appel. Elle affiche alors son premier argument si ces deux valeurs sont &#233;gales, le deuxi&#232;me argument sinon. Cette comparaison s'&#233;tend &#224; la hi&#233;rarchie de la cl&#233; consid&#233;r&#233;e, c'est-&#224;-dire que dans une boucle RUBRIQUES on comparera la cl&#233; primaire de cette boucle avec le num&#233;ro de rubrique de l'article consid&#233;r&#233;, et dans une boucle GROUPES_MOTS, on comparera sa cl&#233; primaire avec le num&#233;ro du mot consid&#233;r&#233;.&lt;/p&gt;
&lt;p&gt;&#8212; Une nouvelle balise, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FILTRE&lt;/code&gt; ins&#233;r&#233;e dans un squelette permet d'appliquer un filtre &#224; l'int&#233;gralit&#233; de la page g&#233;n&#233;r&#233;e. Ainsi, en ins&#233;rant le code suivant dans un squelette :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#FILTRE{compacte_head} &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;l'int&#233;gralit&#233; de la page g&#233;n&#233;r&#233;e par ce squelette sera pass&#233;e au filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;compacte_head&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&#8212; Pour modifier les points de suite de la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INTRODUCTION&lt;/code&gt;, on peut d&#233;sormais
faire simplement, dans mes_fonctions.php (ou mes_options) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;define('_INTRODUCTION_SUITE', ' (...)'); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;define('_INTRODUCTION_SUITE', ''); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Appel&#233; implicitement par cette balise, le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couper&lt;/code&gt; peut &#234;tre appel&#233; ind&#233;pendamment et accepte un param&#232;tre suppl&#233;mentaire qui
indique quelle cha&#238;ne de caract&#232;res sera ins&#233;r&#233;e &#224; la fin du texte coup&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TITRE|couper{10,'...'})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Une nouvelle balise, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SESSION&lt;/code&gt;, permet d'acc&#233;der aux informations li&#233;es &#224; l'internaute identifi&#233; (id_auteur, et autres informations li&#233;es) et de diff&#233;rencier automatiquement le cache en fonction du visiteur.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Nouveaut&#233;s dans les crit&#232;res&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il est d&#233;sormais possible de provoquer une jointure entre deux tables SQL en &#233;crivant directement la notation TABLE.NOM dans un crit&#232;re. La jointure sera possible si la table indiqu&#233;e a un champ homonyme d'un champ de la table principale de la boucle, la cl&#233; primaire &#233;tant prioritaire. En cas de crit&#232;re sans op&#233;rateur explicite &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;TABLE.NOM&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt; , la valeur implicite prise est la valeur de NOM dans le contexte courant (en particulier, au premier niveau, dans l'URL). Voici par exemple une boucle qui cherche les signatures des p&#233;titions associ&#233;es aux traductions d'un m&#234;me article :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_signatures(SIGNATURES){articles.id_trad} /&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La table SQL &lt;i&gt;signatures&lt;/i&gt; ayant en commun avec la table &lt;i&gt;articles&lt;/i&gt; le champ &lt;i&gt;id_article&lt;/i&gt;, donner la valeur du champ &lt;i&gt;id_trad&lt;/i&gt; dans l'URL va provoquer la s&#233;lection dans la table &lt;i&gt;signatures&lt;/i&gt; de toutes celles associ&#233;es &#224; un article ayant cette valeur de &lt;i&gt;id_trad&lt;/i&gt; dans la table &lt;i&gt;articles&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Cette fonctionnalit&#233; est disponible &#233;galement avec des &lt;i&gt;crit&#232;res conditionnels&lt;/i&gt;. Voici par exemple une boucle qui liste les signatures soit d'une p&#233;tition d'un article donn&#233; (&lt;i&gt;id_article&lt;/i&gt; pr&#233;sent dans le contexte), soit des p&#233;titions associ&#233;es aux traductions d'un m&#234;me article (si c'est &lt;i&gt;id_trad&lt;/i&gt; qui est pr&#233;sent) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_signatures(SIGNATURES){id_article?} {articles.id_trad ?} /&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette nouvelle fonctionnalit&#233; rend obsol&#232;tes certains crit&#232;res (comme&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;titre_mot&lt;/code&gt; par exemple), mais ils sont conserv&#233;s par souci de compatibilit&#233;.&lt;/p&gt;
&lt;p&gt;Un autre changement important dans les crit&#232;res concerne la recherche.
Auparavant SPIP se servait d'une table SQL suppl&#233;mentaire pour effectuer l'indexation des &#233;l&#233;ments du site &#224; leur cr&#233;ation. Les op&#233;rateurs de recherche des serveurs SQL actuels sont suffisamment rapides pour se dispenser de ce pr&#233;-traitement co&#251;teux en place, et le crit&#232;re &lt;i&gt;recherche&lt;/i&gt; se fonde donc &#224; pr&#233;sent sur eux. Il admet de plus &#224; pr&#233;sent un argument optionnel indiquant la cha&#238;ne &#224; rechercher. En son absence, c'est toujours la variable d'URL &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;recherche&lt;/code&gt; qui est utilis&#233;e ; il y a donc &#233;quivalence entre
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_t(ARTICLES){recherche}&gt;&lt;/code&gt; et
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_t(ARTICLES){recherche #ENV{recherche}}&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L'int&#233;r&#234;t de cette extension est multiple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; chercher une cha&#238;ne donn&#233;e par le contexte interne au squelette comme dans
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_m(MOTS){id_mot}&gt; &lt;BOUCLE_r(ARTICLES){recherche #TITRE}&gt; ... &lt;/BOUCLE_r&gt; &lt;/BOUCLE_m&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; transmettre la cha&#238;ne &#224; chercher &#224; un squelette inclus, comme dans
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=x}{recherche=NNN}&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; utilisation dans un mod&#232;le pour s&#233;lectionner des objets dont les champs contiennent la cha&#238;ne comme dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele1|recherche=spip&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans le cas d'une utilisation conditionnelle de ce crit&#232;re, on veillera &#224; &#233;viter des espaces entre le point d'interrogation et la valeur indiqu&#233;e :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{recherche ?#ENV{rech}}&lt;/code&gt;
et non
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{recherche ? #ENV{rech}}&lt;/code&gt;
sauf si on veut effectivement une espace avant la cha&#238;ne recherch&#233;e.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Avec Salvatore, my plugin spricht &#1088;&#1072;&#1079;&#1085;&#1099;&#1093; spr&#229;k&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Salvatore est laid, rustre, bossu, un peu fou, et il parle toutes les langues (&lt;a href=&#034;http://fr.wikipedia.org/wiki/Le_Nom_de_la_rose&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;mais si, voyons !&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Salvatore est notre nouvel outil qui permet de d&#233;velopper un plugin multilingue, en synchronisant automatiquement son fichier de langue sur SPIP-Zone avec l'espace de traduction (qui r&#233;unit tous les traducteurs de SPIP). Consulter et participer &#224; &lt;a href=&#034;http://contrib.spip.net/Salvatore-pour-plugins&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;sa documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Validation XML&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href='https://www.spip.net/article3541.html'&gt;article 3541&lt;/a&gt; s'enrichit d'une nouvelle fonctionnalit&#233; : si son argument est un r&#233;pertoire, et non une URL, il s'applique sur tous les fichiers de ce r&#233;pertoire dont l'extension est &#233;gale &#224; la valeur du param&#232;tre d'URL &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ext&lt;/code&gt;. En son absence, l'extension .php est prise, et si aucun fichier .php n'existe, il consid&#233;rera tous les fichiers .html, vus comme des squelettes. Les arguments attendus par ces squelettes sont g&#233;n&#233;r&#233;s automatiquement, apr&#232;s analyse de leur contenu. Une telle analyse n'est pas possible pour les scripts, PHP &#233;tant typ&#233; dynamiquement, mais l'architecture g&#233;n&#233;rale de SPIP, notamment l'absence d'utilisation de l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exit&lt;/code&gt;, permet au validateur un test en aveugle d&#233;j&#224; tr&#232;s informatif.&lt;/p&gt;
&lt;p&gt;L'influence de XML sur SPIP se fait aussi sentir dans une petite innovation syntaxique. Les boucles sans corps disposent &#224; pr&#233;sent d'une notation abr&#233;g&#233;e, inspir&#233;e de la notation XML.&lt;/p&gt;
&lt;p&gt;Par exemple, la boucle suivante :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_message(FORUMS){id_article}&gt; &lt;/BOUCLE_message&gt; #TOTAL_BOUCLE messages &lt;/B_message&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;peut d&#233;sormais s'&#233;crire :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_message(FORUMS){id_article} /&gt; #TOTAL_BOUCLE messages &lt;//B_message&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;SPIP-et-le-developpement-Web&#034;&gt;&lt;h2 class=&#034;h2&#034; id='SPIP-et-le-developpement-Web'&gt;SPIP et le d&#233;veloppement Web&lt;a class='sommaire-back sommaire-back-4' href='#s-SPIP-et-le-developpement-Web' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cette section d&#233;crit les outils de d&#233;veloppements utilis&#233;s par l'&#233;quipe SPIP, outils que les d&#233;veloppeurs tiers doivent ma&#238;triser pour fournir des extensions portables.&lt;/p&gt;
&lt;p&gt;De nombreux sites Web, par l'interaction qu'ils proposent aux visiteurs, sont en eux-m&#234;mes des applications en ligne. De nombreux d&#233;veloppements de la branche 2 sont d&#233;sormais destin&#233;s &#224; aborder la cr&#233;ation de sites Web 2.0 : gestion de sessions d'utilisateurs, collaborations sur le site public, meilleure gestion des &#233;v&#233;nements dat&#233;s...&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Le serveur SQL virtuel&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La nouvelle version de SPIP a n&#233;cessit&#233; un long travail de r&#233;&#233;criture des requ&#234;tes SQL afin de le rendre portable.
Ces portages reposent sur une interface de programmation qu'il suffit
d'utiliser pour qu'une extension de SPIP soit elle-m&#234;me portable.
Elle fournit &#233;galement une gestion des probl&#232;mes de s&#233;curit&#233; de type &lt;i&gt;attaque par injection de code&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Cette interface ne repose pas sur des biblioth&#232;ques pr&#233;-existantes, car
leur niveau d'abstraction est insuffisant pour r&#233;soudre tous les probl&#232;mes pos&#233;s,
mais sur un jeu d'une trentaine de fonctions virtuelles d&#233;duites par abstraction du code ant&#233;rieur de SPIP. Sa g&#233;n&#233;ralit&#233; lui permet m&#234;me de servir &#224; l'int&#233;gration de bases SQL h&#233;t&#233;rog&#232;nes, ind&#233;pendamment des autres services rendus par SPIP.&lt;/p&gt;
&lt;p&gt;L'interface inclut un gestionnaire de ses propres versions, qui permettra d'ex&#233;cuter simultan&#233;ment des extensions de SPIP utilisant diff&#233;rentes versions de cette interface au cas o&#249; celle-ci devrait &#233;voluer.&lt;/p&gt;
&lt;p&gt;Cette r&#233;&#233;criture compl&#232;te profite &#233;galement &#224; MySQL puisque les constructions SQL les plus co&#251;teuses ont &#233;t&#233; &#233;limin&#233;es. Ainsi, la coh&#233;rence de la base est assur&#233;e incr&#233;mentalement et non plus par un balayage complet p&#233;riodiquement. Le verrouillage global du serveur a &#233;t&#233; syst&#233;matiquement remplac&#233; par des contraintes SQL refusant automatiquement une &#233;criture concurrente &#224; celle en cours.&lt;/p&gt;
&lt;p&gt;Certains index ont &#233;t&#233; red&#233;finis pour am&#233;liorer leur efficacit&#233;.
Enfin, le compilateur analyse plus finement la n&#233;cessit&#233; des jointures,
le code SQL produit &#233;tant plus souvent proche de l'optimalit&#233; sur ce point.&lt;/p&gt;
&lt;p&gt;Ces am&#233;liorations sont visibles notamment &#224; l'aide d'un &lt;i&gt;profileur&lt;/i&gt; SQL
disponible &#224; pr&#233;sent dans le d&#233;busqueur de SPIP.&lt;/p&gt;
&lt;p&gt;La proc&#233;dure de mise &#224; jour a &#233;t&#233; elle aussi r&#233;&#233;crite et totalement repens&#233;e. Elle g&#232;re &#224; pr&#233;sent sans faillir des bases dont le volume important exigeait auparavant des outils sp&#233;cifiques du serveur SQL.&lt;/p&gt;
&lt;p&gt;Ce nouvel aspect de SPIP est d&#233;crit dans un article sp&#233;cifique :
&lt;a href='https://www.spip.net/fr_article3683.html' class=&#034;spip_in&#034; hreflang=&#034;fr&#034;&gt;L'interface de SPIP avec SQL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;De nouveaux pipelines, appel&#233;s beaucoup plus largement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le nombre de pipeline s'enrichit a pr&#232;s de 50, ainsi que leur nombre d'appels avec plus de 180 points d'entr&#233;e.&lt;/p&gt;
&lt;p&gt;En particulier&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les pipelines &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pre_edition&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;post_edition&lt;/code&gt; sont appel&#233;s syst&#233;matiquement avant et apr&#232;s enregistrement en base de donn&#233;e d'un objet &#233;ditorial, que ce soit lors de la cr&#233;ation, lors de la modification, ou lors de du changement de statut ;&lt;/li&gt;&lt;li&gt; le pipeline &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;recuperer_fond&lt;/code&gt; permet d'agir sur le r&#233;sultat de tout squelette inclus au moment de son &#233;valuation ;&lt;/li&gt;&lt;li&gt; les pipeline &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pre_boucle&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;post_boucle&lt;/code&gt; permettent de modifier le comportement d'une boucle sans surcharge.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cette extension des pipeline permet aux plugins d'agir encore plus sur le comportement de SPIP avec toujours moins de risque d'incompatibilit&#233; entre eux.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Biblioth&#232;ques externes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SPIP fait comme phpMyAdmin pour se
connecter &#224; mysql : si l'extension n'a pas &#233;t&#233; charg&#233;e, il utilise un
chargement dynamique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dl('mysql.so')&lt;/code&gt;, apr&#232;s avoir soigneusement v&#233;rifi&#233; qu'il y &#233;tait autoris&#233;. Ca permet d'installer sur des serveurs configur&#233;s de cette mani&#232;re-l&#224; (ubuntu par exemple).&lt;/p&gt;
&lt;p&gt;Une fonction SPIP permet de demander un chargement dynamique : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_php_extension('mysql')&lt;/code&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;A-vous-de-jouer&#034;&gt;&lt;h2 class=&#034;h2&#034; id='A-vous-de-jouer'&gt;&#192; vous de jouer !&lt;a class='sommaire-back sommaire-back-4' href='#s-A-vous-de-jouer' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ces &#233;volutions de SPIP permettent d&#233;sormais de d&#233;velopper, outre des sites internet usuels, des applications type intranet et toutes sortes d'applications en ligne, m&#234;lant sessions d'utilisateurs, AJAX, pages personnalis&#233;es ou interfaces interactives &#233;volu&#233;es.&lt;/p&gt;&lt;/section&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;Concevoir et maintenir la structure &#233;ditoriale d'un site enrichi r&#233;guli&#232;rement n'a rien d'une &#233;vidence ; cela demande une exp&#233;rience certaine. Une structure &#233;ditoriale mal con&#231;ue finit par disqualifier un site, car les mises &#224; jour deviennent de plus en plus p&#233;nibles. La logique de publication de SPIP a tendance &#224; induire des structures &#233;ditoriales telles que le site restera bien organis&#233;, m&#234;me avec des dizaines de milliers d'articles.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb4-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;AJAX : ensemble de fonctions Javascript permettant de manipuler la structure de la page HTML, de charger des &#233;l&#233;ments de page individuellement les uns des autres et de cr&#233;er facilement des animations visuelles dans les pages HTML.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://www.spip.net/IMG/txt/gpl-3.0.fr.txt" length="47741" type="text/plain" />
		

	</item>
<item xml:lang="fr">
		<title>&#201;tendre SPIP</title>
		<link>https://www.spip.net/fr_article3497.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3497.html</guid>
		<dc:date>2007-05-20T10:16:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>



		<description>
&lt;p&gt;Si vous voulez &#233;tendre SPIP et en particulier y contribuer, les points importants &#224; retenir sont les suivants : c'est un outil d&#233;j&#224; utilis&#233; par des milliers de personnes, qui a un pass&#233; et un avenir, et qui est un travail collectif. &lt;br class='autobr' /&gt;
&#201;tant donn&#233; la longue histoire de SPIP et la multiplicit&#233; des contributeurs et contributrices, on peut rencontrer des styles de programmation vari&#233;s dans le code. Certaines r&#232;gles assurent n&#233;anmoins la coh&#233;rence de l'ensemble. Organisation des sources &lt;br class='autobr' /&gt;
Il (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique808.html" rel="directory"&gt;Introduction&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Si vous voulez &#233;tendre SPIP et en particulier y contribuer, les points importants &#224; retenir sont les suivants : &lt;i&gt;c'est un outil d&#233;j&#224; utilis&#233; par des milliers de personnes, qui a un pass&#233; et un avenir, et qui est un travail collectif&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;&#201;tant donn&#233; la longue histoire de SPIP et la multiplicit&#233; des contributeurs et contributrices, on peut rencontrer des styles de programmation vari&#233;s dans le code. Certaines r&#232;gles assurent n&#233;anmoins la coh&#233;rence de l'ensemble.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav69fae928af8a27.06171972&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Organisation-des-sources&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Organisation-des-sources&#034; class=&#034;spip_ancre&#034;&gt;Organisation des sources&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Regles-de-programmation&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Regles-de-programmation&#034; class=&#034;spip_ancre&#034;&gt;R&#232;gles de programmation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Regles-de-codage&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Regles-de-codage&#034; class=&#034;spip_ancre&#034;&gt;R&#232;gles de codage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Organisation-des-sources&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Organisation-des-sources'&gt;Organisation des sources&lt;a class='sommaire-back sommaire-back-4' href='#s-Organisation-des-sources' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il est possible de modifier le comportement de SPIP sans alt&#233;rer ses sources, gr&#226;ce au &lt;i&gt;chemin d'acc&#232;s&lt;/i&gt; d&#233;fini par la constante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SPIP_PATH&lt;/code&gt;. Toute extension de SPIP doit op&#233;rer ainsi afin qu'un test d'int&#233;gration soit d&#233;brayable par simple red&#233;finition du chemin d'acc&#232;s, la distribution de SPIP &#233;tant en lecture seule.&lt;/p&gt;
&lt;p&gt;Si vous &#234;tes convaincu qu'un certain comportement ne peut &#234;tre obtenu ainsi, &#233;crire sur &lt;a href=&#034;https://discuter.spip.net/c/spip-dev/5&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;l'espace de discussion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les contributions &#224; SPIP sont &#224; d&#233;crire par un article sur &lt;a href=&#034;https://contrib.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Spip-Contrib&lt;/a&gt; et leur contenu est &#224; d&#233;poser soit en tant que pi&#232;ces jointes &#224; cet article, soit, ce qui est mieux, sur &lt;a href=&#034;https://git.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le serveur git communautaire&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour &#233;tendre SPIP ainsi, il faut bien comprendre l'organisation de ces r&#233;pertoires et le r&#244;le de ses fichiers. La racine d'une distribution de SPIP comporte essentiellement :&lt;/p&gt;
&lt;p&gt;- un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip.php&lt;/code&gt;, alias &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;index.php&lt;/code&gt;, g&#233;rant la compatibilit&#233; avec les anciennes versions, chargeant le fichier d'initialisation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/inc_version.php&lt;/code&gt; et passant imm&#233;diatement la main au script principal &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/public.php&lt;/code&gt; ;&lt;/p&gt;
&lt;p&gt;- un r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire&lt;/code&gt; comportant exclusivement des fichiers interpr&#233;tables c&#244;t&#233; serveur (PHP et SQL) ;&lt;/p&gt;
&lt;p&gt;- un ou plusieurs (selon les versions) r&#233;pertoires comportant des fichiers interpr&#233;tables c&#244;t&#233; client (HTML, Javascript, feuilles de style, images de diff&#233;rents formats) ainsi que les patrons de mise en page nomm&#233;s &lt;i&gt;squelettes&lt;/i&gt;. Ces squelettes sont interpr&#233;t&#233;s des deux c&#244;t&#233;s : il s'agit de fichiers compos&#233;s d'un format MIME compl&#233;t&#233; de quelques directives SPIP, directives trait&#233;es c&#244;t&#233; serveur afin d'envoyer au client un texte purement MIME (la plupart du temps du HTML, mais aussi du RSS, du SVG, du ICS etc).&lt;/p&gt;
&lt;p&gt;- deux r&#233;pertoires vides &#224; l'installation (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;local&lt;/code&gt;et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp&lt;/code&gt;), qui contiendront les donn&#233;es, temporaires ou permanentes, n&#233;cessaires &#224; la vie du site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#244;les des r&#233;pertoire&lt;/strong&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist&lt;/code&gt; &lt;strong&gt;et leurs sous-r&#233;pertoires&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ils contiennent les fichiers d&#233;terminant la pr&#233;sentation de SPIP, pour l'espace priv&#233; et l'espace public respectivement. Ils contiennent beaucoup de sous-r&#233;pertoires dont voici les significations :&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id2135_c0'&gt;r&#233;pertoire&lt;/th&gt;&lt;th id='id2135_c1'&gt;r&#244;le&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;contient les squelettes. Leur nom se termine par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.html&lt;/code&gt; pour des raisons historiques mais cela ne pr&#233;juge pas de leur contenu. Il sufit de donner un tel nom, priv&#233; de cette extension, au param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt; de l'URL d'un site sous SPIP pour d&#233;clencher l'utilisation de ce squelette.&lt;br class='autobr' /&gt;
Ce r&#233;pertoire contient &#233;galement les feuilles de styles (d'extension &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.css&lt;/code&gt;) d&#233;finissant l'habillage par d&#233;faut&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;contient la partie html des &lt;i&gt;balises dynamiques&lt;/i&gt;, squelettes de formulaires dont le code PHP figure dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/balise&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;images/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;images de l'espace priv&#233;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;javascript/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;librairies javascript (jQuery, barre typographique, ...)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;squelettes appelables avec la balise #MODELE ou avec les raccourics &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article6|modele&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;polices/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;polices utilisables pour les &lt;a href='https://www.spip.net/fr_article3325.html' class=&#034;spip_in&#034;&gt;images typographiques&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id2135_c0'&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;vignettes/&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id2135_c1'&gt;vignettes standards pour les types de documents pouvant &#234;tre associ&#233;s &#224; un article&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;R&#244;les du r&#233;pertoire&lt;/strong&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire&lt;/code&gt; &lt;strong&gt;et ses sous-r&#233;pertoires&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire&lt;/code&gt; comporte plusieurs sous-r&#233;pertoires compos&#233;s de fichiers PHP d&#233;finissant des fonctions et proc&#233;dant &#233;ventuellement, mais rarement, &#224; une initialisation lors de leur chargement (ces exceptions sont appel&#233;es &#224; dispara&#238;tre). Les fichiers situ&#233;s au niveau du r&#233;pertoire principal sont les plus importants &#224; comprendre pour contribuer &#224; SPIP, il s'agit de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc_version.php&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;public.php&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;index.php&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/inc_version.php&lt;/code&gt; initialise les constantes et les variables globales n&#233;cessaires au fonctionnement de SPIP, notamment celles assurant sa portabilit&#233; sur les diff&#233;rentes plates-formes. Assez t&#244;t lors de son chargement, il inclut le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc/utils.php&lt;/code&gt;, o&#249; figurent les fonctions indispensables &#224; SPIP, un fichier hors distribution nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_options.php&lt;/code&gt; permettant de moduler cette initialisation sans avoir &#224; modifier le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc_version.php&lt;/code&gt;. En particulier, il est possible dans ce fichier personnel d'invoquer la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_initialisation&lt;/code&gt; pour d&#233;finir les r&#233;pertoires de donn&#233;es et disposer ainsi de plusieurs sites sous SPIP utilisant une seule distribution (l'appel standard de cette fonction, plus loin dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc_version.php&lt;/code&gt;, sera automatiquement neutralis&#233;). Une autre fonction indispensable &#224; SPIP est &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;find_in_path&lt;/code&gt;, exploitant le &lt;i&gt;chemin d'acc&#232;s&lt;/i&gt;, ainsi que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;include_spip&lt;/code&gt; qui repose sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;find_in_path&lt;/code&gt;, et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_fonction&lt;/code&gt; qui repose sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;include_spip&lt;/code&gt;. Tous les fichiers de SPIP sont charg&#233;s par ces deux derni&#232;res fonctions.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/public.php&lt;/code&gt;, appel&#233; par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip.php&lt;/code&gt;, a pour r&#244;le essentiel de d&#233;livrer les pages de l'espace public, command&#233;es lorsque la requ&#234;te HTTP comporte (apr&#232;s r&#233;&#233;criture &#233;ventuelle) le param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt;. Ce script applique alors le squelette ayant pour nom la valeur de ce param&#232;tre. Il envoie les en-t&#234;tes HTTP et le contenu obtenus, g&#232;re leurs &#233;ventuelles erreurs et lance les t&#226;ches de fond &#224; l'aide de la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cron&lt;/code&gt;. Contribuer &#224; l'espace public de SPIP consiste donc simplement &#224; fournir de nouveaux squelettes, avec &#233;ventuellement leurs feuilles de style et leurs images.&lt;/p&gt;
&lt;p&gt;L'autre r&#244;le de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/public.php&lt;/code&gt; concerne le cas o&#249; la requ&#234;te HTTP comporte l'argument &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action&lt;/code&gt;. Il applique alors la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_fonction&lt;/code&gt; &#224; la valeur &lt;i&gt;v&lt;/i&gt; de ce param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action&lt;/code&gt;. Cette application a pour effet de charger le fichier homonyme du r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action&lt;/code&gt;, dont la fonction principale &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action_&lt;/code&gt;&lt;i&gt;v&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_dist&lt;/code&gt; est alors invoqu&#233;e. Ces scripts effectuent essentiellement des &#233;critures (en base ou sur fichier) et ne retournent en g&#233;n&#233;ral pas de r&#233;sultat, &#233;chappant ainsi &#224; la probl&#233;matique de la mise en page.&lt;/p&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;index.php&lt;/code&gt; est le fichier central d'acc&#232;s aux formulaires de l'espace priv&#233;. Il authentifie l'internaute, initialise ses donn&#233;es personnelles et applique la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_fonction&lt;/code&gt; &#224; la valeur &lt;i&gt;v&lt;/i&gt; du param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt;. Cette application a pour effet de charger le fichier homonyme du r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt;, dont la fonction principale &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec_&lt;/code&gt;&lt;i&gt;v&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_dist&lt;/code&gt; est alors invoqu&#233;e. Celle-ci a la charge de d&#233;livrer l'int&#233;gralit&#233; du flux de sortie, y compris les en-t&#234;tes HTTP. Il est donc possible d'&#233;tendre Spip simplement en rajoutant un fichier PHP dans un sous r&#233;pertoire nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt; d'un r&#233;pertoire figurant dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SPIP_PATH&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt; contient exclusivement les fichiers d&#233;finissant les fonctions directement invocables par le param&#232;tre d'URL &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt;. Le code PHP de ces fichiers ne doit jamais acc&#233;der en &#233;criture &#224; la base de donn&#233;es (les exceptions &#224; cette r&#232;gle sont en voie de disparition). A l'inverse, il y acc&#232;de abondamment en lecture afin de v&#233;rifier les droits du demandeur et d&#233;terminer les donn&#233;es &#224; visualiser. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;Mod&#232;le-Vue-Controleur&lt;/i&gt;, les fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt; remplissent le r&#244;le de &lt;i&gt;Controleur&lt;/i&gt;. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;(Print(Eval(Read)))&lt;/i&gt; de Lisp, c'est la partie &lt;i&gt;Read&lt;/i&gt;. &#192; terme, ce r&#233;pertoire devrait devenir un r&#233;pertoire de squelettes. Il est demand&#233; aux nouvelles contributions de Spip de penser &#224; cet objectif lors de leur r&#233;dactions.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action&lt;/code&gt;, dont il a d&#233;j&#224; &#233;t&#233; question, contient essentiellement les scripts acc&#233;dant en &#233;criture &#224; la base de donn&#233;es. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;Mod&#232;le-Vue-Controleur&lt;/i&gt;, les fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;action&lt;/code&gt; remplissent le r&#244;le de &lt;i&gt;Mod&#232;le&lt;/i&gt;. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;(Print(Eval(Read)))&lt;/i&gt; de Lisp, c'est la partie &lt;i&gt;Eval&lt;/i&gt;. L&#224; encore, contribuer &#224; SPIP consiste &#224; &#233;crire de tels scripts et &#224; les invoquer par des formulaires construits avec la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_action_auteur&lt;/code&gt; assurant la s&#233;curisation de l'acc&#232;s &#224; ces scripts, qui &#224; l'inverse invoqueront la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;securiser_action&lt;/code&gt; pour v&#233;rifier les droits du demandeur. Cette architecture permet de calculer ces droits seulement &#224; la construction des formulaires appelant les scripts d'acc&#232;s en &#233;criture : plutot que de recalculer tous les droits, ces scripts v&#233;rifieront simplement que la cl&#233; figurant dans les arguments est la m&#234;me que celle qu'ils recalculent &#224; partir des autres arguments, de l'identit&#233; du demandeur et d'une valeur al&#233;atoire renouvell&#233;e p&#233;riodiquement. Ces scripts ne retournent en g&#233;n&#233;ral pas de r&#233;sultat, il n'y a donc l&#224; aussi ni code HTML, ni appel &#224; la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo&lt;/code&gt; (les exceptions sont appel&#233;es &#224; dispara&#238;tre). En revanche, ils sont souvent appel&#233;s avec un param&#232;tre HTTP nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;redirect&lt;/code&gt;, demandant une redirection qui sera alors automatiquement op&#233;r&#233;e par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;public.php&lt;/code&gt;, qui envoie un statut HTTP 204 en l'absence de ce param&#232;tre. Dans le cas des formulaires construits avec la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajax_action_auteur&lt;/code&gt;, cette redirection conduit au script homonyme dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt;. Ce deuxi&#232;me script se r&#233;duit le plus souvent &#224; charger le fichier homonyme dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc&lt;/code&gt;, d'appeler sa fonction principale dont le r&#233;sultat est retourn&#233; au client par l'interm&#233;diaire de la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajax_retour&lt;/code&gt;. Il est ainsi tr&#232;s facile d'&#233;tendre SPIP en mode AJAX en utilisant cette infrastructure.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc&lt;/code&gt;, le plus volumineux, contient essentiellement les fonctions construisant les pages de l'espace priv&#233; renvoy&#233;es au client, ces fonctions devant &#234;tre &#224; terme les filtres utilis&#233;s par les fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt; quand ils seront des squelettes. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;Mod&#232;le-Vue-Controleur&lt;/i&gt;, les fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc&lt;/code&gt; remplissent le r&#244;le de &lt;i&gt;Vue&lt;/i&gt;. Si l'on veut voir SPIP sous l'arch&#233;type &lt;i&gt;(Print(Eval(Read)))&lt;/i&gt; de Lisp, c'est la partie &lt;i&gt;Print&lt;/i&gt;. Toutefois ce r&#233;pertoire contient &#233;galement beaucoup de fonctions relevant plutot du &lt;i&gt;Controle&lt;/i&gt; et devra donc &#234;tre r&#233;organis&#233;. La plupart des fichiers de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc&lt;/code&gt; sont charg&#233;s par l'interm&#233;diaire de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_fonction&lt;/code&gt;, et ce sera le cas de tous &#224; terme. Aucune des fonctions de ce r&#233;pertoire n'est cens&#233;e utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo&lt;/code&gt;. Les contributions &#224; SPIP sont appel&#233;es &#224; respecter ces r&#232;gles d&#232;s &#224; pr&#233;sent.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;install&lt;/code&gt; contient exclusivement les fonctions n&#233;cessaires &#224; l'installation de SPIP. Chaque &#233;tape peut-&#234;tre surcharg&#233;e ou compl&#233;t&#233;e par d'autres, la fonction principale de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec/install.php&lt;/code&gt; utilisant ce r&#233;pertoire selon le m&#234;me principe que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/index.php&lt;/code&gt; avec le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;exec&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls&lt;/code&gt; contient des fichiers d&#233;finissant chacun le m&#234;me jeu de &lt;i&gt;fonctions de r&#233;&#233;criture d'URL&lt;/i&gt;. Il s'agit des fonctions calculant, &#224; partir d'un index num&#233;rique dans une table de la base de donn&#233;es, un signet plus facile &#224; lire et &#233;crire que l'appel du script PHP effectivement op&#233;r&#233; par le serveur HTTP pour cet index et cette table. L&#224; encore, il suffit de rajouter un fichier dans ce r&#233;pertoire pour obtenir un nouveau jeu, dont le nom sera pr&#233;sent&#233; dans le panneau de configuration de l'espace priv&#233; g&#233;rant les types d'&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lang&lt;/code&gt; contient exclusivement des fichiers de donn&#233;es, tableaux indiquant la traduction, pour toutes les langues connues de SPIP, de tous les arguments que la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_T&lt;/code&gt;, d&#233;finie dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc/utils.php&lt;/code&gt;, est susceptible de recevoir. Les fichiers sont charg&#233;s exclusivement par les fonctions de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc/lang.php&lt;/code&gt;. Traduire les fichiers de r&#233;f&#233;rence &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;*fr*&lt;/code&gt; en donnant un nom conventionnel aux fichiers obtenus suffit &#224; d&#233;clarer une nouvelle langue &#224; SPIP.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charset&lt;/code&gt; contient lui aussi exclusivement des fichiers de donn&#233;es, tableaux permettant de passer d'un codage de caract&#232;res &#224; un autre (utf, iso, ascii, entit&#233;s html etc). Ils sont lus exclusivement par les fonctions de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc/charsets.php&lt;/code&gt;. Il suffit l&#224; encore de rajouter un fichier pour disposer d'un nouveau codage, mais SPIP propose tous ceux couramment utilis&#233;s, aussi un telle intervention est rarissime.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;base&lt;/code&gt; contient les fonctions d'interfaces entre PHP et les serveurs SQL que SPIP peut appeler. En particulier, le fichier g&#233;n&#233;rique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;abstract_sql.php&lt;/code&gt; contient les fonctions qu'il faut utiliser pour dialoguer avec les serveurs SQL, les fonctions de base de PHP pour cela ne devant pas &#234;tre utilis&#233;es directement par souci de portabilit&#233;. Ne doit &#233;videmment figurer aucun code MIME dans ce r&#233;pertoire.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;req&lt;/code&gt; contient les portages effectifs du serveur SQL virtuel de SPIP vers les serveurs r&#233;els (MySQL, PG) et assimil&#233;s (SQLite).&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;balise&lt;/code&gt; contient les fichiers PHP associ&#233;s aux &lt;i&gt;balises dynamiques&lt;/i&gt; de SPIP. Leur nom est homonyme du squelette de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/formulaires&lt;/code&gt;. Compl&#233;ter l'espace public de SPIP par un formulaire &lt;i&gt;F&lt;/i&gt; consiste &#224; cr&#233;er un fichier &lt;i&gt;F&lt;/i&gt;.html dans son &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SPIP_PATH&lt;/code&gt; et un fichier &lt;i&gt;F&lt;/i&gt;.php dans un sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;balise&lt;/code&gt; de son &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SPIP_PATH&lt;/code&gt;. Le r&#244;le de ce fichier PHP est de r&#233;ceptionner les saisies demand&#233;es par ce formulaire, et &#233;ventuellement de r&#233;-afficher celui-ci pour compl&#233;ment en cas de saisies invalides. C'est sans doute le type de contribution &#224; l'espace public la plus difficile &#224; r&#233;aliser, car la m&#233;canique sous-jacente exige deux passes d'ex&#233;cution de PHP dont il faut bien comprendre les r&#244;les respectifs. Avant que ce m&#233;canisme n'existe, la strat&#233;gie de d&#233;veloppement de formulaire consistait &#224; &#233;crire des squelettes comportant des instructions PHP. Il est toujours possible de le faire, mais le r&#233;sultat sera peu efficace car jamais mis en cache ; et il ne dispense pas de comprendre les deux passes de PHP intrins&#232;ques au ph&#233;nom&#232;ne.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;public&lt;/code&gt; contient le compilateur des squelettes. C'est une partie du code assez compliqu&#233;e, mais qui b&#233;n&#233;ficie d'une interface de programmation qui rend ce compilateur totalement extensible sans exiger d'en comprendre tous les d&#233;tails.&lt;/p&gt;
&lt;p&gt;Le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lib&lt;/code&gt; est destin&#233; &#224; contenir des sous-r&#233;pertoires de biblioth&#232;ques d&#233;velopp&#233;es en dehors de SPIP mais dont il peut avoir besoin.&lt;/p&gt;
&lt;p&gt;Dernier point : la plupart des fichiers de SPIP sont utilis&#233;s via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_fonction&lt;/code&gt; qui charge un fichier et appelle sa fonction homonyme cens&#233;e y &#234;tre d&#233;finie. Il s'ensuit que le nom d'un fichier PHP doit &#234;tre compos&#233; exclusivement de caract&#232;res acceptables pour un nom de fonction PHP : on &#233;vitera donc le signe moins, le point etc.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Regles-de-programmation&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Regles-de-programmation'&gt;R&#232;gles de programmation&lt;a class='sommaire-back sommaire-back-4' href='#s-Regles-de-programmation' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP a d&#233;marr&#233; &#224; l'&#233;poque o&#249; PHP transformait automatiquement en variables globales les param&#232;tres HTTP. Ce style de programmation suicidaire a &#233;t&#233; abandonn&#233; par PHP4. SPIP a suivi une &#233;volution parall&#232;le, mais d&#233;cal&#233;e dans le temps. Bien que le code actuel ne suive donc pas toujours les r&#232;gles qui vont suivre, il est demand&#233; aux contributions &#224; venir de les respecter d&#232;s &#224; pr&#233;sent, sans attendre que SPIP cesse d'y d&#233;roger ici ou l&#224;. On pourra lire attentivement le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/articles.php&lt;/code&gt;, le plus proche des sp&#233;cifications qui suivent.&lt;/p&gt;
&lt;p&gt;- Privil&#233;gier l'&#233;criture par fonctions. La philosophie du logiciel libre est d'&#234;tre utilis&#233; dans un maximum de contextes diff&#233;rents, en cons&#233;quence le code doit &#234;tre &#233;crit dans une optique de r&#233;utilisation en dehors de son contexte initial de d&#233;veloppement. L'&#233;criture par fonctions ne r&#233;f&#233;ren&#231;ant aucune variable globale et n'effectuant aucun appel &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;print&lt;/code&gt; garantit un chargement silencieux et un appel sans effets secondaires ind&#233;sirables.&lt;/p&gt;
&lt;p&gt;- &#201;viter au maximum l'utilisation de variables globales. Elles sont responsables de nombreuses failles de s&#233;curit&#233; et d'impossibilit&#233;s de r&#233;utilisation du code. Les alternatives &#224; leur usage sont :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la constante, qui a l'avantage de signaler au lecteur que cette valeur ne changera pas pendant toute la dur&#233;e du script ;&lt;/li&gt;&lt;li&gt; la variable statique, qui a l'avantage de signaler au lecteur qu'il s'agit de valeur &#224; longue dur&#233;e de vie mais n'int&#233;ressant que la fonction qui la d&#233;clare.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;- &#201;crire du code ne produisant aucune erreur ni avertissement en mode &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;error_reporting(E_ALL)&lt;/code&gt;. Cela facilite la mise au point en cas de variable involontairement ind&#233;finie. Si l'on a vraiment besoin d'ex&#233;cuter du code en dehors de ce mode, utiliser l'artifice @ en le limitant au maximum &#224; la portion de code probl&#233;matique, et pr&#233;voir un message d'erreur dans le journal, en utilisant la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_log&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;- Commenter le &lt;i&gt;contexte&lt;/i&gt;, pas le texte. Il ne sert &#224; rien de paraphraser le nom de ses variables et fonctions, ni les fonctions PHP d&#233;crites dans son manuel : les commentaires comme &lt;i&gt;boucle sur le tableau de valeurs&lt;/i&gt; devant un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;foreach&lt;/code&gt; ne font que grossir inutilement les fichiers. En revanche, il est souhaitable d'indiquer le type des arguments (PHP &#233;tant un langage dynamiquement typ&#233;, il se devine difficilement) et leur propri&#233;t&#233; suppos&#233;e &#224; l'entr&#233;e de la fonction (par exemple : non nul). Quand un bug difficile est corrig&#233; ou anticip&#233;, dire pourquoi le code initial &#233;tait incorrect pour &#233;viter qu'une r&#233;&#233;criture ult&#233;rieure ne le r&#233;introduise en croyant optimiser. Enfin, SPIP &#233;tant d&#233;velopp&#233; en fran&#231;ais, &#233;viter les termes absents des dictionnaires de cette langue afin de faciliter la compr&#233;hension &#224; ceux dont ce n'est pas la langue maternelle.&lt;/p&gt;
&lt;p&gt;- Nommer rationnellement les fonctions et variables. L'organisation du code de SPIP est plut&#244;t fond&#233;e sur le d&#233;coupage en r&#233;pertoires d&#233;di&#233;s que sur des r&#232;gles de nommage strictes, mais on &#233;vitera n&#233;anmoins les incoh&#233;rences comme le multi-linguisme &#224; l'int&#233;rieur d'un nom. Les fonctions d'un m&#234;me fichier tenderont &#224; avoir un pr&#233;fixe ou un suffixe commun, inspir&#233; du nom du fichier.&lt;/p&gt;
&lt;p&gt;- Tester sur un maximum de configurations. N'oubliez pas que SPIP doit fonctionner sur toute plate-forme, tant c&#244;t&#233; client que c&#244;t&#233; serveur. Il y a n&#233;cessairement plusieurs navigateurs sur votre machine, tester votre code sur au moins deux d'entre eux. Dans la mesure du possible, essayez &#233;galement plusieurs h&#233;bergeurs. Lorsque une plate-forme force une &#233;criture &#233;trange, la mentionner explicitement, en pr&#233;cisant sa version et la date de l'essai.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;regles_codage&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Regles-de-codage&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Regles-de-codage'&gt;R&#232;gles de codage&lt;a class='sommaire-back sommaire-back-4' href='#s-Regles-de-codage' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Se r&#233;f&#233;rer &#224; la rubrique &lt;a href='https://www.spip.net/fr_rubrique783.html' class=&#034;spip_in&#034;&gt;Conventions&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-4' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sur &lt;strong&gt;programmer.spip.net&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la rubrique &lt;a href=&#034;https://programmer.spip.net/-Etendre-SPIP-&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#201;tendre SPIP&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Et le site sur la &lt;a href=&#034;https://code.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;documentation du code de SPIP&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 1.9.2</title>
		<link>https://www.spip.net/fr_article3567.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3567.html</guid>
		<dc:date>2007-02-22T20:44:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>direction_css</dc:subject>
		<dc:subject>#ARRAY</dc:subject>
		<dc:subject>#EDIT</dc:subject>
		<dc:subject>#TOTAL_UNIQUE</dc:subject>
		<dc:subject>concat</dc:subject>
		<dc:subject>compacte</dc:subject>
		<dc:subject>date_822</dc:subject>
		<dc:subject>url_absolue_css</dc:subject>
		<dc:subject>image_recadre</dc:subject>
		<dc:subject>#PIPELINE</dc:subject>
		<dc:subject>#URL_ACTION_AUTEUR</dc:subject>
		<dc:subject>fusion</dc:subject>

		<description>
&lt;p&gt;Les nouveaut&#233;s marquantes de cette version sont : des filtres d'images plus nombreux, et optimis&#233;s ; de nouvelles fonctionnalit&#233;s de sauvegarde et restauration ; un syst&#232;me de cache plus r&#233;actif ; l'introduction de la librairie javascript jQuery ; un nouveau sch&#233;ma d'organisation des r&#233;pertoires ; un validateur XML extensible ; une interface de programmation (API) pour la gestion des autorisations et des modifications ; des statistiques de fr&#233;quentation plus pr&#233;cises, attention, la brusque (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique785.html" rel="directory"&gt;Anciennes versions&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@direction_css" rel="tag"&gt;direction_css&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@array" rel="tag"&gt;#ARRAY&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@edit" rel="tag"&gt;#EDIT&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@total_unique" rel="tag"&gt;#TOTAL_UNIQUE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@concat" rel="tag"&gt;concat&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@compacte" rel="tag"&gt;compacte&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@date_822" rel="tag"&gt;date_822&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@url_absolue_css" rel="tag"&gt;url_absolue_css&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@image_recadre" rel="tag"&gt;image_recadre&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@pipeline" rel="tag"&gt;#PIPELINE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@url_action_auteur" rel="tag"&gt;#URL_ACTION_AUTEUR&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@fusion" rel="tag"&gt;fusion&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.spip.net/local/cache-vignettes/L128xH128/arton3567-a9139.png?1594835639' class='spip_logo spip_logo_right' width='128' height='128' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Les nouveaut&#233;s marquantes de cette version sont :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; des filtres d'images plus nombreux, et optimis&#233;s ;&lt;/li&gt;&lt;li&gt; de nouvelles fonctionnalit&#233;s de sauvegarde et restauration ;&lt;/li&gt;&lt;li&gt; un syst&#232;me de cache plus r&#233;actif ;&lt;/li&gt;&lt;li&gt; l'introduction de la librairie javascript &lt;a href=&#034;http://jquery.info/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;jQuery&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; un nouveau sch&#233;ma d'organisation des r&#233;pertoires ;&lt;/li&gt;&lt;li&gt; un &lt;a href='https://www.spip.net/article3541.html'&gt;validateur XML extensible&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; une interface de programmation (API) pour la gestion des autorisations et des modifications ;&lt;/li&gt;&lt;li&gt; des statistiques de fr&#233;quentation plus pr&#233;cises, attention, la brusque r&#233;duction des visites apr&#232;s l'upgrade est donc normale, un retour &#224; des chiffres plus objectifs a &#233;t&#233; pr&#233;f&#233;r&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;27 Janvier 2008 : voir &lt;a href=&#034;#v192d&#034; class=&#034;spip_ancre&#034;&gt;SPIP 1.9.2d&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-9&#034; id=&#034;nav69fae928b39303.27203944&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Espace-prive&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Espace-prive&#034; class=&#034;spip_ancre&#034;&gt;Espace priv&#233;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Espace-public&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Espace-public&#034; class=&#034;spip_ancre&#034;&gt;Espace public&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-correction-1-9-2a&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-correction-1-9-2a&#034; class=&#034;spip_ancre&#034;&gt;Version de correction 1.9.2a&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-correction-1-9-2b&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-correction-1-9-2b&#034; class=&#034;spip_ancre&#034;&gt;Version de correction 1.9.2b&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-correction-1-9-2c&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-correction-1-9-2c&#034; class=&#034;spip_ancre&#034;&gt;Version de correction 1.9.2c&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-correction-1-9-2d&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-correction-1-9-2d&#034; class=&#034;spip_ancre&#034;&gt;Version de correction 1.9.2d&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-Correction-1-9-2e&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-Correction-1-9-2e&#034; class=&#034;spip_ancre&#034;&gt;Version de Correction 1.9.2e&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-Correction-1-9-2f&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-Correction-1-9-2f&#034; class=&#034;spip_ancre&#034;&gt;Version de Correction 1.9.2f&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-de-Correction-1-9-2g&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-de-Correction-1-9-2g&#034; class=&#034;spip_ancre&#034;&gt;Version de Correction 1.9.2g&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Plusieurs nouveaut&#233;s concernent l'interface de programmation (API) de SPIP, c'est-&#224;-dire la liste des fonctions mises &#224; la disposition des programmeurs (notamment pour les plugins).&lt;/p&gt;
&lt;p&gt;Cette nouvelle version s'appr&#233;cie donc aussi pour les nouveaux plugins qu'elle permet d'utiliser
(voir, entre autres, &lt;a href=&#034;http://www.spip-contrib.net/Les-Crayons&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le plugin &#171; crayons &#187;&lt;/a&gt;, qui permet d'&#233;diter les articles directement sur le site public ; le plugin
de validation XHTML automatique, etc.)&lt;/p&gt;
&lt;p&gt;Pour la migration d'un site existant vers cette nouvelle version stable, il est important de noter les points suivants :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;r&#233;organisation des r&#233;pertoires&lt;/strong&gt;, et notamment d&#233;placement de CACHE et de ecrire/data vers tmp/ ; des vignettes d'image vers local/ ; et des fichiers de configuration (mes_options.php, connect.php) vers config/ ;&lt;/li&gt;&lt;li&gt; le r&#233;pertoire ecrire/ ne contient donc plus que des scripts, et peut &#234;tre partag&#233; entre plusieurs sites (voir l'article sur la &lt;a href='https://www.spip.net/fr_article3514.html' class=&#034;spip_in&#034;&gt;mutualisation&lt;/a&gt;) ;&lt;/li&gt;&lt;li&gt; si vous utilisez les filtres d'image (et notamment image_reduire) un bug a oblig&#233; &#224; rompre la compatibilit&#233; dans les noms des vignettes. SPIP devra donc recr&#233;er toutes les vignettes. Vous pouvez supprimer les vignettes pr&#233;sentes dans le r&#233;pertoire IMG/&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;Voici une liste plus d&#233;taill&#233;e des nouveaut&#233;s :&lt;/i&gt;&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Espace-prive&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Espace-prive'&gt;Espace priv&#233;&lt;a class='sommaire-back sommaire-back-9' href='#s-Espace-prive' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;conformit&#233; XHTML 1.0 Transitional&lt;/strong&gt; de l'espace priv&#233; (et m&#234;me strict, hormis quelques attributs Transitional sans &#233;quivalents exacts en Strict) ;&lt;/li&gt;&lt;li&gt; de &lt;strong&gt;nouvelles ic&#244;nes de documents&lt;/strong&gt; ;&lt;/li&gt;&lt;li&gt; statistiques t&#233;l&#233;chargeables au &lt;strong&gt;format CSV&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; des statistiques plus correctes (un bug tendait &#224; surestimer largement le nombre total de visites sur le site)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;g&#233;n&#233;ration automatique de vignettes (sous GD2) :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; d&#233;tection de la taille maximale d'image manipulable, pour anticiper une erreur lorsque les images t&#233;l&#233;charg&#233;es sont trop grandes. Les grosses images sont conserv&#233;es telles quelles ;&lt;/li&gt;&lt;li&gt; cette d&#233;tection est r&#233;alis&#233;e par un calcul unique (un peu gourmand) dans la page Configuration&gt;Fonctions Avanc&#233;es. Visuellement, une jauge affiche en vert le nombre maximal de pixels utilis&#233;s (en millions de pixels)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;t&#233;l&#233;chargement de documents/images :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; possible de t&#233;l&#233;charger un document d&#232;s la cr&#233;ation de l'article ;&lt;/li&gt;&lt;li&gt; le t&#233;l&#233;chargement ne fait pas perdre les modifications en cours dans l'&#233;dition du texte&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;sauvegarde :&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; sauvegarde facilit&#233;e : authentification supprim&#233;e, possibilit&#233; de choisir le nom de la sauvegarde afin d'en conserver plusieurs&lt;/li&gt;&lt;li&gt; sauvegarde de la configuration du site et des plugins (&#224; l'exception de ceux qui sont li&#233;s &#224; la configuration du serveur)&lt;/li&gt;&lt;li&gt; restauration fiable des anciennes versions ou cr&#233;&#233;es par phpmyadmin (au format XML)&lt;/li&gt;&lt;li&gt; restauration avec fusion au lieu d'&#233;crasement, avec importation des logos ;&lt;/li&gt;&lt;li&gt; restauration acc&#233;l&#233;r&#233;e et corrig&#233;e sur son traitement des entit&#233;s HTML.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Espace-public&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Espace-public'&gt;Espace public&lt;a class='sommaire-back sommaire-back-9' href='#s-Espace-public' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;G&#233;n&#233;ralit&#233;s&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; validateur XHTML interne embarqu&#233; permettant de valider les pages produites par les squelettes (bouton Analyse XML)&lt;/li&gt;&lt;li&gt; indenteur XHTML activable pour produire du code indent&#233;&lt;/li&gt;&lt;li&gt; la colonne d'ajout de documents est utilisable dans les squelettes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#ID_ARTICLE|afficher_documents_colonne)]&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;crit&#232;res&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt;&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;fusion&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{fusion}&lt;/code&gt; : permet de regrouper les r&#233;sultats d'une boucle SPIP selon les valeurs distinctes d'un champ (GROUP BY de sql)&lt;/li&gt;&lt;li&gt; le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{par}&lt;/code&gt;, dans son mode dynamique (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{par #ENV{truc}}&lt;/code&gt;) tol&#232;re d&#233;sormais truc=hasard&lt;/li&gt;&lt;li&gt; crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{like}&lt;/code&gt; exp&#233;rimental&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;#BALISES&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; #ARRAY&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;cle1,valeur1,cle2,valeur2...&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt; permet de cr&#233;er une variable tableau (utile pour affecter un tableau dans un #SET et/ou pour utilisation dans un crit&#232;re IN dynamique)&lt;/li&gt;&lt;li&gt; #EDIT&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;xxx&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt; dans la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class&lt;/code&gt; d'un &#233;l&#233;ment entourant la balise #XXX permet de la rendre &#233;ditable &#224; l'aide du plugin crayons (voir &lt;a href=&#034;http://www.spip-contrib.net/Les-Crayons&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la documentation sur spip-contrib&lt;/a&gt;)&lt;/li&gt;&lt;li&gt; #TOTAL_UNIQUE permet de ressortir le nombre d'&#233;l&#233;ments diff&#233;rents obtenus avec le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|unique&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;PIPELINE&#034;&gt;&lt;/a&gt;#PIPELINE&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;nom_du_pipeline&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt; permet, dans un squelette, d'afficher le flux d'un pipeline donn&#233;, issu d'un ou plusieurs plugins.&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;URL_ACTION_AUTEUR&#034;&gt;&lt;/a&gt;#URL_ACTION_AUTEUR&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;action&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt; affiche l'adresse de l'action &#171; action &#187; avec le n&#233;cessaire pour v&#233;rifier les autorisations du visiteur connect&#233;. Cette balise accepte deux param&#232;tres suppl&#233;mentaires et facultatifs : une liste d'arguments et une adresse de redirection &#233;ventuelle.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;filtres&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;|filtres&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;|concat&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;valeur1,valeur2,..&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt;&lt;/i&gt; permet de concat&#233;ner plusieurs cha&#238;nes.&lt;/li&gt;&lt;li&gt; &lt;i&gt;|compacte&lt;/i&gt; permettent de r&#233;duire la taille d'une css ou d'un javascript en supprimant tous les commentaires. Le filtre prend en entr&#233;e le nom du fichier, et produit un nouveau fichier dont il renvoie le nom &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;link rel=&#034;stylesheet&#034; href=&#034;[(#CHEMIN{spip_style.css}|compacte)]&#034; type=&#034;text/css&#034; media=&#034;all&#034; /&gt;&lt;/code&gt;&lt;br class='manualbr' /&gt;Il accepte un param&#232;tre optionnel, le type du fichier lorsqu'il ne peut &#234;tre d&#233;duit de l'extension comme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;...|compacte{js}&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;i&gt;|date_822&lt;/i&gt; : pour certains feeds RSS 2.0 (notamment photocast), il est n&#233;cessaire d'ins&#233;rer la date au format RFC 822 (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;pubDate&gt;&lt;/code&gt;)&lt;/li&gt;&lt;li&gt; &lt;i&gt;|paragrapher&lt;/i&gt; pour toujours mettre des paragraphes HTML autour du texte (et pas seulement si &#231;a contient au moins deux paragraphes).&lt;/li&gt;&lt;li&gt; &lt;i&gt;|url_absolue_css&lt;/i&gt; passe toutes les URL relatives d'une css en URL absolue (a utiliser avant compacte par exemple)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;am&#233;liorations :&lt;/strong&gt; &lt;i&gt;|direction_css&lt;/i&gt; conserve les images de background et se propage dans les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Remaniement et homog&#233;n&#233;isation des filtres images&lt;/strong&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Tous les filtres &lt;i&gt;image_xx&lt;/i&gt; respectent les attributs pr&#233;sents en entr&#233;e.
Ils modifient &#233;ventuellement :
&lt;br /&gt;- l'attribut src (par d&#233;finition)...
&lt;br /&gt;- les attributs style, width et height si la taille change
&lt;br /&gt;- l'attribut class pour mettre ou enlever l'attribut format_png selon que l'image de sortie est au format png ou non&lt;/li&gt;&lt;li&gt; Les filtres image suivants ont &#233;t&#233; ajout&#233;s :
&lt;br /&gt;- &lt;i&gt;|image_imagick&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;fonction_php_imagick, variables,...&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt;&lt;/i&gt; permet d'appliquer n'importe quelle fonction de la librairie php_imagick : des filtres in&#233;dits jusqu'&#224; pr&#233;sent dans SPIP ; il y en a de tr&#232;s impressionnants ; mais cela ne fonctionne que sur les images sans transparence alpha
&lt;br /&gt;- &lt;i&gt;|image_recadre&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;largeur,hauteur,position&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt;&lt;/i&gt; pour recadrer une image (le crop de Photoshop) avec les combinaisons de left/center/right et top/center/bottom pour la position (ex 'left center')
&lt;br /&gt;- &lt;i&gt;|image_renforcement&lt;/i&gt; fait exactement le contraire de image_flou. A utiliser notamment sur les vignettes de pr&#233;visualisation, qui deviennent carr&#233;ment plus belles.
&lt;br /&gt;- &lt;i&gt;|image_select&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{&lt;/code&gt;largeur_min,hauteur_min,largeur_max,hauteur_max&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;}&lt;/code&gt;&lt;/i&gt; permet de cibler les images qui subiront les filtres images &#224; suivre. Utile pour faire par exemple &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TEXTE|image_select{50,50}|image_masque{...})]&lt;/code&gt; dans deformer les icones de documents ou puces ...&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;R&#233;organisation des r&#233;pertoires&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; suppression de ecrire/data, plus de droit d'&#233;criture dans ecrire n&#233;cessaire (connect.php passe dans config/ )&lt;/li&gt;&lt;li&gt; tmp/ comporte tout ce qui est temporaire et non accessible par le navigateur (inclus cache/)&lt;/li&gt;&lt;li&gt; local/ comporte tout ce qui est temporaire et accessible par le navigateur (inclus les vignettes d'image)&lt;/li&gt;&lt;li&gt; IMG/ comporte ce qui est permanent et accessible par le navigateur&lt;/li&gt;&lt;li&gt; config/ comporte ce qui est permanent et non accessible par le navigateur&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;API (interface de programmation, destin&#233;e aux d&#233;veloppeurs)&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; jQuery 1.1 inclus dans SPIP, charg&#233; dans l'espace priv&#233; par defaut, et dans l'espace public si le squelette dispose de #INSERT_HEAD ; cette librairie javascript est document&#233;e en fran&#231;ais sur le site &lt;a href=&#034;https://www.jquery.info&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;www.jquery.info&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Poursuite de la r&#233;organisation du code pour s&#233;parer l'affichage des op&#233;rations sur la base de donn&#233;es, et pour faciliter la surcharge&lt;/li&gt;&lt;li&gt; autoriser('voir'...) partout dans l'espace priv&#233; pour permettre le filtrage d'acc&#232;s et l'ouverture de nouveaux droits de modification&lt;/li&gt;&lt;li&gt; la fonction recuperer_page permet des appels SOAP en fournissant un $data du type string (headers+deux retour lignes+corps xml)&lt;/li&gt;&lt;li&gt; API d'installation/d&#233;sinstallation des plugins : les plugins qui gerent leur installation sont rep&#233;r&#233;s visuellement par une icone&lt;/li&gt;&lt;li&gt; les mod&#232;les peuvent utiliser du javascript qui restera actif, y compris dans l'espace priv&#233;&lt;/li&gt;&lt;li&gt; le javascript dans les articles est d&#233;sactiv&#233; dans l'espace priv&#233;, mais actif dans l'espace public (il est possible de modifier cette r&#232;gle). Cela permet de programmer des comportements javascript ou jQuery directement dans les articles.&lt;/li&gt;&lt;li&gt; annonce dans les ent&#234;tes HTTP des pages de la liste des plugins install&#233;s et de leur version (desactivable par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS['spip_header_silencieux'] = true;&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bugfix :&lt;/strong&gt;
&lt;br /&gt;- MySQL 5 : Certaines configurations serveurs MySQL 5 posant probl&#232;me, la constante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_MYSQL_SQL_MODE_TEXT_NOT_NULL&lt;/code&gt; permet de contourner le bug, en attendant une refonte de la d&#233;finition des tables ;
&lt;br /&gt;- le nom des vignettes issues de image_reduire pouvaient &#234;tre identiques pour deux images sources diff&#233;rentes&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
Comme d'habitude, ces am&#233;liorations seront rapidement int&#233;gr&#233;es au reste de la documentation officielle, avec des exemples d&#233;taill&#233;s. En attendant n'h&#233;sitez pas &#224; solliciter la liste des utilisateurs !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;v192a&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-correction-1-9-2a&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-correction-1-9-2a'&gt;Version de correction 1.9.2a&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-correction-1-9-2a' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP 1.9.2a est parue le 14 mars 2007&lt;/p&gt;
&lt;p&gt;Cette version [8878] n'apporte pas de nouveaut&#233;s, elle fixe essentiellement des bugs :&lt;/p&gt;
&lt;p&gt;- &#233;viter un crash de Safari et divers bugs sous IE et FF (dans des sites dont l'url contient un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~&lt;/code&gt;) lors de l'upload de documents
&lt;br /&gt;- compatibilit&#233; avec les nouvelles versions de php (4.4.6) et en particulier PCRE
&lt;br /&gt;- &#233;viter une erreur chez free avec le filemtime sur les fichiers inexistants
&lt;br /&gt;- raccourci hors du bloc des raccourcis (exec=articles_page)
&lt;br /&gt;- rectification de l'interface permettant de 'liberer les articles'
&lt;br /&gt;- Les visiteurs et les auteurs &#224; la poubelle n'ont pas acc&#232;s la messagerie interne.
&lt;br /&gt;- ne pas construire de vignettes vide si on n'a pas pu r&#233;cup&#233;rer le fichier distant
&lt;br /&gt;- impr&#233;cisions sur les revisions anonymes
&lt;br /&gt;- colonne document dans les breves
&lt;br /&gt;- meilleure &lt;a href=&#034;https://fr.wikipedia.org/wiki/heuristique&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;heuristique&lt;/a&gt; pour chercher la version svn
&lt;br /&gt;- cache pour ex&#233;cution des squelettes dans l'espace priv&#233;
&lt;br /&gt;- pr&#233;cisions filtres robots d'indexation
&lt;br /&gt;- divers nettoyages de code et r&#233;glages css&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;v192b&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-correction-1-9-2b&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-correction-1-9-2b'&gt;Version de correction 1.9.2b&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-correction-1-9-2b' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP 1.9.2b est parue le 23 mai 2007.&lt;/p&gt;
&lt;p&gt;Cette version [9381] n'apporte pas de nouveaut&#233;s, elle r&#233;pare essentiellement des bugs :
&lt;br /&gt;- lien &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[bla{blabla}-&gt;url]&lt;/code&gt; &#233;tait cass&#233;, sauf dans le cas ou on avait un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;hreflang&lt;/code&gt;
&lt;br /&gt;- plusieurs corrections dans calendrier
&lt;br /&gt;- toujours un effort pour rendre SPIP xhtml compliant
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;iexcl;&lt;/code&gt; qui apparaissait lors d'une restauration en espagnol
&lt;br /&gt;- renforcement vis &#224; vis des PREG d&#233;faillants de PHP-4.4.6
&lt;br /&gt;- langue d'accueil fix&#233;e par le visiteur lors de l'installation
&lt;br /&gt;- r&#232;gle les float sans largeur fix&#233;e apr&#232;s passage dans win_png.htc sur IE &lt;br /&gt;- syntaxe incorrecte dans l'installation LDAP
&lt;br /&gt;- rafraichissement des documents apr&#232;s t&#233;l&#233;chargement dans IE et Opera
&lt;br /&gt;- fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;import_identifie_id_type()&lt;/code&gt; en double
&lt;br /&gt;- s&#233;curiser l'argument de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;parametre_url&lt;/code&gt;
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE(xxxxx.php3)&gt;&lt;/code&gt; etait cass&#233;e
&lt;br /&gt;- mauvais include pour des erreurs de squelettes
&lt;br /&gt;- crash dans autoriser si &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_query()&lt;/code&gt; n'a pas encore &#233;t&#233; charg&#233;e
&lt;br /&gt;- upgrade partiellement d&#233;faillant sur des vieilles versions
&lt;br /&gt;- images impossibles &#224; associer &#224; l'article si les documents sont interdits
&lt;br /&gt;- mauvais enregistrement des r&#233;visions partielles (avec les crayons par exemple)
&lt;br /&gt;- le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;couper()&lt;/code&gt; crashait sur une note de bas de page de plusieurs lignes vers le d&#233;but du texte
&lt;br /&gt;- fixe SQL auteur dans certains &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;autoriser()&lt;/code&gt;
&lt;br /&gt;- (et, derni&#232;re minute) une correction d'un bug lors de la restauration des gros dump (reprise apres timeout)&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;v192c&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-correction-1-9-2c&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-correction-1-9-2c'&gt;Version de correction 1.9.2c&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-correction-1-9-2c' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP 1.9.2c est parue le 19 Septembre 2007.&lt;/p&gt;
&lt;p&gt;Cette version apporte une &lt;strong&gt;correction critique d'une faille de s&#233;curit&#233;&lt;/strong&gt;. Elle apporte aussi un certain nombre de corrections et d'am&#233;liorations :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Corrections :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Restauration : reprise sur timeout et d&#233;connexion,&lt;/li&gt;&lt;li&gt; Messagerie interne : envoi du mail de suivi des discussions,&lt;/li&gt;&lt;li&gt; Date de r&#233;daction ant&#233;rieure : contournement d'un bug IE emp&#234;chant la
modification,&lt;/li&gt;&lt;li&gt; menu des rubriques (gadget tout le site) : arborescence incompl&#232;te
dans certains cas,&lt;/li&gt;&lt;li&gt; fiche auteur : bug en modification de l'url du site,&lt;/li&gt;&lt;li&gt; filtres images : bug sur aplatissement en gif,&lt;/li&gt;&lt;li&gt; barre typographique : bug d'affichage,&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#URL_LOGOUT&lt;/code&gt; : suppression des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;&lt;/code&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;amp;&lt;/code&gt; et redirection vers la page en cours (self) par d&#233;faut,&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LOGIN_PUBLIC&lt;/code&gt; : accepte les visiteurs.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Am&#233;liorations :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; support JQuery 1.1.4 (la version int&#233;gr&#233;e restant la 1.1.1) et quelques correctifs,&lt;/li&gt;&lt;li&gt; Fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_aplatir&lt;/code&gt; : prend un 3eme param&#232;tre &#034;qualit&#233;&#034; (85 par d&#233;faut pour les jpg, nombre de couleurs de la palette pour gif et png),&lt;/li&gt;&lt;li&gt; Mot de passe : Peut contenir des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;'&lt;/code&gt; et des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;\&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;articles_tous&lt;/code&gt; et brouteur : optimisation des requ&#234;tes (surcharge MySQL
pour les gros sites),&lt;/li&gt;&lt;li&gt; Ajout des extensions &lt;i&gt;csv&lt;/i&gt;, &lt;i&gt;mkv&lt;/i&gt;, &lt;i&gt;mka&lt;/i&gt;, &lt;i&gt;kml&lt;/i&gt; et &lt;i&gt;kmz&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;v192d&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-correction-1-9-2d&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-correction-1-9-2d'&gt;Version de correction 1.9.2d&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-correction-1-9-2d' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP 1.9.2d est parue le 27 Janvier 2008.&lt;/p&gt;
&lt;p&gt;Cette mise &#224; jour concerne exclusivement des corrections de bugs. Le
passage &#224; cette version est conseill&#233;, et ne doit entrainer aucun
impact fonctionnel pour les visiteurs de votre site si vous utilisez
d&#233;j&#224; une version 1.9.2 (a,b ou c)&lt;/p&gt;
&lt;p&gt;Pour les r&#233;dacteurs et administrateurs :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'une incoh&#233;rence dans la gestion de date des documents
(date/heure a la cr&#233;ation puis date seulement)&lt;/li&gt;&lt;li&gt; correction d'un bug sur le menu de rubriques qui en masquait
certaines (ticket #1113)&lt;/li&gt;&lt;li&gt; &#233;viter une erreur javascript au d&#233;but du chargement de la page
lorsque l'on bouge la souris trop vite&lt;/li&gt;&lt;li&gt; la configuration graphique et l'adresse du site ne sont pas
&#233;cras&#233;es lors de la restauration d'une sauvegarde, car li&#233;es au serveur&lt;/li&gt;&lt;li&gt; affichage correct des captures d'&#233;cran successives dans les
statistiques&lt;/li&gt;&lt;li&gt; ajout de la traduction en indon&#233;sien&lt;/li&gt;&lt;li&gt; correction d'un bug sur les droits de modification des sites
syndiqu&#233;s par les administrateurs restreints&lt;/li&gt;&lt;li&gt; correction d'une s&#233;rie de bugs relatifs &#224; la gestion des droits sur
les logos&lt;/li&gt;&lt;li&gt; correction d'un bug sur la requ&#234;te sql du navigateur de rubriques
qui le rendait inutilisable sur les gros sites (et tri des rubriques
par num titre, titre)&lt;/li&gt;&lt;li&gt; correction d'un bug qui autorisait un
administrateur restreint &#224; d&#233;placer un article publi&#233; dans une rubrique dont il n'est pas administrateur.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;D'un point de vue plus technique, pour les d&#233;veloppeurs de plugins :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; remplacer la constante _INC_PUBLIC par la globale _INC_PUBLIC et l'incr&#233;menter lors des inclusions pour que le plugin balise session fonctionne correctement (notamment sa gestion de cache report&#233;e de la version en cours de d&#233;veloppement)&lt;/li&gt;&lt;li&gt; am&#233;lioration de la purge du cache dans le CRON (la purge pouvait ne jamais r&#233;ussir apr&#232;s le passage d'un robot, et saturer les ressources serveurs &#224; essayer de calculer la taille du cache)&lt;/li&gt;&lt;li&gt; url_de_base peut &#234;tre appel&#233;e depuis mes_options&lt;/li&gt;&lt;li&gt; Correction d'un include manquant qui pouvait faire &#233;chouer la
fonction autoriser_voir_dist&lt;/li&gt;&lt;li&gt; recuperer_page prend correctement en charge les urls du type https (si php a &#233;t&#233; compil&#233; avec le support de ssl)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;v192e&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-Correction-1-9-2e&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-Correction-1-9-2e'&gt;Version de Correction 1.9.2e&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-Correction-1-9-2e' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cette version a &#233;t&#233; publi&#233;e le 13 septembre 2008 (&lt;a href=&#034;http://core.spip.org/projects/spip/repository/revisions/12624&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;r&#233;vision [12624]&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Elle apporte quelques corrections de bugs mineurs et des adaptations techniques.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Les expressions r&#233;guli&#232;res sont d&#233;sormais compatibles avec la version 5.2.6 de PHP (C'est LA correction principale)&lt;/li&gt;&lt;li&gt; Correction de la mise en &#233;vidence des r&#233;sultats de recherche sur deux mots ou plus&lt;/li&gt;&lt;li&gt; Correction de l'indexation des forums&lt;/li&gt;&lt;li&gt; Chaque message peut &#234;tre index&#233; individuellement, plut&#244;t que le fil complet&lt;/li&gt;&lt;li&gt; Correction d'un bug de l'espace priv&#233; (cas de mots cl&#233;s multiples s&#233;par&#233;s par des virgules)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;v192f&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-Correction-1-9-2f&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-Correction-1-9-2f'&gt;Version de Correction 1.9.2f&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-Correction-1-9-2f' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cette version a &#233;t&#233; publi&#233;e le 7 d&#233;cembre 2008 (&lt;a href=&#034;http://core.spip.org/projects/spip/repository/revisions/13408&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;r&#233;vision [13408]&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Elle apporte quelques corrections de bugs mineurs :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Corrige le bug de fake HTTP_X_FORWARDED_HOST (&lt;a href=&#034;http://core.spip.org/issues/401&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;#401&lt;/a&gt;)&lt;/li&gt;&lt;li&gt; Correction d'orthographe pour l'ukrainien&lt;/li&gt;&lt;li&gt; Protection des urls de redirection&lt;/li&gt;&lt;li&gt; Optimisation des requ&#234;tes SQL, permet d'utiliser le cache des requetes de MySQL (id&#233;e de Thomas Radio France et Fabrizio Pix-L)&lt;/li&gt;&lt;li&gt; Correction des conflits d'&#233;dition des SELECT MD5&lt;/li&gt;&lt;li&gt; Am&#233;lioration du tri &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{par multi titre}&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;v192g&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Version-de-Correction-1-9-2g&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Version-de-Correction-1-9-2g'&gt;Version de Correction 1.9.2g&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-de-Correction-1-9-2g' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cette version a &#233;t&#233; publi&#233;e le 24 d&#233;cembre 2008 (&lt;a href=&#034;http://core.spip.org/projects/spip/repository/revisions/13534&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;r&#233;vision [13534]&lt;/a&gt;).&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Correction d'orthographe pour l'asturien&lt;/li&gt;&lt;li&gt; Protection de l'argument fournit au calcul de branche (Julien Cayssol)&lt;/li&gt;&lt;li&gt; Correction d'une perte de date de l'agenda dans les calculs&lt;/li&gt;&lt;li&gt; Rejet des urls avec le pseudo protocole data : dans la fonction de redirection redirige_par_entete&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour plus de d&#233;tails : &lt;a href=&#034;http://core.spip.org/projects/spip/wiki#Anciennes-versions&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;historique de la branche 1.9.2 sur trac&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>O&#249; placer les fichiers de squelettes ?</title>
		<link>https://www.spip.net/fr_article3347.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3347.html</guid>
		<dc:date>2006-08-30T13:34:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>$GLOBALS['dossier_squelettes']</dc:subject>

		<description>
&lt;p&gt;Les squelettes sont rang&#233;s dans un dossier d&#233;di&#233;, nomm&#233; squelettes-dist/. Le dossier squelettes/ accueillera vos squelettes personnalis&#233;s. &lt;br class='autobr' /&gt; Le code de SPIP et de la structure du site sont ainsi clairement s&#233;par&#233;s avec par exemple, la possibilit&#233; de changer tout un ensemble de squelettes d'un seul coup. &lt;br class='autobr' /&gt;
Les squelettes par d&#233;faut : squelettes-dist/ &lt;br class='autobr' /&gt;
Les squelettes de la distribution &#8212; c'est-&#224;-dire ceux fournis en standard &#224; l'installation de SPIP &#8212; sont regroup&#233;s dans un unique (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique135.html" rel="directory"&gt;Webmestres&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@globalsdossier_squelettes" rel="tag"&gt;$GLOBALS['dossier_squelettes']&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les squelettes sont rang&#233;s dans un dossier d&#233;di&#233;, nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/&lt;/code&gt;.&lt;br class='autobr' /&gt;
Le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt; accueillera vos squelettes personnalis&#233;s.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav69fae928b64805.82754191&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Les-squelettes-par-defaut&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-squelettes-par-defaut&#034; class=&#034;spip_ancre&#034;&gt;Les squelettes par d&#233;faut : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Votre-dossier&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Votre-dossier&#034; class=&#034;spip_ancre&#034;&gt;Votre dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Utiliser-un-autre-dossier-de-squelettes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Utiliser-un-autre-dossier-de-squelettes&#034; class=&#034;spip_ancre&#034;&gt;Utiliser un autre dossier de squelettes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Priorite-des-dossiers-de-squelettes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Priorite-des-dossiers-de-squelettes&#034; class=&#034;spip_ancre&#034;&gt;Priorit&#233; des dossiers de squelettes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Le code de SPIP et de la structure du site sont ainsi clairement s&#233;par&#233;s avec par exemple, la possibilit&#233; de changer tout un ensemble de squelettes d'un seul coup.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Les-squelettes-par-defaut&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Les-squelettes-par-defaut'&gt;Les squelettes par d&#233;faut : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-4' href='#s-Les-squelettes-par-defaut' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les squelettes de la distribution &#8212; c'est-&#224;-dire ceux fournis en standard &#224; l'installation de SPIP &#8212; sont regroup&#233;s dans un unique r&#233;pertoire. Ces fichiers contiennent les informations sur la mise en page par d&#233;faut du site et ne doivent pas &#234;tre modifi&#233;s. Vous pouvez examiner le contenu de ce r&#233;pertoire et partir de ce jeu de squelettes pour adapter la mise en page &#224; vos besoins&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;C'est m&#234;me une m&#233;thode vivement conseill&#233;e, car ce jeu de squelettes a &#233;t&#233; (&#8230;)&#034; id=&#034;nh5-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Toutefois, &lt;strong&gt;il ne faut pas modifier les squelettes de la distribution&lt;/strong&gt;, sinon vous risqueriez de perdre toutes vos modifications &#224; chaque mise &#224; jour de SPIP !&lt;br class='manualbr' /&gt;Pour &#233;viter cela, &lt;strong&gt;faites une copie des fichiers que vous souhaitez modifier&lt;/strong&gt;, et placez-les dans un autre r&#233;pertoire, comme indiqu&#233; ci-apr&#232;s.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Votre-dossier&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Votre-dossier'&gt;Votre dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-4' href='#s-Votre-dossier' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les squelettes personnalis&#233;s doivent &#234;tre rang&#233;s dans un r&#233;pertoire nomm&#233; &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt;&lt;/strong&gt; (attention au &#171; s &#187; final !), que vous cr&#233;erez &#224; la racine de votre site SPIP. Que vous souhaitiez installer un jeu complet de squelettes (pris sur &lt;a href=&#034;https://contrib.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;SPIP - Contrib&lt;/a&gt; ou ailleurs), ou apporter une l&#233;g&#232;re modification aux squelettes par d&#233;faut, placez vos squelettes dans ce r&#233;pertoire.&lt;/p&gt;
&lt;p&gt;Ainsi, un utilisateur qui veut cr&#233;er sa propre mise en page, d&#233;veloppera ses propres fichiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;article.html&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rubrique.html&lt;/code&gt;, etc. dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt;. Notez bien qu'il n'est pas indispensable de placer un jeu de squelettes complet dans ce r&#233;pertoire.&lt;/p&gt;
&lt;p&gt;Pour afficher les pages du site, SPIP cherche les squelettes prioritairement dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt; ; si SPIP n'y trouve pas un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.html&lt;/code&gt; qui lui est n&#233;cessaire, il ira chercher celui de la distribution dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/&lt;/code&gt;.&lt;br class='manualbr' /&gt;Ainsi, si vous n'avez plac&#233; qu'un seul fichier dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes&lt;/code&gt;, par exemple &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;article.html&lt;/code&gt;, SPIP utilisera ce squelette pour afficher les articles, et ceux de la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dist&lt;/code&gt; pour toutes les autres pages du site.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt; est destin&#233; &#224; recevoir tous les fichiers n&#233;cessaires &#224; la mise en page d'un site&lt;/strong&gt;. On y rangera donc :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les squelettes, c'est-&#224;-dire les fichiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.html&lt;/code&gt; avec du code SPIP ;&lt;/li&gt;&lt;li&gt; les &lt;a href='https://www.spip.net/fr_article1828.html' class=&#034;spip_in&#034;&gt;fichiers inclus&lt;/a&gt; dans les squelettes et les &lt;a href='https://www.spip.net/fr_article3454.html' class=&#034;spip_in&#034;&gt;mod&#232;les&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; les formulaires modifi&#233;s, dans un sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires/&lt;/code&gt;&lt;/li&gt;&lt;li&gt; les feuilles de style CSS qui produisent l'habillage graphique ; les personnaliser permet en effet de varier, parfois spectaculairement, l'habillage d'un site sans intervenir dans les squelettes. Voir : &#171; &lt;a href='https://www.spip.net/fr_article2331.html' class=&#034;spip_in&#034;&gt;Mettez-y votre style !&lt;/a&gt; &#187; ;&lt;/li&gt;&lt;li&gt; les images utilis&#233;es dans les squelettes ;&lt;/li&gt;&lt;li&gt; le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_fonctions.php&lt;/code&gt; contenant les filtres et &lt;a href='https://www.spip.net/fr_article1825.html' class=&#034;spip_in&#034;&gt;variables de personnalisation&lt;/a&gt; propres &#224; ce jeu de squelettes ;&lt;/li&gt;&lt;li&gt; les fichiers javascripts ;&lt;/li&gt;&lt;li&gt; les fichiers de langue personnalis&#233;s (cf. : &#171; &lt;a href='https://www.spip.net/article2128.html#fichiers_lang'&gt;article 2128&lt;/a&gt; &#187;, m&#233;thode des fichiers de langues), dans un sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lang/&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; etc...&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Utiliser-un-autre-dossier-de-squelettes&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Utiliser-un-autre-dossier-de-squelettes'&gt;Utiliser un autre dossier de squelettes&lt;a class='sommaire-back sommaire-back-4' href='#s-Utiliser-un-autre-dossier-de-squelettes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il est possible de ranger les squelettes dans un r&#233;pertoire portant le nom de votre choix, en le d&#233;clarant dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_options.php&lt;/code&gt;, avec la variable de personnalisation &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS['dossier_squelettes']&lt;/code&gt;&lt;/strong&gt;, comme expliqu&#233; dans &lt;a href='https://www.spip.net/fr_article1825.html#doss_squel' class=&#034;spip_in&#034;&gt;la documentation correspondante&lt;/a&gt;. SPIP ira chercher les squelettes en priorit&#233; dans le r&#233;pertoire ainsi d&#233;clar&#233;.&lt;/p&gt;
&lt;p&gt;Cela vous permet, par exemple, d'essayer un nouveau jeu de squelettes sans &#233;craser l'ancien, ou de g&#233;rer dynamiquement plusieurs jeux de squelettes.&lt;/p&gt;
&lt;p&gt;Vous pouvez indiquer plusieurs dossiers, avec le caract&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:&lt;/code&gt; comme s&#233;parateur.&lt;/p&gt;
&lt;p&gt;Exemple : lorsque &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS['dossier_squelettes']='surcharge:mesquels:tests&lt;/code&gt;, les squelettes du dossier 'surcharge' sont prioritaires, puis ceux de mesquels puis ceux de tests.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Priorite-des-dossiers-de-squelettes&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Priorite-des-dossiers-de-squelettes'&gt;Priorit&#233; des dossiers de squelettes&lt;a class='sommaire-back sommaire-back-4' href='#s-Priorite-des-dossiers-de-squelettes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Soyons plus exhaustifs et r&#233;sumons. Grosso modo, lorsque SPIP doit utiliser un fichier, il le cherche dans diff&#233;rents r&#233;pertoires dans l'ordre suivant :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; en premier lieu dans la liste de dossiers d&#233;sign&#233;s dans la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS['dossier_squelettes']&lt;/code&gt;, si celle-ci est d&#233;finie ;&lt;/li&gt;&lt;li&gt; ensuite dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes/&lt;/code&gt; situ&#233; &#224; la racine du site ;&lt;/li&gt;&lt;li&gt; puis dans la liste de dossiers de la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$plugins&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; ensuite &#224; la racine du site ;&lt;/li&gt;&lt;li&gt; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; et enfin dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;i&gt;&#171; Grosso modo &#187;&lt;/i&gt;, car &#224; cela s'ajoutent quelques subtilit&#233;s&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Comme une nomenclature des fichiers en fonction de leur r&#244;le, ce qui fait, (&#8230;)&#034; id=&#034;nh5-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;, dont un ordre de priorit&#233; par fichier de squelette, qui permet des variantes plus fines : par rubrique, par branche ou par langue, comme expliqu&#233; dans &lt;a href='https://www.spip.net/fr_article3445.html' class=&#034;spip_in&#034;&gt;la documentation correspondante&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&lt;i&gt;Remarque :&lt;/i&gt; En fait, le m&#233;canisme d&#233;crit ci-dessus pour choisir l'emplacement d'un fichier ne s'applique pas seulement aux squelettes, mais aussi &#224; l'ensemble du code de SPIP. Dans le jargon du developpment on parle de &#171; surcharger du code &#187;, l'ordre de choix des dossiers &#233;tant dans le &#171; SPIP_PATH &#187;.&lt;/p&gt;
&lt;p&gt;Cela met en place le cadre et les normes pour le d&#233;veloppement des &#171; plug-ins &#187;, extensions des fonctionnalit&#233;s de SPIP que tout les membres de la communaut&#233; peuvent apporter.&lt;/p&gt;
&lt;p&gt;Ainsi, on peut modifier n'importe quelle caract&#233;ristique du comportement de SPIP. Attention toutefois &#224; ne pas se priver des &#233;volutions de la distribution et du support de la communaut&#233;.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb5-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 5-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;C'est m&#234;me une m&#233;thode vivement conseill&#233;e, car ce jeu de squelettes a &#233;t&#233; pens&#233; pour &#234;tre aussi modulaire que possible.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb5-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 5-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Comme une nomenclature des fichiers en fonction de leur r&#244;le, ce qui fait, par exemple, que SPIP ira chercher les fichiers de langue dans un sous r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lang/&lt;/code&gt;, comme nous l'avons vu plus haut.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 1.9.1</title>
		<link>https://www.spip.net/fr_article3462.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3462.html</guid>
		<dc:date>2006-08-29T22:31:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>L'&#233;quipe de SPIP</dc:creator>


		<dc:subject>pagination</dc:subject>
		<dc:subject>image_masque</dc:subject>
		<dc:subject>#SPIP_VERSION</dc:subject>
		<dc:subject>#INSERT_HEAD</dc:subject>
		<dc:subject>#INCLURE</dc:subject>
		<dc:subject>#SQUELETTE</dc:subject>
		<dc:subject>#GET</dc:subject>
		<dc:subject>#SET</dc:subject>
		<dc:subject>fragment</dc:subject>

		<description>
&lt;p&gt;SPIP 1.9.1 est sorti ! &lt;br class='autobr' /&gt;
Voici les principales nouveaut&#233;s de cette version. &lt;br class='autobr' /&gt; Espace priv&#233; &lt;br class='autobr' /&gt;
L'espace priv&#233; int&#232;gre de mani&#232;re plus importante la technique de mise &#224; jour asynchrone (AJAX/AHAH) d'une partie de la page. Les formulaires de descriptions d'images et de documents deviennent tr&#232;s fluides, la rotation des images, l'ajout de mots-cl&#233;s ou d'auteurs, les r&#233;f&#233;rences aux traductions sont &#233;galement plus rapides. &lt;br class='autobr' /&gt;
Un syst&#232;me de mod&#232;les &lt;br class='autobr' /&gt;
Les mod&#232;les sont des mini-squelettes qui peuvent (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique785.html" rel="directory"&gt;Anciennes versions&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@pagination" rel="tag"&gt;pagination&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@image_masque" rel="tag"&gt;image_masque&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@spip_version" rel="tag"&gt;#SPIP_VERSION&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@insert_head" rel="tag"&gt;#INSERT_HEAD&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@inclure" rel="tag"&gt;#INCLURE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@squelette" rel="tag"&gt;#SQUELETTE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@get" rel="tag"&gt;#GET&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@set" rel="tag"&gt;#SET&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@fragment" rel="tag"&gt;fragment&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.spip.net/local/cache-vignettes/L128xH128/arton3462-33246.png?1595009892' class='spip_logo spip_logo_right' width='128' height='128' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP 1.9.1 est sorti !&lt;/p&gt;
&lt;p&gt;Voici les principales nouveaut&#233;s de cette version.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69fae928b92c07.43661648&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Espace-prive&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Espace-prive&#034; class=&#034;spip_ancre&#034;&gt;Espace priv&#233;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-systeme-de-modeles&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-systeme-de-modeles&#034; class=&#034;spip_ancre&#034;&gt;Un syst&#232;me de mod&#232;les&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Nouvelles-balises&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Nouvelles-balises&#034; class=&#034;spip_ancre&#034;&gt;Nouvelles balises&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Filtres&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Filtres&#034; class=&#034;spip_ancre&#034;&gt;Filtres&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Utilisateurs-avances&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Utilisateurs-avances&#034; class=&#034;spip_ancre&#034;&gt;Utilisateurs avanc&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Correctifs&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Correctifs&#034; class=&#034;spip_ancre&#034;&gt;Correctifs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-t&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#t&#034; class=&#034;spip_ancre&#034;&gt;* * *&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Espace-prive&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Espace-prive'&gt;Espace priv&#233;&lt;a class='sommaire-back sommaire-back-7' href='#s-Espace-prive' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;L'espace priv&#233; int&#232;gre de mani&#232;re plus importante la technique de mise &#224; jour asynchrone (AJAX/AHAH) d'une partie de la page. Les formulaires de descriptions d'images et de documents deviennent tr&#232;s fluides, la rotation des images, l'ajout de mots-cl&#233;s ou d'auteurs, les r&#233;f&#233;rences aux traductions sont &#233;galement plus rapides.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-systeme-de-modeles&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-systeme-de-modeles'&gt;Un syst&#232;me de mod&#232;les&lt;a class='sommaire-back sommaire-back-7' href='#s-Un-systeme-de-modeles' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les mod&#232;les sont des mini-squelettes qui peuvent s'int&#233;grer facilement dans un squelette normal mais aussi &#8212; et surtout &#8212; dans le texte des articles (ou br&#232;ves, etc).&lt;/p&gt;
&lt;p&gt;Ils sont une extension naturelle des raccourcis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1|left&gt;&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;doc1|center&gt;&lt;/code&gt;. Ceux-ci sont d'ailleurs d&#233;sormais g&#233;r&#233;s par ces mini-squelettes ; vous pouvez d&#233;finir les v&#244;tres dans le sous-r&#233;pertoire &lt;tt&gt;modeles/&lt;/tt&gt; de votre dossier de squelettes (ou d'un plugin).&lt;/p&gt;
&lt;p&gt;Outre les raccourcis de document et d'image, les mod&#232;les propos&#233;s dans &lt;tt&gt;dist/modeles/&lt;/tt&gt; g&#232;rent l'affichage des liens de pagination, de la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LESAUTEURS&lt;/code&gt; et des liens de traduction.&lt;/p&gt;
&lt;p&gt;Les mod&#232;les sont plus largement document&#233;s dans l'article &#171; &lt;a href='https://www.spip.net/fr_article3454.html' class=&#034;spip_in&#034;&gt;Utiliser les mod&#232;les&lt;/a&gt; &#187;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;balises&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Nouvelles-balises&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Nouvelles-balises'&gt;Nouvelles balises&lt;a class='sommaire-back sommaire-back-7' href='#s-Nouvelles-balises' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SPIP_VERSION&lt;/code&gt; affiche la version de SPIP.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INSERT_HEAD&lt;/code&gt; : une balise a ins&#233;rer dans la zone &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;head&gt;...&lt;/head&gt;&lt;/code&gt; de vos squelettes pour permettre aux plugins d'ajouter automatiquement des css ou des javascript.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; : une nouvelle balise pour des inclusions &#171; statiques &#187; et non plus dynamiques.
&lt;blockquote&gt;
&lt;i&gt;Rappel :&lt;/i&gt; La syntaxe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=..}&gt;&lt;/code&gt; provoque l'inclusion des pages &#224; chaque visite d'un internaute, que celle-ci concerne une page d&#233;j&#224; en cache ou non.&lt;br class='manualbr' /&gt;Avec la nouvelle balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#INCLURE{fond=...})]&lt;/code&gt;, l'inclusion est r&#233;alis&#233;e lors du calcul du squelette, et son r&#233;sultat est stock&#233; dans le cache de la page appelante. Avec ce syst&#232;me, on ne peut plus g&#233;rer une dur&#233;e de vie (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$delais&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#CACHE{}&lt;/code&gt;) r&#233;duite pour un squelette inclus ; en revanche il devient possible d'appliquer des filtres sur le squelette inclus : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#INCLURE{fond=lettre}|version_texte)]&lt;/code&gt;.&lt;br class='manualbr' /&gt;NB : le r&#233;sultat de l'inclusion &#233;tant stock&#233; en cache, il ne faut donc pas que l'&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; contienne d'&#233;l&#233;ments dynamiques, en particulier pas de balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_XYZ&lt;/code&gt;.
&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt; La pagination passe en &#171; mod&#232;le &#187; (&lt;i&gt;cf.&lt;/i&gt; ci-dessus), ce qui permet sa personnalisation au moyen de mod&#232;les personnalis&#233;s. Ainsi :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page}&lt;/code&gt; donne des num&#233;ros de page (1, 2, 3, 4...) au lieu des num&#233;ros d'item (0, 10, 20, ...) ;&lt;/li&gt;&lt;li&gt; on peut aussi essayer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page_precedent_suivant}&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{precedent_suivant}&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Introduction d'une balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SQUELETTE&lt;/code&gt; donnant le chemin du squelette courant.&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Filtres&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Filtres'&gt;Filtres&lt;a class='sommaire-back sommaire-back-7' href='#s-Filtres' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Enrichissement de &lt;tt&gt;image_masque&lt;/tt&gt; :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le placement vertical et horizontal du masque peut se faire d&#233;sormais avec :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;text-align=center&lt;/code&gt; (ou left, ou right)&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;vertical-align=middle&lt;/code&gt; (ou top, ou bottom)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; D&#233;sormais on peut choisir le mode de m&#233;lange des deux images, &#224; la fa&#231;on d'un logiciel comme Gimp. Par d&#233;faut, si on ne pr&#233;cise rien, on a : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=masque&lt;/code&gt; qui est le fonctionnement d&#233;j&#224; connu.&lt;br class='manualbr' /&gt;Les nouveaux modes sont :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=normal&lt;/code&gt; : on place l'image par dessus l'autre ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=eclaircir&lt;/code&gt; : on place uniquement les pixels plus clairs ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=obscurcir&lt;/code&gt; : on place uniquement les pixels plus fonc&#233;s ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=produit&lt;/code&gt; : on &#171; multiplie &#187; les pixels d'origine par les pixels du masque. De fait : les points noirs rendent l'image noire, les points blancs la laissent inchang&#233;e ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mode=difference&lt;/code&gt; : on remplit avec la diff&#233;rence entre les deux images.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Extension des filtres image au texte :&lt;/strong&gt;&lt;br class='manualbr' /&gt;Tous les filtres d'images peuvent &#234;tre appliqu&#233;s sur un fichier d'image, un tag &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img src='..' ../&gt;&lt;/code&gt; ou un texte complet (les filtres &#233;tant appliqu&#233;s alors sur chaque image trouv&#233;e). Il devient donc possible de faire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TEXTE|image_sepia)]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;D'autres filtres ont &#233;t&#233; introduits... liste &#224; compl&#233;ter.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Utilisateurs-avances&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Utilisateurs-avances'&gt;Utilisateurs avanc&#233;s&lt;a class='sommaire-back sommaire-back-7' href='#s-Utilisateurs-avances' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dossier &lt;tt&gt;formulaires/&lt;/tt&gt; :&lt;/strong&gt; &lt;br class='manualbr' /&gt;les formulaires personnalis&#233;s (pour la partie html) doivent maintenant &#234;tre plac&#233;s dans un sous-dossier &lt;tt&gt;formulaires/&lt;/tt&gt; de votre dossier de squelettes (ou de votre plugin). La partie php du formulaire peut, pour sa part, &#234;tre personnalis&#233;e dans le dossier &lt;tt&gt;balise/&lt;/tt&gt; du dossier de squelettes (ou du plugin).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Calculer un fond depuis l'espace priv&#233; :&lt;/strong&gt;&lt;br class='manualbr' /&gt;pour les d&#233;veloppeurs de plugins, une fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;recuperer_fond&lt;/code&gt; permet maintenant de calculer un squelette, y compris depuis un script de l'espace priv&#233;. C'est ce syst&#232;me qu'utilisent aussi bien la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt; que le syst&#232;me des mod&#232;les.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Variables dans le squelette&lt;/strong&gt;&lt;br class='manualbr' /&gt;De nouvelles balises apparaissent, qui permettent de faire des calculs &#224; l'int&#233;rieur des squelettes et d'affecter leur r&#233;sultat &#224; une &#171; variable &#187;, laquelle peut ensuite &#234;tre utilis&#233;e par ailleurs dans le m&#234;me squelette : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SET{toto, valeur}&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#GET{toto}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;fragment&#034;&gt;&lt;/a&gt;&lt;strong&gt;Rechargement partiel de page &lt;i&gt;(experimental)&lt;/i&gt; :&lt;/strong&gt;&lt;br class='manualbr' /&gt;toute boucle peut d&#233;finir un fragment de squelette rechargeable dynamiquement de facon asynchrone par le navigateur (ahah). Pour cela, il suffit d'utiliser le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{fragment}&lt;/code&gt; sur la boucle consid&#233;r&#233;e. Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt; implique par d&#233;faut le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{fragment}&lt;/code&gt;. Tout le contenu de la boucle (parties avant, principale, apr&#232;s ou alternative) est inclus dans un div portant la class fragment, et un id unique : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;div id=&#034;fragment_html_1c4f894574d730e016e980d91fa678ca_articles&#034; class=&#034;fragment&#034;&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt; ...&lt;/p&gt;
&lt;p&gt;En appelant l'url avec le param&#232;tre suppl&#233;mentaire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;var_fragment&lt;/code&gt; ayant pour valeur l'id d'une div fragment (ex : &amp;var_fragment=fragment_html_1c4f894574d730e016e980d91fa678ca_articles), le serveur ne retournera que ce fragment du squelette. Ainsi il est facile de recharger seulement une partie du squelette avec du javascript (AJAX/AHAH).&lt;/p&gt;
&lt;blockquote&gt;
&lt;i&gt;Remarque :&lt;/i&gt;&lt;br class='manualbr' /&gt;Cette fonctionalit&#233; est encore exp&#233;rimentale et &#233;voluera probablement dans les futures versions. Nous vous encourageons tout de m&#234;me &#224; l'essayer et donner vos impressions ou proposer du code d'am&#233;lioration pour cette fonction.
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mode tidy :&lt;/strong&gt;&lt;br class='manualbr' /&gt;Le mode XHTML Tidy (voir &lt;a href='https://www.spip.net/article3070.html'&gt;article 3070&lt;/a&gt;) n'est plus fourni en standard avec SPIP, et passe en plugin. Pour trois raisons :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ce code repose sur l'appel &#224; un binaire pas souvent disponible chez les h&#233;bergeurs &#8212; son mode php_tidy n'est toujours pas totalement fonctionnel ;&lt;/li&gt;&lt;li&gt; le moteur de SPIP compose d&#233;sormais en standard un code XHTML beaucoup plus satisfaisant, r&#233;duisant l'int&#233;r&#234;t de ce syst&#232;me ;&lt;/li&gt;&lt;li&gt; le d&#233;busqueur (ajouter &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;var_mode=debug&lt;/code&gt; dans l'URL de la page) offre un mode de validation signalant les balises invalides ainsi que les lignes du squelette qui les ont produites (ajouter &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$xhtml='spip_sax';&lt;/code&gt; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mes_options.php&lt;/code&gt; pour en b&#233;n&#233;ficier).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Documentation du code :&lt;/strong&gt;&lt;br class='manualbr' /&gt;Une documentation du code a &#233;t&#233; mise en place sur &lt;a href=&#034;http://doc.spip.org&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://doc.spip.org&lt;/a&gt;
&lt;br /&gt;- chaque fonction y est r&#233;ferenc&#233;e de facon automatique, et l'hypertexte fonctionne dans les deux sens (du code vers sa doc et vice-versa) ;
&lt;br /&gt;- le site est mis &#224; jour quotidiennement en fonction des modifications du code de la version de d&#233;veloppement (SVN) de SPIP.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Correctifs&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Correctifs'&gt;Correctifs&lt;a class='sommaire-back sommaire-back-7' href='#s-Correctifs' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;De nombreux bugs ont &#233;t&#233; corrig&#233;s (notamment sur la syndication, le cache des images typographiques, le menu de langues), pour plus de d&#233;tails voir notre site de d&#233;veloppement &lt;a href=&#034;http://trac.rezo.net/trac/spip/report/6&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://trac.rezo.net/trac/spip/report/6&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Compatibilit&#233; avec les h&#233;bergements free et club-internet.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;t&#034;&gt;&lt;h2 class=&#034;h2&#034; id='t'&gt; * * * &lt;a class='sommaire-back sommaire-back-7' href='#s-t' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;Si vous faites une mise &#224; jour de votre site depuis une version ancienne de SPIP, lisez aussi l'article sur &lt;a href='https://www.spip.net/fr_article3368.html' class=&#034;spip_in&#034;&gt;SPIP 1.9&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;A lire &#233;galement :
&lt;br /&gt;&#8212; &lt;a href='https://www.spip.net/fr_article1318.html' class=&#034;spip_in&#034;&gt;Effectuer une mise &#224; jour&lt;/a&gt;
&lt;br /&gt;&#8212; &lt;a href='https://www.spip.net/en_article3370.html'&gt;article 3370&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme d'habitude, en cas de difficult&#233; vous trouverez de l'aide sur la liste spip@rezo.net ou sur les &lt;a href=&#034;http://forum.spip.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;forums de SPIP&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
