<?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=180&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>Les outils utilis&#233;s pour le d&#233;veloppement</title>
		<link>https://www.spip.net/fr_article6924.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6924.html</guid>
		<dc:date>2025-01-14T06:58:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>bricebou, b_b, James, Ma&#239;eul, Matthieu Marcillaud, placido, tofulm</dc:creator>



		<description>
&lt;p&gt;L'&#233;quipe de maintenance utilise ces outils pour maintenir et d&#233;velopper SPIP. Cet article r&#233;sume succinctement le r&#244;le des outils et les liens de documentation. &lt;br class='autobr' /&gt; |Nom de l'outil|R&#244;le|Documentation sp&#233;cifique &#224; la communaut&#233; SPIP| D&#233;veloppement c&#244;t&#233; serveur ou back-end PHP Langage dans lequel SPIP est &#233;crit c&#244;t&#233; serveur PHPdoc Commentaire du code Composer Installer les biblioth&#232;ques de code (library) dont le projet principal a besoin Qualit&#233; de code Easy Coding Standard (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique809.html" rel="directory"&gt;Outils de d&#233;veloppement&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;L'&#233;quipe de maintenance utilise ces outils pour maintenir et d&#233;velopper SPIP. Cet article r&#233;sume succinctement le r&#244;le des outils et les liens de documentation.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id7894_c0'&gt;Nom de l'outil&lt;/th&gt;&lt;th id='id7894_c1'&gt;R&#244;le&lt;/th&gt;&lt;th id='id7894_c2'&gt;Documentation sp&#233;cifique &#224; la communaut&#233; SPIP&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='3'&gt;&lt;strong&gt;D&#233;veloppement c&#244;t&#233; serveur ou &lt;i&gt;back-end&lt;/i&gt; &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://www.php.net/manual/fr&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PHP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Langage dans lequel SPIP est &#233;crit c&#244;t&#233; serveur&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://docs.phpdoc.org/guide/getting-started/index.html#getting-started&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PHPdoc&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Commentaire du code&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://getcomposer.org/doc&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Composer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Installer les biblioth&#232;ques de code (library) dont le projet principal a besoin&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='3'&gt;&lt;strong&gt;Qualit&#233; de code&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://github.com/easy-coding-standard/easy-coding-standard&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Easy Coding Standard&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Automatiser le respect des r&#233;gles de codages&lt;/td&gt;
&lt;td&gt;&lt;a href='https://www.spip.net/fr_article7086.html' class=&#034;spip_in&#034;&gt;Utiliser ECS&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://getrector.com/documentation&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Rector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Corriger du code historique pour le rendre plus durable&lt;/td&gt;
&lt;td&gt;&lt;a href='https://www.spip.net/fr_article7090.html' class=&#034;spip_in&#034;&gt;Utiliser Rector&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://www.php-fig.org/psr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PSR&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bonne pratiques de codage&lt;/td&gt;
&lt;td&gt;&lt;a href='https://www.spip.net/fr_rubrique783.html' class=&#034;spip_in&#034;&gt;Conventions&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://phpunit.de/documentation.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PHPUnit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tester le code&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://phpstan.org/user-guide/getting-started&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PHPStan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Analyser le code&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://refactoring.guru/design-patterns/php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Refactoring Guru&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inspiration pour transformer le code proc&#233;dural historique en code POO et pour gagner en robustesse&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://12factor.net/fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;The Twelve-Factor App&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inspiration : une m&#233;thodologie pour concevoir des logiciels en tant que service&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='3'&gt;&lt;strong&gt;D&#233;veloppement c&#244;t&#233; navigateur ou &lt;i&gt;front-end&lt;/i&gt; &lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://javascript.info/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Javascript&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Langage pour l'affichage dynamique de fragments de page (front-end)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://api.jquery.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;jQuery&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Biblioth&#232;que longtemps rest&#233;e comme r&#233;f&#233;rence (en voie de migration)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://docs.npmjs.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;npm&lt;/a&gt; + &lt;a href=&#034;https://bun.sh/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Bun&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Installer des modules ou biblioth&#232;ques de code (library)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='3'&gt;&lt;strong&gt;Qualit&#233; de code&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td&gt;&lt;a href=&#034;https://bun.sh/docs/cli/test&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;bun:test&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tester le code&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td&gt;&lt;a href=&#034;https://biomejs.dev/guides/getting-started/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;biomejs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Normaliser le code (linter)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id8889_c0' colspan='3'&gt;Versionnage&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8889_c0'&gt;&lt;a href=&#034;https://git-scm.com/doc&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Git&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Suivi de version de code&lt;/td&gt;
&lt;td&gt;&lt;a href=&#034;https://git-scm.com/book/fr/v2&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Consulter un livre en fran&#231;ais&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8889_c0'&gt;&lt;a href=&#034;https://about.gitlab.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Gitlab&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Plateforme de d&#233;veloppement&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8889_c0'&gt;&lt;a href=&#034;https://semver.org/lang/fr/spec/v2.0.0.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;S&#233;mantique&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Comment fonctionnent les versions de SPIP et de ses d&#233;pendances&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8889_c0'&gt;&lt;a href=&#034;https://www.conventionalcommits.org/fr/v1.0.0/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Conventionnel commit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Des messages des commits signifiants, lisibles pour l'humain&lt;/td&gt;
&lt;td&gt;Voir aussi &lt;a href='https://www.spip.net/fr_article6824.html' class=&#034;spip_in&#034;&gt;&#201;crire un message de commit&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8889_c0'&gt;&lt;a href=&#034;https://keepachangelog.com/fr/1.0.0/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Changelog&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Permettre de voir pr&#233;cis&#233;ment quels changements notables ont &#233;t&#233; faits entre chaque publication (release) d'un projet&lt;/td&gt;
&lt;td&gt;Voir aussi &lt;a href='https://www.spip.net/fr_article6825.html' class=&#034;spip_in&#034;&gt;Tenir un CHANGELOG&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Nous d&#233;veloppons et utilisons aussi nos propres outils :&lt;/p&gt;
&lt;p&gt;- &lt;a href=&#034;https://git.spip.net/spip-contrib-outils/spip-releases&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip-releases&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;https://git.spip.net/spip-league/easy-coding-standard&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip-league/ecs&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;https://git.spip.net/spip-league/rector&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip-league/rector&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;https://git.spip.net/spip-league/sdk&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip-league/sdk&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP 4.1</title>
		<link>https://www.spip.net/fr_article6708.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6708.html</guid>
		<dc:date>2022-03-25T13:39:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b_b, James, JLuc, Matthieu Marcillaud</dc:creator>



		<description>&lt;p&gt;Changements apport&#233;s par SPIP 4.1&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 4.1 est avant tout une version qui suit les versions maintenues de PHP (7.4 &#224; 8.1) et met &#224; jour diff&#233;rentes librairies utilis&#233;es en interne. Il modifie aussi le syst&#232;me d'authentification des auteurs.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-25&#034; id=&#034;nav69e198d92a4740.93247543&#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-Compatibilite-PHP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Compatibilite-PHP&#034; class=&#034;spip_ancre&#034;&gt;Compatibilit&#233; PHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Compatibilite-PHP-8-1&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Compatibilite-PHP-8-1&#034; class=&#034;spip_ancre&#034;&gt;Compatibilit&#233; PHP 8.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Authentification-amp-Chiffrement&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Authentification-amp-Chiffrement&#034; class=&#034;spip_ancre&#034;&gt;Authentification &amp; Chiffrement&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Le-formulaire-de-login&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-formulaire-de-login&#034; class=&#034;spip_ancre&#034;&gt;Le formulaire de login&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Poivre-sel-hash-du-mot-de-passe&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Poivre-sel-hash-du-mot-de-passe&#034; class=&#034;spip_ancre&#034;&gt;Poivre, sel, hash du mot de passe&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Cles-de-chiffrement&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Cles-de-chiffrement&#034; class=&#034;spip_ancre&#034;&gt;Cl&#233;s de chiffrement&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Password&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Password&#034; class=&#034;spip_ancre&#034;&gt;Password&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Chiffrement&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Chiffrement&#034; class=&#034;spip_ancre&#034;&gt;Chiffrement&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Signature-des-actions&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Signature-des-actions&#034; class=&#034;spip_ancre&#034;&gt;Signature des actions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Qualite-du-code&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Qualite-du-code&#034; class=&#034;spip_ancre&#034;&gt;Qualit&#233; du code&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Typage&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Typage&#034; class=&#034;spip_ancre&#034;&gt;Typage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sucre-syntaxique&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sucre-syntaxique&#034; class=&#034;spip_ancre&#034;&gt;Sucre syntaxique&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Changements-d-API-sur-les-URLs-et-objets&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Changements-d-API-sur-les-URLs-et-objets&#034; class=&#034;spip_ancre&#034;&gt;Changements d'API sur les URLs et objets&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Encodage&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Encodage&#034; class=&#034;spip_ancre&#034;&gt;Encodage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Decodage&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Decodage&#034; class=&#034;spip_ancre&#034;&gt;D&#233;codage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Objet&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Objet&#034; class=&#034;spip_ancre&#034;&gt;Objet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Reecriture-de-en-api&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Reecriture-de-en-api&#034; class=&#034;spip_ancre&#034;&gt;R&#233;&#233;criture de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;transmettre&lt;/code&gt; en .api&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Mises-a-jour-des-librairies&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Mises-a-jour-des-librairies&#034; class=&#034;spip_ancre&#034;&gt;Mises &#224; jour des librairies&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Javascript&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Javascript&#034; class=&#034;spip_ancre&#034;&gt;Javascript&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-PHP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#PHP&#034; class=&#034;spip_ancre&#034;&gt;PHP&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Suppression-de-librairies&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Suppression-de-librairies&#034; class=&#034;spip_ancre&#034;&gt;Suppression de librairies&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Interface&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Interface&#034; class=&#034;spip_ancre&#034;&gt;Interface&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Nettoyages&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Nettoyages&#034; class=&#034;spip_ancre&#034;&gt;Nettoyages&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Quelques-adaptations&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Quelques-adaptations&#034; class=&#034;spip_ancre&#034;&gt;Quelques adaptations&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;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Compatibilite-PHP&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Compatibilite-PHP'&gt; Compatibilit&#233; PHP &lt;a class='sommaire-back sommaire-back-25' href='#s-Compatibilite-PHP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;SPIP 4.1&lt;/strong&gt; n&#233;cessite PHP 7.4 minimum, et fonctionne jusqu'&#224; PHP 8.1.&lt;br class='autobr' /&gt;
Il n&#233;cessite les extensions PHP : sodium, Zlib, Zip et Phar.&lt;/p&gt;
&lt;p&gt;Rappel : &lt;strong&gt;SPIP 4.0&lt;/strong&gt; c'est PHP 7.3 &#224; 8.0.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Compatibilite-PHP-8-1&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Compatibilite-PHP-8-1'&gt; Compatibilit&#233; PHP 8.1 &lt;a class='sommaire-back sommaire-back-25' href='#s-Compatibilite-PHP-8-1' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour la compatibilit&#233; PHP 8.1, nous avons du corriger / adapter de nombreuses fonctions.&lt;/p&gt;
&lt;p&gt;Cela concerne particuli&#232;rement des appels &#224; des fonctions de PHP traitant des cha&#238;nes de caract&#232;res, si elles re&#231;oivent &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;null&lt;/code&gt; au lieu d'une cha&#238;ne, pour &#233;viter des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;deprecated&lt;/code&gt; : &lt;a href=&#034;https://php.watch/versions/8.1/internal-func-non-nullable-null-deprecation&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://php.watch/versions/8.1/internal-func-non-nullable-null-deprecation&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;Authentification-amp-Chiffrement&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Authentification-amp-Chiffrement'&gt; Authentification &amp; Chiffrement &lt;a class='sommaire-back sommaire-back-25' href='#s-Authentification-amp-Chiffrement' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous reprenons en l'adaptant le travail de g0uz sur le plugin &lt;a href=&#034;https://git.spip.net/spip-contrib-extensions/chiffrer&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Chiffrer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;- Cela corrige certains rares cas o&#249; la librairie Javascript utilis&#233;e jusqu'&#224; pr&#233;sent &#233;chouait dans l'identification de l'internaute
&lt;br /&gt;- Cela renforce la s&#233;curit&#233; en &#233;vitant certains types d'attaques.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Le-formulaire-de-login&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Le-formulaire-de-login'&gt; Le formulaire de login &lt;a class='sommaire-back sommaire-back-25' href='#s-Le-formulaire-de-login' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;HTTPS est d&#233;sormais encore plus fortement conseill&#233;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En effet, SPIP ne cherche plus &#224; chiffrer le mot de passe des auteurs en Javascript depuis le formulaire de login, et le mot de passe arrive donc syst&#233;matiquement &#171; en clair &#187; &#224; SPIP. Il est donc fortement conseill&#233; d'avoir son site en HTTPS, car HTTPS assure alors la s&#233;curit&#233; de la transmission.&lt;/p&gt;
&lt;p&gt;En cons&#233;quence, la constante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_AUTORISER_AUTH_FAIBLE&lt;/code&gt;, qui permettait de forcer l'envoi du mot de passe en clair, est supprim&#233;e.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Poivre-sel-hash-du-mot-de-passe&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Poivre-sel-hash-du-mot-de-passe'&gt; Poivre, sel, hash du mot de passe &lt;a class='sommaire-back sommaire-back-25' href='#s-Poivre-sel-hash-du-mot-de-passe' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Le mot de passe d'un auteur est maintenant hach&#233; dans SPIP en utilisant un poivre (une cl&#233; sp&#233;cifique pour le site). Par ailleurs, la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;password_hash&lt;/code&gt; de PHP s'occupe de trouver le meilleur algorithme de hachage et de cr&#233;er un sel dedans. La fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;password_verify&lt;/code&gt; de PHP est utilis&#233;e pour le v&#233;rifier.&lt;/p&gt;
&lt;p&gt;Les &#034;al&#233;as&#034; rotatifs des auteurs sont toujours cr&#233;&#233;s, mais ne sont plus utilis&#233;s pour saler le mot de passe vu que PHP g&#232;re cela tr&#232;s bien. Par contre, l'application suppl&#233;mentaire d'un poivre est une nouveaut&#233;.&lt;/p&gt;
&lt;p&gt;Comme avant, &#224; chaque authentification r&#233;ussie d'un auteur, on enregistre un nouveau hash en base, en recr&#233;ant un hash avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;password_hash&lt;/code&gt; : cela applique un nouveau sel dessus donc, et &#233;ventuellement PHP en profite pour utiliser un algorithme de hachage plus performant si besoin.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Cles-de-chiffrement&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Cles-de-chiffrement'&gt; Cl&#233;s de chiffrement &lt;a class='sommaire-back sommaire-back-25' href='#s-Cles-de-chiffrement' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pour mener &#224; bien ce poivre, et d'autres actions dans SPIP, des cl&#233;s de chiffrement sont utilis&#233;es et stock&#233;es dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/cles.php&lt;/code&gt;. Il y en a 2 par d&#233;faut :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; secret_des_auth : elle sert &#224; poivrer le mot de passe des auteurs. C'est une nouvelle cl&#233; donc.&lt;/li&gt;&lt;li&gt; secret_du_site : elle sert pour moiti&#233; &#224; calculer le secret du site. L'autre moiti&#233; &#233;tant stock&#233; en base dans l'entr&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;secret_du_site&lt;/code&gt; de la table &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_meta&lt;/code&gt;. Ce secret du site (combin&#233;) permet de signer et/ou chiffrer certaines parties de SPIP (contextes ajax, actions d'auteurs).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Lorsqu'un webmestre se connecte, les cl&#233;s sont sauvegard&#233;es dans le nouveau champ &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;backup_cles&lt;/code&gt; de la table &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_auteurs&lt;/code&gt;, en le chiffrant avec le mot de passe en clair de l'auteur.&lt;/p&gt;
&lt;p&gt;Ceci permet de restaurer les cl&#233;s du site si le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cles.php&lt;/code&gt; a &#233;t&#233; effac&#233;, lors de l'authentification d'un webmestre.&lt;/p&gt;
&lt;p&gt;La classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;\Spip\Chiffrer\SpipCles&lt;/code&gt; permet de manipuler les cl&#233;s au besoin.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Password&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Password'&gt; Password &lt;a class='sommaire-back sommaire-back-25' href='#s-Password' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;SPIP fournit deux m&#233;thodes qui sont utilis&#233;es dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/auth/spip.php&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;\Spip\Chiffrer\Password::verifier($clair, $hash, $key = null): bool&lt;/code&gt; &lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;\Spip\Chiffrer\Password::hacher($clair, $key = null): string&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La cl&#233; par d&#233;faut est celle de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;secret_des_auth&lt;/code&gt;, utilis&#233;e pour poivrer.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Chiffrement&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Chiffrement'&gt; Chiffrement &lt;a class='sommaire-back sommaire-back-25' href='#s-Chiffrement' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Trois m&#233;thodes sont aussi fournies pour chiffrer et d&#233;chiffrer (chiffrage sym&#233;trique) des contenus.&lt;br class='autobr' /&gt;
Dedans nous utilisons la librairie Sodium (fournie par d&#233;faut dans PHP &gt;= 7.2).&lt;/p&gt;
&lt;p&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Chiffrement::chiffrer($message, $key): ?string&lt;/code&gt; &lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Chiffrement::dechiffrer($encoded, $key): ?string&lt;/code&gt;
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Chiffrement::keygen(): string&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La m&#233;thode &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;keygen&lt;/code&gt; produit simplement une cl&#233; de chiffrement &#224; la longueur adapt&#233;e.&lt;/p&gt;
&lt;p&gt;Les m&#233;thodes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;chiffrer()&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dechiffrer()&lt;/code&gt; seront tr&#232;s lentes si la cl&#233; transmise n'a pas la bonne longueur : on consid&#232;re alors la cl&#233; de chiffrement comme &#233;tant un mot de passe n&#233;cessitant un traitement suppl&#233;mentaire lourd (avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sodium_crypto_pwhash&lt;/code&gt;).&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Signature-des-actions&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Signature-des-actions'&gt; Signature des actions &lt;a class='sommaire-back sommaire-back-25' href='#s-Signature-des-actions' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Les actions sont authentifi&#233;es maintenant en utilisant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;hash_hmac&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;hash_equals&lt;/code&gt; (et les al&#233;as d'auteurs et/ou le secret du site)&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;Qualite-du-code&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Qualite-du-code'&gt; Qualit&#233; du code &lt;a class='sommaire-back sommaire-back-25' href='#s-Qualite-du-code' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il y a de quoi progresser sur la qualit&#233; du code PHP de SPIP&#8230; l'avenir ne peut &#234;tre que meilleur ;-)&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Typage&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Typage'&gt; Typage &lt;a class='sommaire-back sommaire-back-25' href='#s-Typage' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ce faisant pour PHP 8.1, nous avons commenc&#233; &#224; typer certains arguments et retours de fonctions pour d&#233;tecter au plus t&#244;t certains appels incorrects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C'est un changement potentiellement impactant&lt;/strong&gt; : cela peut cr&#233;er des erreurs de squelettes l&#224; o&#249; l'erreur &#233;tait auparavant plus silencieuse ou tol&#233;r&#233;e. De m&#234;me cela pourrait provoquer des erreurs PHP dans des plugins ou des scripts maison sur les appels erron&#233;s &#224; ces fonctions.&lt;/p&gt;
&lt;p&gt;En assurant la compatibilit&#233; avec les nouvelles versions de PHP nous irons forc&#233;ment vers plus de typage dans le code de SPIP au fur et &#224; mesure des &#233;volutions et factorisations du code source.&lt;/p&gt;
&lt;p&gt;La cons&#233;quence sera donc que les personnes d&#233;veloppant des plugins ou des squelettes devront &#234;tre plus vigilantes sur les appels effectu&#233;s d'une part, et d'autre part que nous restreindrons certainement les nouvelles fonctions &#224; des types uniques (&#233;viter les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mixed&lt;/code&gt;), de m&#234;me que certaines fonctions d&#233;j&#224; existantes verront probablement certains types d'arguments mixtes r&#233;duits (&#233;viter qu'un argument puisse recevoir un peu tout comme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;int | string | array&lt;/code&gt; par exemple), de m&#234;me pour les retours de fonctions.&lt;/p&gt;
&lt;p&gt;Au vu du code de SPIP historique ce ne sera pas si &#233;vident.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Sucre-syntaxique&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Sucre-syntaxique'&gt; Sucre syntaxique &lt;a class='sommaire-back sommaire-back-25' href='#s-Sucre-syntaxique' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nous avons pass&#233; l'outil &lt;a href=&#034;https://github.com/rectorphp/rector&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Rector&lt;/a&gt; sur le code de SPIP 4.1 avec la configuration PHP 7.4. L'outil permet de transformer la syntaxe du code source PHP en modifiant certains &#233;l&#233;ments qui peuvent &#234;tre simplifi&#233;s gr&#226;ce &#224; des &#233;critures plus r&#233;centes de PHP. Par exemple utiliser les op&#233;rateurs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;??&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;??=&lt;/code&gt; lorsque c'est possible (&lt;a href=&#034;https://www.php.net/manual/fr/migration70.new-features.php#migration70.new-features.null-coalesce-op&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Voir la doc PHP&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;C'est toujours &#231;a de pris :-)&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;urls_etendues&#034;&gt;&lt;/a&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;Changements-d-API-sur-les-URLs-et-objets&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Changements-d-API-sur-les-URLs-et-objets'&gt; Changements d'API sur les URLs et objets &lt;a class='sommaire-back sommaire-back-25' href='#s-Changements-d-API-sur-les-URLs-et-objets' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Certaines fonctions d'appels pour calculer ou d&#233;coder les URLs sont modifi&#233;es. &lt;br class='autobr' /&gt;
Les anciennes API sont d&#233;pr&#233;ci&#233;es.&lt;/p&gt;
&lt;p&gt;Il y a maintenant 2 jeux de fonctions distincts pour g&#233;n&#233;rer l'URL d'un objet et pour d&#233;coder une URL. Ce nouveau m&#233;canisme permet de d&#233;finir une fonction pour g&#233;n&#233;rer une URL propre pour les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#URL_PAGE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Les nouvelles fonctions sont typ&#233;es. Dans les explications suivantes, on ne pr&#233;sente que le d&#233;but des signatures des diff&#233;rentes fonctions modifi&#233;es.&lt;/p&gt;
&lt;p&gt;Voir &lt;a href=&#034;https://git.spip.net/spip/spip/-/merge_requests/5000&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la demande d'ajout correspondante&lt;/a&gt; pour le d&#233;tail complet.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Encodage&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Encodage'&gt; Encodage &lt;a class='sommaire-back sommaire-back-25' href='#s-Encodage' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;generer_objet_url&lt;/strong&gt; (anciennement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_entite&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;Cette fonction g&#233;n&#232;re une URL, qui peut &#234;tre soit pour l'espace public (param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$public = true&lt;/code&gt;), soit pour l'espace priv&#233; (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$public = false&lt;/code&gt;), soit par d&#233;faut (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$public = null&lt;/code&gt;) retourner une URL pour l'espace dans lequel on se trouve actuellement &#8230;&lt;/p&gt;
&lt;p&gt;La fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_objet_url()&lt;/code&gt; est la fonction de haut niveau, qui va finir par appeler une fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls_xxx_generer_url_objet()&lt;/code&gt;_dist selon le module d'URL actif.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Note :&lt;/i&gt; Pour cette fonction la signature change l&#233;g&#232;rement.&lt;/p&gt;
&lt;p&gt;Dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_entite()&lt;/code&gt; maintenant d&#233;pr&#233;ci&#233; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le 5&lt;sup&gt;e&lt;/sup&gt; param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$public&lt;/code&gt; pouvait valoir &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;true, false, null ou 'string'&lt;/code&gt;. Dans le cas d'une chaine, il correspondait &#224; un param&#232;tre &#034;connect&#034;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce sont maintenant 2 param&#232;tres s&#233;par&#233;s pour &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_objet_url&lt;/code&gt; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le 5&lt;sup&gt;e&lt;/sup&gt; est &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?bool $public = null&lt;/code&gt; (donc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;true, false ou null)&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; le 6&lt;sup&gt;e&lt;/sup&gt; est &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;string $connect = ''&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans la majorit&#233; des cas, cela n'affectera pas les usages et renommer simplement la fonction devrait &#234;tre suffisant.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- generer_url_entite($id, $objet, ...) + generer_objet_url($id, string $objet, ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;generer_objet_url_absolue&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;G&#233;n&#232;re l'URL absolue vers un objet&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- generer_url_entite_absolue($id, $entite, ...) + generer_objet_url_absolue($id = 0, string $entite = '', ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Decodage&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Decodage'&gt; D&#233;codage &lt;a class='sommaire-back sommaire-back-25' href='#s-Decodage' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La fonction de d&#233;codage des URLs s'appelle maintenant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls_xxxx_decoder_url_dist()&lt;/code&gt; ce qui &#233;vite toute confusion avec l'ancienne fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls_xxxx_dist()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;De plus, pour un module d'URLs qui voudrait &#234;tre compatible avec les anciennes versions de SPIP et cette nouvelle convention, il suffit de proposer une fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls_xxxx_dist()&lt;/code&gt; non typ&#233;e qui fait le routage vers les 2 fonctions &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;urls_xxx_generer_url_objet_dist()&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;decoder_url()&lt;/code&gt; du module.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Objet&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Objet'&gt; Objet &lt;a class='sommaire-back sommaire-back-25' href='#s-Objet' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;generer_objet_lien&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;G&#233;n&#232;re un lien (titre cliquable vers url) vers un objet&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- generer_lien_entite($id_objet, $objet, ...) + generer_objet_lien(int $id_objet, string $objet, ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;generer_objet_info&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Donner une information sur un objet &#233;ditorial. Utilis&#233; entre autres par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INFO_XX&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- generer_info_entite($id_objet, $type_objet, $info, ...) + generer_objet_info($id_objet, string $type_objet, string $info, ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les fonctions permettant de d&#233;finir des calculs sp&#233;cifiques pour l'obtention d'information sont aussi renomm&#233;es. Pour l'information calcul&#233;e 'xxx' : appel&#233; via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_objet_info(3, 'article', 'xxx')&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INFO_XXX{article,3}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si ces fonctions existent, elles sont utilis&#233;es par SPIP dans ce cas :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// xxx sp&#233;cifiquement sur l'objet 'type' - generer_xxx_{type}($id_objet, $type_objet, ...) + generer_{type}_xxx($id_objet, string $type_objet, ...) // sinon xxx sur un objet quelconque - generer_xxx_entite($id_objet, $type_objet, $row, ...) + generer_objet_xxx($id_objet, string $type_objet, array $row, ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'ancien nommage est d&#233;pr&#233;ci&#233;.&lt;/p&gt;
&lt;p&gt;Suivant ce principe, la fonction interne &#224; SPIP pour calculer l'introduction a &#233;t&#233; renomm&#233;e :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;generer_objet_introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;G&#233;n&#232;re l'introduction de l'objet (fonction priv&#233;e &#224; SPIP), utilis&#233; par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INTRODUCTION&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INFO_INTRODUCTION&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- generer_introduction_entite($id_objet, $objet, $ligne_sql, ...) + generer_objet_introduction(int $id_objet, string $objet, array $ligne_sql, ...) &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/section&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Reecriture-de-en-api&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Reecriture-de-en-api'&gt; R&#233;&#233;criture de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;transmettre&lt;/code&gt; en .api &lt;a class='sommaire-back sommaire-back-25' href='#s-Reecriture-de-en-api' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour faciliter et s&#233;curiser partiellement l'envoi de donn&#233;es sp&#233;cifiques (CSV, JSON) &#224; des auteurs connus de SPIP, l'URL d'api transmettre.api a &#233;t&#233; mis en place (elle remplace un ancien m&#233;canisme &#224; l'objectif identique qui utilisait un squelette &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;transmettre.html&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;L'URL est g&#233;n&#233;r&#233;e avec la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;generer_url_api_low_sec()&lt;/code&gt; (&#171; low sec &#187; signifiant ici &#171; s&#233;curit&#233; basse &#187;). Un jeton fixe est cr&#233;&#233; pour cette action (avec ses param&#232;tres) pour l'auteur d&#233;sign&#233; et sera accept&#233;e m&#234;me si l'auteur est d&#233;connect&#233; (ce qui veut dire que quiconque poss&#232;de l'URL pourra acc&#233;der au contenu renvoy&#233;).&lt;/p&gt;
&lt;p&gt;Historiquement cela permet de g&#233;n&#233;rer des fichiers non publics (RSS des articles propos&#233;s &#224; publication, statistiques du site) qui peuvent &#234;tre exploit&#233;s par des outils tierces (agr&#233;gateur RSS par exemple).&lt;/p&gt;
&lt;p&gt;&#201;galement :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;securiser_acces()&lt;/code&gt; est renommee en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;securiser_acces_low_sec()&lt;/code&gt; et definie dans inc/acces.&lt;/li&gt;&lt;li&gt; On garde un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre_securiser_acces_dist()&lt;/code&gt; dans inc/filtres pour la compat des vieux squelettes&lt;/li&gt;&lt;li&gt; la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;param_low_sec()&lt;/code&gt; est depreciee&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;Mises-a-jour-des-librairies&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Mises-a-jour-des-librairies'&gt; Mises &#224; jour des librairies &lt;a class='sommaire-back sommaire-back-25' href='#s-Mises-a-jour-des-librairies' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous avons mis &#224; jour diff&#233;rentes librairies utilis&#233;es par SPIP.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;Javascript&#034;&gt;&lt;h3 class=&#034;h3&#034; id='Javascript'&gt; Javascript &lt;a class='sommaire-back sommaire-back-25' href='#s-Javascript' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; spip/spip -&gt; Sortable 1.14.0&lt;/li&gt;&lt;li&gt; spip/spip -&gt; jquery Form 4.3.0&lt;/li&gt;&lt;li&gt; spip/spip -&gt; JS Cookie 3.0.1&lt;/li&gt;&lt;li&gt; spip/statistiques -&gt; d3 7.3.0&lt;/li&gt;&lt;li&gt; spip/statistiques -&gt; luxon 2.3.0&lt;/li&gt;&lt;li&gt; spip/plan -&gt; jstree 3.3.12&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau2 sommaire-section_h3&#034; aria-labelledby=&#034;PHP&#034;&gt;&lt;h3 class=&#034;h3&#034; id='PHP'&gt; PHP&lt;a class='sommaire-back sommaire-back-25' href='#s-PHP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; spip/compresseur -&gt; css-tidy 2.0.0&lt;/li&gt;&lt;li&gt; spip/medias -&gt; getid3 1.9.21&lt;/li&gt;&lt;li&gt; spip/medias -&gt; svg-sanitizer 0.14.1&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Suppression-de-librairies&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Suppression-de-librairies'&gt; Suppression de librairies &lt;a class='sommaire-back sommaire-back-25' href='#s-Suppression-de-librairies' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous avons supprim&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;jQuery.cookie&lt;/code&gt; qui &#233;tait d&#233;pr&#233;ci&#233; depuis SPIP 3.2 au profit de JS Cookie.&lt;/p&gt;
&lt;p&gt;Pour rappel si vous n'aviez pas encore adapt&#233;s vos utilisations :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;js&#034; class='spip_code spip_code_block language-js' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$.cookie(key) devient Cookies.get(key) $.cookie(key, value) devient Cookies.set(key, value) $.cookie(key, value, options) devient Cookies.set(key, value, options) &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;Interface&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Interface'&gt; Interface &lt;a class='sommaire-back sommaire-back-25' href='#s-Interface' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les rubriques dans l'espace priv&#233; affichent maintenant aussi la liste des articles refus&#233;s.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Nettoyages&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Nettoyages'&gt; Nettoyages &lt;a class='sommaire-back sommaire-back-25' href='#s-Nettoyages' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous avons supprim&#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;#FORMULAIRE_CONFIGURER_METAS &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;qui &#233;tait d&#233;pr&#233;ci&#233; depuis SPIP 3.0 au profit des formulaires&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;#FORMULAIRE_CONFIGURER_XX &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;. Voir la documentation &lt;a href='https://www.spip.net/fr_article5414.html' class=&#034;spip_in&#034;&gt;Configurer une fonctionnalit&#233; de votre site, ou un plugin&lt;/a&gt; &#224; ce sujet.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Quelques-adaptations&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Quelques-adaptations'&gt; Quelques adaptations &lt;a class='sommaire-back sommaire-back-25' href='#s-Quelques-adaptations' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dans un squelette, pour avoir la liste des tables des objets &#233;ditoriaux, pr&#233;f&#233;rer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#NULL&lt;/code&gt; (qui retourne &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;null&lt;/code&gt;) plut&#244;t que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#REM&lt;/code&gt; (qui retourne une cha&#238;ne vide).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;diff&#034; class='spip_code spip_code_block language-diff' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;- [(#REM|lister_tables_objets_sql)] + [(#NULL|lister_tables_objets_sql)] &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;Plugins&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Plugins'&gt; Plugins &lt;a class='sommaire-back sommaire-back-25' href='#s-Plugins' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Archiviste&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le plugin &#034;Archiviste&#034; a &#233;t&#233; mis &#224; jour pour utiliser les extensions PHP Zip, zlib et Phar, qui sont d&#233;sormais requises. Ceci nous a permis de supprimer les (tr&#232;s) vielles librairies Pcl* que nous tra&#238;nions depuis quelques ann&#233;es.&lt;/p&gt;
&lt;p&gt;&#192; noter aussi que le plugin est accompagn&#233; de tests unitaires &#233;crits avec &lt;a href=&#034;https://docs.phpunit.de/fr/latest/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PHPUnit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bigup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le formulaire de configuration de Bigup est affich&#233; sur la page des options avanc&#233;es, avec une formulation un peu plus parlante pour le titre du formulaire d'explication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compresseur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mise &#224; jour de la librairie CSSTidy en version 2.0 et correction d'un bug dans la compression des fichiers Javascript sur certains environnements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Forum&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'un bug qui affichait le lien vers la page de contr&#244;le des forums pour les auteurs non autoris&#233;s.&lt;/li&gt;&lt;li&gt; normalisation de l'ajout d'un forum en base afin de bien faire passer les informations par les pipeline pre/post insertion&lt;/li&gt;&lt;li&gt; correction d'un bug d'affichage d'ic&#244;ne en langue RTL&lt;/li&gt;&lt;li&gt; correction d'un bug qui permettait d'acc&#233;der au forum priv&#233; des r&#233;dacteurs alors que celui-ci &#233;tait d&#233;sactiv&#233; dans la configuration&lt;/li&gt;&lt;li&gt; correction d'un bug dans la recherche de message depuis la page de contr&#244;le des forums&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mediabox&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; am&#233;lioration de l'affichage des textes longs dans la l&#233;gende des modales, avec l'attribut &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;data-box-caption-state&lt;/code&gt; valant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;min&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;expanded&lt;/code&gt; sur les liens mediabox.&lt;/li&gt;&lt;li&gt; utilisation d'un th&#232;me sombre par d&#233;faut dans l'espace priv&#233;&lt;/li&gt;&lt;li&gt; r&#233;tablissement du support des URLs avec fragments &#224; l'aide d'un s&#233;lecteur dans l'attribut &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;data-href-popin&lt;/code&gt;&lt;/li&gt;&lt;li&gt; ajout du support des attributs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;data-box-(max|min)-(width|height)&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;data-box-(width|height)&lt;/code&gt; sur les liens mediabox et r&#233;tablissement de la compatibilit&#233; avec les anciennes classes du type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;boxInline boxIframe boxWidth-xx boxHeight-xx&lt;/code&gt; (documentation : &lt;a href=&#034;https://contrib.spip.net/MediaBox&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://contrib.spip.net/MediaBox&lt;/a&gt;)&lt;/li&gt;&lt;li&gt; correction d'un bug avec certaines images distantes qui n'&#233;taient pas affich&#233;es par la modale (notamment des SVG), car l'image n'a pas de dimension connue&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Medias&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; permettre de personnaliser le comportement en autolien des images en fonction du media, de l'extension, de la taille ou de l'id_document&lt;/li&gt;&lt;li&gt; correction d'un bug dans le mod&#232;le d'embed des fichiers CSV&lt;/li&gt;&lt;li&gt; retrait de la librairie obsol&#232;te jQuery multifile&lt;/li&gt;&lt;li&gt; mise &#224; jour des librairies SVG Sanitizer et getid3&lt;/li&gt;&lt;li&gt; retrait des pr&#233;fixes navigateurs dans les CSS du plugin&lt;/li&gt;&lt;li&gt; am&#233;lioration UX des boutons dans le bloc des documents d'un objet&lt;/li&gt;&lt;li&gt; correction d'un bug dans le code g&#233;n&#233;r&#233; pour les attributs d'une image avec l&#233;gende&lt;/li&gt;&lt;li&gt; am&#233;lioration du mod&#232;le utilis&#233; pour l'insertion des images SVG dans le texte d'un objet&lt;/li&gt;&lt;li&gt; correction d'un bug d'affichage de la m&#233;diath&#232;que quand un document comporte une tr&#232;s longue URL dans les champs titre ou credit&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mise &#224; jour de la librairie Jstree en version 3.3.12.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;visions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Correction d'un bug qui emp&#234;chait le fonctionnement du g&#233;nie d'optimisation des r&#233;visions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sites&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'un bug qui affichait la date en double dans les listes d'articles syndiqu&#233;s&lt;/li&gt;&lt;li&gt; am&#233;lioration des formulaires d'&#233;dition de site en utilisant un placeholder dans les champs d'URL (au lieu de les pr&#233;-remplir avec http://)&lt;/li&gt;&lt;li&gt; correction d'un bug d'affichage de la liste des sites en colonne lat&#233;rale de l'espace priv&#233;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Statistiques&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; mise &#224; jour des librairies D3.js, d3-time-format et Luxon.js&lt;/li&gt;&lt;li&gt; correction d'un bug d'affichage des noms des mois dans les statistiques en langue arabe&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;SVP&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'un bug dans le d&#233;ballage des archives de plugin avec les nouvelles fonctions du plugin Archiviste&lt;/li&gt;&lt;li&gt; am&#233;lioration de pr&#233;sentation des cases &#224; cocher dans la liste des plugins&lt;/li&gt;&lt;li&gt; correction d'un bug de s&#233;lection des plugins quand la personne faisait &#034;tout cocher&#034; puis &#034;cocher les mises &#224; jour&#034;&lt;/li&gt;&lt;li&gt; correction d'un bug dans l'affichage des messages de retour du formulaire de chargement de plugin&lt;/li&gt;&lt;li&gt; toujours afficher le lien vers la documentation du plugin qu'il soit actif ou non&lt;/li&gt;&lt;li&gt; correction d'un bug qui emp&#234;chait d'activer un plugin quand les t&#233;l&#233;chargements sont interdits&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;TextWheel&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'un bug qui &#233;chappait par erreur certains liens automatiques&lt;/li&gt;&lt;li&gt; correction d'un bug de direction d'affichage des puces quand la page contient des bloc de textes de directions diff&#233;rentes&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;URLs &#233;tendues&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour faire suite aux &lt;a href=&#034;#urls_etendues&#034; class=&#034;spip_ancre&#034;&gt;changements d'API sur les URLs et objets&lt;/a&gt;, les fonctions d'URLs ont &#233;t&#233; reprises pour une &#233;criture plus claire et mieux typ&#233;e avec 2 points d'entr&#233;e pour la partie d&#233;codage/encodage.&lt;/p&gt;
&lt;p&gt;Voir &lt;a href=&#034;https://git.spip.net/spip/urls/-/merge_requests/4811&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la demande d'ajout correspondante&lt;/a&gt; pour le d&#233;tail complet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Squelettes dist&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; correction d'un bug qui provoquait le d&#233;bordement des paginations sur petit &#233;cran&lt;/li&gt;&lt;li&gt; application du filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|header_silencieux&lt;/code&gt; sur les pages publiques afin de respecter la valeur de la globale &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_header_silencieux&lt;/code&gt;&lt;/li&gt;&lt;li&gt; retrait des classes sp&#233;cifiques &#224; Internet Explorer dans les CSS&lt;/li&gt;&lt;li&gt; correction d'un bug d'affichage des images et SVG sur petit &#233;cran&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Standard &#034;SPIP41&#034;</title>
		<link>https://www.spip.net/fr_article6682.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6682.html</guid>
		<dc:date>2021-09-02T10:54:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>



		<description>
&lt;p&gt;Le standard &#034;SPIP41&#034; est un ensemble de r&#232;gles utilisable avec l'outil PHP_CodeSniffer. &lt;br class='autobr' /&gt;
Celui-ci embarque les r&#232;gles de codage SCS1 et v&#233;rifie que le code est compatible avec les versions PHP 7.4, 8.0 et 8.1. &lt;br class='autobr' /&gt;
Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil spip/coding-standards.&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Le standard &#034;SPIP41&#034; est un ensemble de r&#232;gles utilisable avec l'outil PHP_CodeSniffer.&lt;/p&gt;
&lt;p&gt;Celui-ci embarque &lt;a href='https://www.spip.net/fr_article6677.html' class=&#034;spip_in&#034;&gt;les r&#232;gles de codage SCS1&lt;/a&gt; et v&#233;rifie que le code est compatible avec les versions PHP 7.4, 8.0 et 8.1.&lt;/p&gt;
&lt;p&gt;Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil &lt;a href=&#034;https://packagist.org/packages/spip/coding-standards&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip/coding-standards&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Standard &#034;SPIP40&#034;</title>
		<link>https://www.spip.net/fr_article6681.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6681.html</guid>
		<dc:date>2021-09-02T10:54:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>



		<description>
&lt;p&gt;Le standard &#034;SPIP40&#034; est un ensemble de r&#232;gles utilisable avec l'outil PHP_CodeSniffer. &lt;br class='autobr' /&gt;
Celui-ci embarque les r&#232;gles de codage SCS1 et v&#233;rifie que le code est compatible avec les versions PHP 7.3, 7.4 et 8.0. &lt;br class='autobr' /&gt;
Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil spip/coding-standards.&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Le standard &#034;SPIP40&#034; est un ensemble de r&#232;gles utilisable avec l'outil PHP_CodeSniffer.&lt;/p&gt;
&lt;p&gt;Celui-ci embarque &lt;a href='https://www.spip.net/fr_article6677.html' class=&#034;spip_in&#034;&gt;les r&#232;gles de codage SCS1&lt;/a&gt; et v&#233;rifie que le code est compatible avec les versions PHP 7.3, 7.4 et 8.0.&lt;/p&gt;
&lt;p&gt;Ce standard est disponible avec l'outil PHP_CodeSniffer dans l'extension de cet outil &lt;a href=&#034;https://packagist.org/packages/spip/coding-standards&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip/coding-standards&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Standard &#034;SCS1&#034;</title>
		<link>https://www.spip.net/fr_article6677.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6677.html</guid>
		<dc:date>2021-09-02T10:53:59Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>



		<description>&lt;p&gt;SPIP est soucieux de la qualit&#233; typographique des pages qu'il envoie aux clients HTTP, il est donc lui-m&#234;me soucieux de celle de ses propres fichiers.&lt;/p&gt;

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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-6&#034; id=&#034;nav69e198d9301561.15110813&#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-Fichiers&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fichiers&#034; class=&#034;spip_ancre&#034;&gt;Fichiers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Lignes-et-indentation&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Lignes-et-indentation&#034; class=&#034;spip_ancre&#034;&gt;Lignes et indentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Fonctions-Classes-et-Namespaces&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fonctions-Classes-et-Namespaces&#034; class=&#034;spip_ancre&#034;&gt;Fonctions, Classes et Namespaces&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Constantes-Variables-et-proprietes-de-classe&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Constantes-Variables-et-proprietes-de-classe&#034; class=&#034;spip_ancre&#034;&gt;Constantes, Variables et propri&#233;t&#233;s de classe&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Mots-cles-reserves-Structures-de-controle-et-operateurs&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Mots-cles-reserves-Structures-de-controle-et-operateurs&#034; class=&#034;spip_ancre&#034;&gt;Mots-cl&#233;s r&#233;serv&#233;s, Structures de contr&#244;le et op&#233;rateurs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Operations-sur-les-chaines-de-caracteres&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Operations-sur-les-chaines-de-caracteres&#034; class=&#034;spip_ancre&#034;&gt;Op&#233;rations sur les chaines de caract&#232;res&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Les r&#232;gles de codage s'appuient sur &lt;a href=&#034;http://www.php-fig.org/psr/psr-12/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la recommandation PSR-12&lt;/a&gt; sans la respecter enti&#232;rement. voir le d&#233;tail ci-dessous.&lt;/p&gt;
&lt;p&gt;Elles sont techniquement rassembl&#233;es dans un ensemble de r&#232;gles utilisables avec l'outil PHP_CodeSniffer dans l'extension de cet outil &lt;a href=&#034;https://packagist.org/packages/spip/coding-standards&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip/coding-standards&lt;/a&gt;.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Fichiers&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Fichiers'&gt;Fichiers&lt;a class='sommaire-back sommaire-back-6' href='#s-Fichiers' 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; La balise d'ouverture d'un fichier PHP &lt;strong&gt;DOIT&lt;/strong&gt; &#234;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;?php&lt;/code&gt;. L'ouverture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;?&lt;/code&gt; est proscrite.&lt;/li&gt;&lt;li&gt; L'encodage de caract&#232;res des fichiers PHP &lt;strong&gt;DOIT&lt;/strong&gt; &#234;tre &lt;strong&gt;UTF-8 sans BOM&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt; Tous les fichiers PHP &lt;strong&gt;DOIVENT&lt;/strong&gt; utiliser uniquement la fin de ligne Unix LF (linefeed).&lt;/li&gt;&lt;li&gt; Tous les fichiers PHP &lt;strong&gt;DOIVENT&lt;/strong&gt; se terminer par une ligne non vide, termin&#233;e par un seul LF.&lt;/li&gt;&lt;li&gt; La balise de fermeture &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?&gt;&lt;/code&gt; &lt;strong&gt;DOIT&lt;/strong&gt; &#234;tre omise des fichiers contenant uniquement du PHP.&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;Lignes-et-indentation&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Lignes-et-indentation'&gt;Lignes et indentation&lt;a class='sommaire-back sommaire-back-6' href='#s-Lignes-et-indentation' 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; Il NE DOIT PAS y avoir de limite stricte sur la longueur de la ligne.&lt;/li&gt;&lt;li&gt; La limite souple sur la longueur de ligne DOIT &#234;tre de 120 caract&#232;res.&lt;/li&gt;&lt;li&gt; Les lignes NE DEVRAIENT PAS d&#233;passer 80 caract&#232;res ; les lignes plus longues DEVRAIENT &#234;tre divis&#233;es en plusieurs lignes suivantes de 80 caract&#232;res chacune au maximum.&lt;/li&gt;&lt;li&gt; Il NE DOIT PAS y avoir d'espace &#224; la fin des lignes.&lt;/li&gt;&lt;li&gt; Des lignes vierges PEUVENT &#234;tre ajout&#233;es pour am&#233;liorer la lisibilit&#233; et pour indiquer les blocs de code associ&#233;s, sauf l&#224; o&#249; cela est explicitement interdit.&lt;/li&gt;&lt;li&gt; Il NE DOIT PAS y avoir plus d'une instruction par ligne.&lt;/li&gt;&lt;li&gt; Contrairement &#224; PSR-12, le code DOIT utiliser une tabulation pour chaque niveau de retrait et NE DOIT PAS utiliser d'espaces pour le retrait.&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;Fonctions-Classes-et-Namespaces&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Fonctions-Classes-et-Namespaces'&gt;Fonctions, Classes et Namespaces&lt;a class='sommaire-back sommaire-back-6' href='#s-Fonctions-Classes-et-Namespaces' 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; Dans les versions 4.x et ant&#233;rieures, SPIP ne suit pas de PSR d'autoloading (ex : &lt;a href=&#034;https://www.php-fig.org/psr/psr-4/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PSR-4&lt;/a&gt;. En cons&#233;quence, SCS1 n'impose aucun formalisme pour les namespaces et les classes, y compris les Traits et les interfaces.&lt;/li&gt;&lt;li&gt; Les fonctions DEVRAIENT &#234;tre d&#233;clar&#233;es en &lt;a href=&#034;https://fr.wikipedia.org/wiki/snake_case&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;snake_case&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; L'accolade ouvrante DOIT &#234;tre sur la m&#234;me ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace apr&#232;s.
&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;function ma_fonction() { $ma_variable = 0; // &#8230; return $mon_resultat; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&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;Constantes-Variables-et-proprietes-de-classe&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Constantes-Variables-et-proprietes-de-classe'&gt;Constantes, Variables et propri&#233;t&#233;s de classe&lt;a class='sommaire-back sommaire-back-6' href='#s-Constantes-Variables-et-proprietes-de-classe' 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; Les constantes DOIVENT &#234;tre d&#233;clar&#233;es en majuscules avec un tiret bas s&#233;parateur et pr&#233;fix&#233;es par un tiret bas.
&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('_NOUVELLE_CONSTANTE', true); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; Les variables et les arguments de fonctions DEVRAIENT &#234;tre d&#233;clar&#233;es en &lt;a href=&#034;https://fr.wikipedia.org/wiki/snake_case&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;snake_case&lt;/a&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;function ma_super_fonction($un_argument, $autre_argument) { &#8230; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; les propri&#233;t&#233;s de classe PEUVENT &#234;tre d&#233;clar&#233;es en &lt;a href=&#034;https://fr.wikipedia.org/wiki/snake_case&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;snake_case&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; Les variables globales, dont l'usage est d&#233;conseill&#233;, sont r&#233;f&#233;renc&#233;e par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS['xxx']&lt;/code&gt; et non par une d&#233;claration &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;global $xxx&lt;/code&gt;, car cela permet d'&#234;tre certain de la r&#233;f&#233;rence qu'on utilise et de facilement faire la diff&#233;rence lors de la lecture du code.
&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;if (isset($GLOBALS['meta']['adresse_site'])) { $adresse = $GLOBALS['meta']['adresse_site']; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&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;Mots-cles-reserves-Structures-de-controle-et-operateurs&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Mots-cles-reserves-Structures-de-controle-et-operateurs'&gt;Mots-cl&#233;s r&#233;serv&#233;s, Structures de contr&#244;le et op&#233;rateurs&lt;a class='sommaire-back sommaire-back-6' href='#s-Mots-cles-reserves-Structures-de-controle-et-operateurs' 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; Tous les mots-cl&#233;s et types r&#233;serv&#233;s PHP &lt;a href=&#034;https://www.php.net/manual/en/reserved.keywords.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;1&lt;/a&gt;&lt;a href=&#034;https://www.php.net/manual/en/reserved.other-reserved-words.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;2&lt;/a&gt; DOIVENT &#234;tre en minuscules.&lt;/li&gt;&lt;li&gt; Tous les nouveaux types et mots-cl&#233;s ajout&#233;s aux futures versions de PHP DOIVENT &#234;tre en minuscules.&lt;/li&gt;&lt;li&gt; La forme courte des mots-cl&#233;s de &#034;type&#034;, quand ils sont pr&#233;sents, DOIT &#234;tre utilis&#233;e, c'est-&#224;-dire bool au lieu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;boolean&lt;/code&gt;, int au lieu d'&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;integer&lt;/code&gt;, etc.&lt;/li&gt;&lt;li&gt; L'accolade ouvrante des structures de contr&#244;le DOIT &#234;tre sur la m&#234;me ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace apr&#232;s.&lt;/li&gt;&lt;li&gt; Dans les expressions PHP, laisser un espace de part et d'autre des op&#233;rateurs binaires (+, =, *, and, ...).
&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;$hypothenuse = sqrt(($a * $a) + ($b * $b)); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; Les op&#233;rateurs unaires (!, ...) doivent &#234;tre coll&#233;s au param&#232;tre auquel ils s'appliquent.&lt;/li&gt;&lt;li&gt; la notation courte DOIT &#234;tre appliqu&#233;e sur les tableaux
&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;$tableau = [ 'cle' =&gt; 'valeur', ... ]; &lt;/code&gt;&lt;/pre&gt;&lt;/div&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;Operations-sur-les-chaines-de-caracteres&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Operations-sur-les-chaines-de-caracteres'&gt;Op&#233;rations sur les chaines de caract&#232;res&lt;a class='sommaire-back sommaire-back-6' href='#s-Operations-sur-les-chaines-de-caracteres' 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; Utilisez les guillemets doubles uniquement quand cela est n&#233;cessaire. Si vous n'avez pas de variable ($var) ou de caract&#232;re de contr&#244;le (\n, \r, \t...) &#224; &#233;valuer dans la cha&#238;ne, utilisez les guillemets simples.
&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;$chaine = &#034;&lt;a href=\&#034;$url\&#034;&gt;Lien&lt;/a&gt;\n&#034;; $chaine2 = 'Une simple phrase : ' . $autre_chose; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Branches en fin de vie</title>
		<link>https://www.spip.net/fr_article6652.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6652.html</guid>
		<dc:date>2021-06-05T08:18:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>


		<dc:subject>version</dc:subject>

		<description>
&lt;p&gt;Cette page r&#233;pertorie la date de fin de vie de chaque branche non prise en charge de SPIP. Si vous utilisez ces versions, il vous est fortement conseill&#233; de passer &#224; une version actuelle, car l'utilisation d'anciennes versions peut vous exposer &#224; des vuln&#233;rabilit&#233;s de s&#233;curit&#233; et des bogues qui ont &#233;t&#233; corrig&#233;s dans des versions plus r&#233;centes de SPIP. Branche Fin de vie Derni&#232;re publication Compatibilit&#233; PHP 4.3 21 d&#233;cembre 2025 4.3.9 7.4 - (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique155.html" rel="directory"&gt;&#201;volutions et mises &#224; jour&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Cette page r&#233;pertorie la date de fin de vie de chaque branche non prise en charge de SPIP. Si vous utilisez ces versions, il vous est fortement conseill&#233; de passer &#224; une version actuelle, car l'utilisation d'anciennes versions peut vous exposer &#224; des vuln&#233;rabilit&#233;s de s&#233;curit&#233; et des bogues qui ont &#233;t&#233; corrig&#233;s dans des &lt;a href='https://www.spip.net/fr_article6500.html' class=&#034;spip_in&#034;&gt;versions plus r&#233;centes&lt;/a&gt; de SPIP.&lt;/p&gt;
&lt;hr class=&#034;spip&#034; /&gt;&lt;table class=&#034;spip&#034;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Branche&lt;/th&gt; &lt;th&gt;Fin de vie&lt;/th&gt; &lt;th&gt;Derni&#232;re publication&lt;/th&gt; &lt;th&gt;Compatibilit&#233; PHP&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;4.3&lt;/td&gt; &lt;td&gt; 21 d&#233;cembre 2025 &lt;/td&gt; &lt;td&gt;4.3.9&lt;/td&gt; &lt;td&gt;7.4 - 8.4&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;4.2&lt;/td&gt; &lt;td&gt; 14 f&#233;vrier 2025 &lt;/td&gt; &lt;td&gt;4.2.17&lt;/td&gt; &lt;td&gt;7.4 - 8.3&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;4.1&lt;/td&gt; &lt;td&gt; 23 janvier 2025 &lt;/td&gt; &lt;td&gt;4.1.20&lt;/td&gt; &lt;td&gt;7.4 - 8.1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;4.0&lt;/td&gt; &lt;td&gt; 23 f&#233;vrier 2023 &lt;/td&gt; &lt;td&gt;4.0.11&lt;/td&gt; &lt;td&gt;7.3 - 8.0&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;3.2&lt;/td&gt; &lt;td&gt; 23 f&#233;vrier 2023 &lt;/td&gt; &lt;td&gt;3.2.19&lt;/td&gt; &lt;td&gt;5.4 - 7.4&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;3.1&lt;/td&gt; &lt;td&gt; 9 juillet 2021 &lt;/td&gt; &lt;td&gt;3.1.15&lt;/td&gt; &lt;td&gt;5.1 - 7.1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;3.0&lt;/td&gt; &lt;td&gt; 30 juin 2019 &lt;/td&gt; &lt;td&gt;3.0.28&lt;/td&gt; &lt;td&gt;5.1 - 5.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2.1&lt;/td&gt; &lt;td&gt; 17 octobre 2017 &lt;/td&gt; &lt;td&gt;2.1.30&lt;/td&gt; &lt;td&gt;4.4 - 5.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2.0&lt;/td&gt; &lt;td&gt; 6 janvier 2016 &lt;/td&gt; &lt;td&gt;2.0.26&lt;/td&gt; &lt;td&gt;4.4 - 5.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.9&lt;/td&gt; &lt;td&gt; 12 mai 2012 &lt;/td&gt; &lt;td&gt;1.9.2+p&lt;/td&gt; &lt;td&gt;4.4 - 5.6&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.8&lt;/td&gt; &lt;td&gt; 9 avril 2010 &lt;/td&gt; &lt;td&gt;1.8.3+b&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.7&lt;/td&gt; &lt;td&gt; 1er avril 2005 &lt;/td&gt; &lt;td&gt;1.7.2&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.6&lt;/td&gt; &lt;td&gt; 3 janvier 2004 &lt;/td&gt; &lt;td&gt;1.6.0&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.5&lt;/td&gt; &lt;td&gt; 26 mai 2003 &lt;/td&gt; &lt;td&gt;1.5.2&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.4&lt;/td&gt; &lt;td&gt; 14 d&#233;cembre 2002 &lt;/td&gt; &lt;td&gt;1.4.2&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.3&lt;/td&gt; &lt;td&gt; 12 septembre 2002 &lt;/td&gt; &lt;td&gt;1.3.1&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.2&lt;/td&gt; &lt;td&gt; 12 septembre 2002 &lt;/td&gt; &lt;td&gt;1.2.1&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1.0&lt;/td&gt; &lt;td&gt; 12 octobre 2001 &lt;/td&gt; &lt;td&gt;1.0.6&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Notes de publication</title>
		<link>https://www.spip.net/fr_article6650.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6650.html</guid>
		<dc:date>2021-05-15T20:46:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>


		<dc:subject>version</dc:subject>

		<description>
&lt;p&gt;Nous avons rassembl&#233; toutes les informations officielles et le code disponible pour les versions pr&#233;c&#233;dentes de SPIP. Vous pouvez trouver plus de d&#233;tails sur la version actuelle sur notre page de t&#233;l&#233;chargement. Veuillez noter que les versions plus anciennes sont r&#233;pertori&#233;es &#224; des fins d'archivage uniquement et qu'elles ne sont plus prises en charge. &lt;br class='autobr' /&gt;
4.4.13 Publi&#233;e le : 6 mars 2026 Annonce T&#233;l&#233;chargement : SPIP 4.4.13 (zip)
&lt;br class='autobr' /&gt; Taille : 9.1 Mio (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique155.html" rel="directory"&gt;&#201;volutions et mises &#224; jour&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;!--/sommaire--&gt;&lt;p&gt;&lt;!--sommaire--&gt;&lt;/p&gt;
&lt;p&gt;Nous avons rassembl&#233; toutes les informations officielles et le code disponible pour les versions pr&#233;c&#233;dentes de SPIP. Vous pouvez trouver plus de d&#233;tails sur la version actuelle sur notre page de &lt;a href='https://www.spip.net/fr_article2670.html' class=&#034;spip_in&#034;&gt;t&#233;l&#233;chargement&lt;/a&gt;. Veuillez noter que les versions plus anciennes sont r&#233;pertori&#233;es &#224; des fins d'archivage uniquement et qu'elles ne sont plus prises en charge.&lt;/p&gt;
&lt;a id='pagination_releases' class='pagination_ancre'&gt;&lt;/a&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.13&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 6 mars 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/936&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.13.zip&#034;&gt;SPIP 4.4.13 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;dc7d3c15a3ab12491e81c8e612f6c7f4f6cefdb6&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.12&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 6 mars 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/936&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.12.zip&#034;&gt;SPIP 4.4.12 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;207af0fcfe4272b7813639f186829ecb9a644c8f&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.11&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 27 f&#233;vrier 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/935&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.11.zip&#034;&gt;SPIP 4.4.11 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;bbf9adae1b643ddd2216671fc3abd138c430f91f&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.10&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 26 f&#233;vrier 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/934&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.10.zip&#034;&gt;SPIP 4.4.10 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;34829c8583682960992bd403c4a7179dc311bec6&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.9&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 18 f&#233;vrier 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/932&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.9.zip&#034;&gt;SPIP 4.4.9 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;2d56bb316de47baf15ffe171e0d3806ce450e59c&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.8&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 12 f&#233;vrier 2026&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/931&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.8.zip&#034;&gt;SPIP 4.4.8 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;ba1565d59e07841c2ebe443761d09d06c5fe5714&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.7&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 5 d&#233;cembre 2025&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/928&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.7.zip&#034;&gt;SPIP 4.4.7 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;d9cbdb1a5a4fcbe2c42460d7a5b3bd48d7c9ad93&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.6&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 10 octobre 2025&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/927&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.6.zip&#034;&gt;SPIP 4.4.6 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;606b1217f137ceb6cb7415c6b4ced0fe1c01848e&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.3.9&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 8 septembre 2025&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/926&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.3.9.zip&#034;&gt;SPIP 4.3.9 (zip)&lt;/a&gt;&lt;br&gt; Taille : 8.7&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;9ecf05b7c7a9363b4475d1f38cdb56cfd3572c7e&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h3 class=&#034;spip&#034;&gt;4.4.5&lt;/h3&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;Publi&#233;e le : 8 septembre 2025&lt;/li&gt; &lt;li&gt; &lt;a href=&#034;https://blog.spip.net/926&#034; hreflang=&#034;fr&#034;&gt;Annonce&lt;/a&gt; &lt;/li&gt; &lt;li&gt; T&#233;l&#233;chargement : &lt;ul class=&#034;spip&#034;&gt; &lt;li&gt; &lt;a href=&#034;https://files.spip.net/spip/archives/spip-v4.4.5.zip&#034;&gt;SPIP 4.4.5 (zip)&lt;/a&gt;&lt;br&gt; Taille : 9.1&#160;Mio&lt;br&gt; SHA1 : &lt;code&gt;8a1574c02934af7fd51ce2524e577a23bd82c786&lt;/code&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;nav role=&#034;navigation&#034; class=&#034;p pagination&#034;&gt;&lt;span class=&#034;prev disabled&#034;&gt; &lt;strong class=&#034;on&#034; rel='prev'&gt;&#171;&#160;Pr&#233;c&#233;dent&lt;/strong&gt; &lt;/span&gt; &lt;span class=&#034;pages&#034;&gt; &lt;strong class=&#034;on&#034;&gt;1&lt;/strong&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=10#pagination_releases' class='lien_pagination' rel='nofollow'&gt;2&lt;/a&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=20#pagination_releases' class='lien_pagination' rel='nofollow'&gt;3&lt;/a&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=30#pagination_releases' class='lien_pagination' rel='nofollow'&gt;4&lt;/a&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=40#pagination_releases' class='lien_pagination' rel='nofollow'&gt;5&lt;/a&gt; &lt;span class=&#034;tbc&#034;&gt;...&lt;/span&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=240#pagination_releases' class='lien_pagination' rel='nofollow'&gt; 25 &lt;/a&gt; &lt;/span&gt; &lt;span class=&#034;next&#034;&gt; &lt;a href='https://www.spip.net/spip.php?id_auteur=180&amp;page=backend&amp;debut_releases=10#pagination_releases' class='lien_pagination' rel='next'&gt;Suivant&#160;&#187;&lt;/a&gt; &lt;/span&gt;&lt;/nav&gt;
&lt;p&gt;&lt;!--/sommaire--&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;PS : en alternative, les ZIPs de chacun des constituants de SPIP peuvent &#234;tre t&#233;l&#233;charg&#233;s dans leurs diff&#233;rentes versions sur le serveur de d&#233;veloppement. Par exemple, les ZIPs du noyau de SPIP sont disponibles sur cette page : &lt;a href=&#034;https://git.spip.net/spip/spip/tags&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://git.spip.net/spip/spip/tags&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Versions maintenues</title>
		<link>https://www.spip.net/fr_article6500.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6500.html</guid>
		<dc:date>2019-03-19T14:47:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>


		<dc:subject>version</dc:subject>

		<description>
&lt;p&gt;L&#233;gende Non publi&#233;e Une version qui n'a pas encore &#233;t&#233; publi&#233;e. Maintenance active Une version qui est activement prise en charge. Les bogues signal&#233;s et les probl&#232;mes de s&#233;curit&#233; sont corrig&#233;s et des mises &#224; jour r&#233;guli&#232;res sont effectu&#233;es. Correctifs de s&#233;curit&#233; seulement Une version prise en charge uniquement pour les probl&#232;mes de s&#233;curit&#233; critiques. Les publications ne sont effectu&#233;es qu'au besoin. Fin de vie Une version qui n'est plus prise en (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique155.html" rel="directory"&gt;&#201;volutions et mises &#224; jour&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-3&#034; id=&#034;nav69e198d9412bb8.09649048&#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-Legende&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Legende&#034; class=&#034;spip_ancre&#034;&gt;L&#233;gende&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Versions-actuellement-maintenues&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Versions-actuellement-maintenues&#034; class=&#034;spip_ancre&#034;&gt;Versions actuellement maintenues&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Compatibilite-PHP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Compatibilite-PHP&#034; class=&#034;spip_ancre&#034;&gt;Compatibilit&#233; PHP&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;Legende&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Legende'&gt;L&#233;gende&lt;a class='sommaire-back sommaire-back-3' href='#s-Legende' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table class=&#034;spip supportedversions&#034;&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;Non publi&#233;e&lt;/td&gt; &lt;td&gt;Une version qui n'a pas encore &#233;t&#233; publi&#233;e.&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;stable&#034;&gt; &lt;td&gt;Maintenance active&lt;/td&gt; &lt;td&gt;Une version qui est activement prise en charge. Les bogues signal&#233;s et les probl&#232;mes de s&#233;curit&#233; sont corrig&#233;s et des mises &#224; jour r&#233;guli&#232;res sont effectu&#233;es.&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;security&#034;&gt; &lt;td&gt;Correctifs de s&#233;curit&#233; seulement&lt;/td&gt; &lt;td&gt;Une version prise en charge uniquement pour les probl&#232;mes de s&#233;curit&#233; critiques. Les publications ne sont effectu&#233;es qu'au besoin.&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;eol&#034;&gt; &lt;td&gt;Fin de vie&lt;/td&gt; &lt;td&gt;Une version qui n'est plus prise en charge. Les personnes utilisant cette version doivent mettre &#224; jour d&#232;s que possible, car elles peuvent &#234;tre expos&#233;es &#224; des vuln&#233;rabilit&#233;s de s&#233;curit&#233; non corrig&#233;es.&lt;/td&gt; &lt;/tr&gt;
&lt;/table&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Versions-actuellement-maintenues&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Versions-actuellement-maintenues'&gt;Versions actuellement maintenues&lt;a class='sommaire-back sommaire-back-3' href='#s-Versions-actuellement-maintenues' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table class=&#034;spip supportedversions&#034;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Branche&lt;/th&gt; &lt;th&gt;Derni&#232;re publication&lt;/th&gt; &lt;th&gt;Compatibilit&#233; PHP&lt;/th&gt; &lt;th&gt;Premi&#232;re publication&lt;/th&gt; &lt;th&gt;Maintenance active jusqu'au&lt;/th&gt; &lt;th&gt;Correctifs de s&#233;curit&#233; jusqu'au&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr class=&#034;stable&#034;&gt; &lt;td&gt;&lt;span title=&#034;4.4.13&#034;&gt;4.4 &lt;/span&gt;&lt;/td&gt; &lt;td&gt; 6 mars &lt;/td&gt; &lt;td&gt;7.4 - 8.5&lt;/td&gt; &lt;td&gt;F&#233;vrier 2025&lt;/td&gt; &lt;td&gt;1er juillet&lt;/td&gt; &lt;td&gt;Juillet 2028&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.0&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;8.2 - 8.5&lt;/td&gt; &lt;td&gt;1er juillet&lt;/td&gt; &lt;td&gt;Janvier 2027&lt;/td&gt; &lt;td&gt;Janvier 2027&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.1&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;8.2 - 8.5&lt;/td&gt; &lt;td&gt;Janvier 2027&lt;/td&gt; &lt;td&gt;Juillet 2027&lt;/td&gt; &lt;td&gt;Juillet 2027&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.2&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;8.2 - 8.5&lt;/td&gt; &lt;td&gt;Juillet 2027&lt;/td&gt; &lt;td&gt;Janvier 2028&lt;/td&gt; &lt;td&gt;Janvier 2028&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.3&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;8.2 - 9.0&lt;/td&gt; &lt;td&gt;Janvier 2028&lt;/td&gt; &lt;td&gt;Juillet 2028&lt;/td&gt; &lt;td&gt;Juillet 2028&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.4&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;8.2 - 9.0&lt;/td&gt; &lt;td&gt;Juillet 2028&lt;/td&gt; &lt;td&gt;Janvier 2029&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;6.0&lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt;? - ?&lt;/td&gt; &lt;td&gt;Juillet 2028&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ou sous forme de calendrier :&lt;/p&gt;
&lt;svg xmlns=&#034;http://www.w3.org/2000/svg&#034; viewbox=&#034;0 0 970 408&#034; width=&#034;970&#034; height=&#034;408&#034; class=&#034;supportedversions&#034;
&gt; &lt;defs&gt; &lt;linearGradient id=&#034;gradient-future&#034; x1=&#034;0&#034; y1=&#034;0&#034; x2=&#034;100%&#034; y2=&#034;0&#034;&gt; &lt;stop offset=&#034;0%&#034; stop-color=&#034;#edcbdc&#034; /&gt; &lt;stop offset=&#034;100%&#034; stop-color=&#034;#fff&#034; /&gt; &lt;/linearGradient&gt; &lt;/defs&gt; &lt;defs&gt; &lt;linearGradient id=&#034;gradient-stable&#034; x1=&#034;0&#034; y1=&#034;0&#034; x2=&#034;100%&#034; y2=&#034;0&#034;&gt; &lt;stop offset=&#034;0%&#034; stop-color=&#034;#c3e2c5&#034; /&gt; &lt;stop offset=&#034;100%&#034; stop-color=&#034;#fff&#034; /&gt; &lt;/linearGradient&gt; &lt;/defs&gt; &lt;defs&gt; &lt;linearGradient id=&#034;gradient-security&#034; x1=&#034;0&#034; y1=&#034;0&#034; x2=&#034;100%&#034; y2=&#034;0&#034;&gt; &lt;stop offset=&#034;0%&#034; stop-color=&#034;#fceaae&#034; /&gt; &lt;stop offset=&#034;100%&#034; stop-color=&#034;#fff&#034; /&gt; &lt;/linearGradient&gt; &lt;/defs&gt; &lt;style type=&#034;text/css&#034;&gt; &lt;![CDATA[ text { fill: #333; font-size: 16px; } g.supver_eol rect, .supver_branches rect.supver_eol { fill: #930000; } g.supver_eol text { fill: white; } g.supver_security rect, .supver_branches rect.supver_security { fill: #fceaae; } .supver_branches rect.supver_security-gradient { fill: url(#gradient-security); } g.supver_stable rect, .supver_branches rect.supver_stable { fill: #c3e2c5; } .supver_branches rect.supver_stable-gradient { fill: url(#gradient-stable); } g.supver_future rect, .supver_branches rect.supver_future { fill: #edcbdc; } .supver_branches rect.supver_future-gradient { fill: url(#gradient-future); } .supver_branch-labels text { dominant-baseline: central; text-anchor: middle; } .supver_today line { stroke: #f33; stroke-dasharray: 7,7; stroke-width: 3px; } .supver_today text { fill: #f33; text-anchor: middle; } .supver_years line { stroke: black; } .supver_years text { text-anchor: middle; } ]]&gt; &lt;/style&gt; &lt;!-- Branch labels --&gt; &lt;g class=&#034;supver_branch-labels&#034;&gt; &lt;g class=&#034;supver_eol&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;24&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;39&#034; &gt; 3.2 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_eol&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;54&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;69&#034; &gt; 4.0 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_eol&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;84&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;99&#034; &gt; 4.1 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_eol&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;114&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;129&#034; &gt; 4.2 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_eol&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;144&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;159&#034; &gt; 4.3 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_stable&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;174&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;189&#034; &gt; 4.4 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;204&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;219&#034; &gt; 5.0 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;234&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;249&#034; &gt; 5.1 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;264&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;279&#034; &gt; 5.2 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;294&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;309&#034; &gt; 5.3 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;324&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;339&#034; &gt; 5.4 &lt;/text&gt; &lt;/g&gt; &lt;g class=&#034;supver_future&#034;&gt; &lt;rect x=&#034;0&#034; y=&#034;354&#034; width=&#034;40&#034; height=&#034;30&#034; /&gt; &lt;text x=&#034;20&#034; y=&#034;369&#034; &gt; 6.0 &lt;/text&gt; &lt;/g&gt; &lt;/g&gt; &lt;!-- Branch blocks --&gt; &lt;g class=&#034;supver_branches&#034;&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;80&#034; y=&#034;24&#034; width=&#034;17&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;80&#034; y=&#034;54&#034; width=&#034;17&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_stable&#034; x=&#034;80&#034; y=&#034;84&#034; width=&#034;17&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;97&#034; y=&#034;84&#034; width=&#034;230&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_stable&#034; x=&#034;97&#034; y=&#034;114&#034; width=&#034;170&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;267&#034; y=&#034;114&#034; width=&#034;67&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_stable&#034; x=&#034;267&#034; y=&#034;144&#034; width=&#034;67&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;334&#034; y=&#034;144&#034; width=&#034;102&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_stable&#034; x=&#034;334&#034; y=&#034;174&#034; width=&#034;165&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_security&#034; x=&#034;499&#034; y=&#034;174&#034; width=&#034;247&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future&#034; x=&#034;499&#034; y=&#034;204&#034; width=&#034;67&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future&#034; x=&#034;566&#034; y=&#034;234&#034; width=&#034;60&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future&#034; x=&#034;626&#034; y=&#034;264&#034; width=&#034;60&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future&#034; x=&#034;686&#034; y=&#034;294&#034; width=&#034;60&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future-gradient&#034; x=&#034;746&#034; y=&#034;324&#034; width=&#034;424&#034; height=&#034;30&#034; /&gt; &lt;rect class=&#034;supver_future-gradient&#034; x=&#034;746&#034; y=&#034;354&#034; width=&#034;424&#034; height=&#034;30&#034; /&gt; &lt;/g&gt; &lt;!-- Year lines --&gt; &lt;g class=&#034;supver_years&#034;&gt; &lt;line x1=&#034;80&#034; y1=&#034;24&#034; x2=&#034;80&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;80&#034; y=&#034;19.2&#034; &gt; janv. 2023 &lt;/text&gt; &lt;line x1=&#034;199&#034; y1=&#034;24&#034; x2=&#034;199&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;199&#034; y=&#034;19.2&#034; &gt; janv. 2024 &lt;/text&gt; &lt;line x1=&#034;320&#034; y1=&#034;24&#034; x2=&#034;320&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;320&#034; y=&#034;19.2&#034; &gt; janv. 2025 &lt;/text&gt; &lt;line x1=&#034;440&#034; y1=&#034;24&#034; x2=&#034;440&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;440&#034; y=&#034;19.2&#034; &gt; janv. 2026 &lt;/text&gt; &lt;line x1=&#034;560&#034; y1=&#034;24&#034; x2=&#034;560&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;560&#034; y=&#034;19.2&#034; &gt; janv. 2027 &lt;/text&gt; &lt;line x1=&#034;679&#034; y1=&#034;24&#034; x2=&#034;679&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;679&#034; y=&#034;19.2&#034; &gt; janv. 2028 &lt;/text&gt; &lt;line x1=&#034;800&#034; y1=&#034;24&#034; x2=&#034;800&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;800&#034; y=&#034;19.2&#034; &gt; janv. 2029 &lt;/text&gt; &lt;line x1=&#034;920&#034; y1=&#034;24&#034; x2=&#034;920&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;920&#034; y=&#034;19.2&#034; &gt; janv. 2030 &lt;/text&gt; &lt;/g&gt; &lt;!-- Today --&gt; &lt;g class=&#034;supver_today&#034;&gt; &lt;line x1=&#034;474&#034; y1=&#034;24&#034; x2=&#034;474&#034; y2=&#034;384&#034; /&gt; &lt;text x=&#034;474&#034; y=&#034;408&#034;&gt; aujourd'hui&#160;: 17 avril 2026 &lt;/text&gt; &lt;/g&gt;
&lt;/svg&gt; &lt;p&gt;&lt;a href='https://www.spip.net/supported-versions.svg'&gt;Image&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;L'id&#233;e g&#233;n&#233;rale est de ne maintenir que la derni&#232;re version Y dans chaque branche X.&lt;/p&gt;
&lt;p&gt;&lt;a href='https://www.spip.net/fr_article6908.html' class=&#034;spip_in&#034;&gt;Nous utilisons le versionnement s&#233;mantique&lt;/a&gt;. Pour r&#233;sumer : un changement de y apporte des nouvelles fonctionnalit&#233;s et corrige des bugs. Un changement de X apporte de nouvelles fonctionnalit&#233;s et implique certains changements non retrocompatibles.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Compatibilite-PHP&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Compatibilite-PHP'&gt;Compatibilit&#233; PHP&lt;a class='sommaire-back sommaire-back-3' href='#s-Compatibilite-PHP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table class=&#034;spip supportedversions&#034;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt; &lt;/th&gt; &lt;th style=&#034;text-align: center;&#034; colspan=&#034;8&#034;&gt;Compatibilit&#233; PHP&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th&gt;SPIP&lt;/th&gt; &lt;th&gt;7.4&lt;/th&gt; &lt;th&gt;8.0&lt;/th&gt; &lt;th&gt;8.1&lt;/th&gt; &lt;th&gt;8.2&lt;/th&gt; &lt;th&gt;8.3&lt;/th&gt; &lt;th&gt;8.4&lt;/th&gt; &lt;th&gt;8.5&lt;/th&gt; &lt;th&gt;9.0&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tr class=&#034;stable&#034;&gt; &lt;td&gt;4.4&lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.0&lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.1&lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.2&lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr class=&#034;future&#034;&gt; &lt;td&gt;5.3&lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Non&#034; style=&#034;color: #cccccc;&#034;&gt;&#10008;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;td&gt; &lt;span title=&#034;Oui&#034; style=&#034;color: #6f9271;&#034;&gt;&#10004;&lt;/span&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Pourquoi r&#233;aliser un plugin ?</title>
		<link>https://www.spip.net/fr_article3458.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3458.html</guid>
		<dc:date>2006-08-30T21:54:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>James</dc:creator>



		<description>
&lt;p&gt;Adapter SPIP &#224; ses propres besoins &lt;br class='autobr' /&gt;
SPIP met en place tout un formalisme pour permettre une modification et une extension harmonieuse du code. La principale avanc&#233;e se situe dans la possibilit&#233; de &#034;greffer&#034; (et de retirer la greffe quand on le souhaite sans avoir touch&#233; le code de notre SPIP tout neuf) des am&#233;liorations et des modifications aussi diverses que vari&#233;es. Les possibilit&#233;s sont tellement vastes que toute la question est maintenant de savoir comment faciliter l'installation, tant (&#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_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-1&#034; id=&#034;nav69e198d9432db7.78157838&#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-Adapter-SPIP-a-ses-propres-besoins&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Adapter-SPIP-a-ses-propres-besoins&#034; class=&#034;spip_ancre&#034;&gt;Adapter SPIP &#224; ses propres besoins&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;Adapter-SPIP-a-ses-propres-besoins&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Adapter-SPIP-a-ses-propres-besoins'&gt;Adapter SPIP &#224; ses propres besoins&lt;a class='sommaire-back sommaire-back-1' href='#s-Adapter-SPIP-a-ses-propres-besoins' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP met en place tout un formalisme pour permettre une modification et une extension harmonieuse du code. La principale avanc&#233;e se situe dans la possibilit&#233; de &#034;greffer&#034; (et de retirer la greffe quand on le souhaite sans avoir touch&#233; le code de notre SPIP tout neuf) des am&#233;liorations et des modifications aussi diverses que vari&#233;es. Les possibilit&#233;s sont tellement vastes que toute la question est maintenant de savoir comment faciliter l'installation, tant pour soi-m&#234;me que pour une distribution publique, de toutes ces personnalisations.&lt;/p&gt;
&lt;p&gt;Techniquement, l'introduction des plugins a permis d'ouvrir les possibilit&#233;s suivantes :
&lt;br /&gt;- tous les fichiers du noyau sont surchargeables&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;Surcharger un fichier consiste &#224; multiplier la lecture d'un fichier afin de (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; et toutes les fonctions appelables syst&#233;matiquement&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Vous pouvez appeler &#224; partir de n'importe quel fichier une fonction d&#233;j&#224; (&#8230;)&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;,
&lt;br /&gt;- une interface d'application (API) est maintenue par la d&#233;finition d'un certain nombre de points d'entr&#233;e dans le code.&lt;/p&gt;
&lt;p&gt;On a besoin de r&#233;aliser un plugin dans quatre cas :&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Fonctions et options&lt;/strong&gt; : r&#233;aliser son premier plugin, migrer et rendre portables ses fonctions et ses options pour soi ou pour les autres.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Les points d'entr&#233;e&lt;/strong&gt; : injecter, le temps d'activation d'un plugin, du code au coeur de SPIP et modifier profond&#233;ment son fonctionnement.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Modifier les fichiers natifs&lt;/strong&gt; : en l'absence de point d'entr&#233;e, modifier des parties du code de SPIP sans intervenir concr&#232;tement sur le noyau.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;R&#233;ecrire son propre code&lt;/strong&gt; : inventer son propre script que l'on greffera sur SPIP.&lt;/p&gt;
&lt;p&gt;Si vous n'avez aucun de ces objectifs en t&#234;te, ne vous bilez pas avec les pages suivantes :) Cependant, vous serez probablement int&#233;ress&#233; par ce que peuvent vous fournir des &lt;a href='https://www.spip.net/fr_article3396.html' class=&#034;spip_in&#034;&gt;plugins distribu&#233;es librement&lt;/a&gt;.&lt;/p&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;Surcharger un fichier consiste &#224; multiplier la lecture d'un fichier afin de lui faire prendre la derni&#232;re valeur lue. De fa&#231;on tr&#232;s sch&#233;matique, si vous surcharger un fichier qui a pour valeur &#034;Bonjour&#034; avec un fichier qui a pour valeur &#034;Bonsoir&#034;, l'&#233;cran affichera &#034;Bonsoir&#034; et non &#034;Bonjour&#034;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Vous pouvez appeler &#224; partir de n'importe quel fichier une fonction d&#233;j&#224; existante, pour autant que vous ayez inclus en d&#233;but de fichier le fichier qui contient la fonction que vous voulez utiliser. Ceci est particuli&#232;rement puissant, car les concepteurs de SPIP ont r&#233;alis&#233; beaucoup de fonctions qui sont autant de routines que vous n'aurez pas &#224; reprogrammer. On peut citer en exemple &lt;i&gt;lire_fichier&lt;/i&gt; (qui lit un fichier), &lt;i&gt;ecrire_fichier&lt;/i&gt; (qui &#233;crit un fichier), &lt;i&gt;preg_files&lt;/i&gt; (qui cherche un fichier), toutes les requetes sql et des dizaines de fonctions qui sont simplifi&#233;es au possible gr&#226;ce &#224; des routines contenues dans le code source de SPIP. Voir la doc du code pour en savoir plus.&lt;/p&gt;
&lt;p&gt;On trouvera une liste cons&#233;quente de plugins disponibles (dont il sera possible d'&#233;tudier le code)&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit sur &lt;a href=&#034;http://contrib.spip.net&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;contrib.spip.net&lt;/a&gt; : &lt;a href=&#034;http://contrib.spip.net/Plugins,112&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;leur description&lt;/a&gt;&lt;/li&gt;&lt;li&gt; soit sur &lt;a href=&#034;http://plugins.spip.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugins.spip.net&lt;/a&gt;.
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Le syst&#232;me de pagination</title>
		<link>https://www.spip.net/fr_article3367.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3367.html</guid>
		<dc:date>2006-07-01T08:06:14Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil, Fran&#231;ois Schreuer, James, Ma&#239;eul</dc:creator>


		<dc:subject>debut_...</dc:subject>
		<dc:subject>#SELF</dc:subject>
		<dc:subject>#TOTAL_BOUCLE</dc:subject>
		<dc:subject>#PAGINATION</dc:subject>
		<dc:subject>pagination</dc:subject>
		<dc:subject>#GRAND_TOTAL</dc:subject>
		<dc:subject>#ANCRE_PAGINATION</dc:subject>

		<description>
&lt;p&gt;Lorsqu'une boucle renvoie plusieurs dizaines d'articles (ou, pour une p&#233;tition, plusieurs milliers de signatures), il n'est pas souhaitable, voire impossible, de tout afficher sur une seule page. &lt;br class='autobr' /&gt; La pagination permet de r&#233;partir des r&#233;sultats trop nombreux sur plusieurs pages. &lt;br class='autobr' /&gt;
SPIP propose donc un syst&#232;me simplifi&#233; de pagination des r&#233;sultats d'une boucle. &lt;br class='autobr' /&gt;
Syntaxe de base Au plus simple, ce syst&#232;me est compos&#233; d'un crit&#232;re et d'une balise : le crit&#232;re pagination s'ajoute sur la boucle (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique469.html" rel="directory"&gt;Autres fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@debut_" rel="tag"&gt;debut_...&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@self" rel="tag"&gt;#SELF&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@total_boucle" rel="tag"&gt;#TOTAL_BOUCLE&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/@pagination" rel="tag"&gt;pagination&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@grand_total" rel="tag"&gt;#GRAND_TOTAL&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@ancre_pagination" rel="tag"&gt;#ANCRE_PAGINATION&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Lorsqu'une boucle renvoie plusieurs dizaines d'articles (ou, pour une p&#233;tition, plusieurs milliers de signatures), il n'est pas souhaitable, voire impossible, de tout afficher sur une seule page.&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;nav69e198d94677d6.78772982&#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-Syntaxe-de-base&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Syntaxe-de-base&#034; class=&#034;spip_ancre&#034;&gt;Syntaxe de base&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Ancres-de-pagination&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Ancres-de-pagination&#034; class=&#034;spip_ancre&#034;&gt;Ancres de pagination&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Acces-direct-a-un-element-particulier&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Acces-direct-a-un-element-particulier&#034; class=&#034;spip_ancre&#034;&gt;Acc&#232;s direct &#224; un &#233;l&#233;ment particulier&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Le-nombre-total-de-resultats&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-nombre-total-de-resultats&#034; class=&#034;spip_ancre&#034;&gt;Le nombre total de r&#233;sultats&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Changer-le-pas-de-la&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Changer-le-pas-de-la&#034; class=&#034;spip_ancre&#034;&gt;Changer le pas de la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-La-pagination-dans-les-squelettes-inclus&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#La-pagination-dans-les-squelettes-inclus&#034; class=&#034;spip_ancre&#034;&gt;La pagination dans les squelettes inclus&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Styles-de-la-pagination&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Styles-de-la-pagination&#034; class=&#034;spip_ancre&#034;&gt;Styles de la pagination&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Choisir-le-modele-de-pagination&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Choisir-le-modele-de-pagination&#034; class=&#034;spip_ancre&#034;&gt;Choisir le mod&#232;le de pagination&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Personnaliser-le-modele-de-pagination&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Personnaliser-le-modele-de-pagination&#034; class=&#034;spip_ancre&#034;&gt;Personnaliser le mod&#232;le de pagination&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;La pagination permet de r&#233;partir des r&#233;sultats trop nombreux sur plusieurs pages.&lt;/p&gt;
&lt;p&gt;SPIP propose donc un syst&#232;me simplifi&#233; de pagination des r&#233;sultats d'une boucle.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Syntaxe-de-base&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Syntaxe-de-base'&gt;Syntaxe de base&lt;a class='sommaire-back sommaire-back-9' href='#s-Syntaxe-de-base' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Au plus simple, ce syst&#232;me est compos&#233; d'un crit&#232;re et d'une balise :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le crit&#232;re &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt;&lt;/strong&gt; s'ajoute sur la boucle &#224; paginer ;&lt;/li&gt;&lt;li&gt; la balise &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt;&lt;/strong&gt;, plac&#233;e dans une des parties optionnelles (&#171; avant &#187; ou &#171; apr&#232;s &#187;) de la boucle, affiche la &#171; pagination &#187;.&lt;/li&gt;&lt;/ul&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;B_page&gt; [&lt;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/nav&gt;] &lt;ul&gt; &lt;BOUCLE_page(ARTICLES){par date}{pagination}&gt; &lt;li&gt;#TITRE&lt;/li&gt; &lt;/BOUCLE_page&gt; &lt;/ul&gt; &lt;/B_page&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si le site comporte 90 articles publi&#233;s, cette boucle affichera la liste des dix plus anciens articles, surplomb&#233;e de liens conduisant vers la page qui affiche les dix suivants, les dix d'apr&#232;s, etc. Ces liens sont num&#233;rot&#233;s comme suit :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;span class=&#034;on&#034;&gt;0&lt;/span&gt; | &lt;a href=&#034;#debut_articles=10&#034;&gt;10&lt;/a&gt; | &lt;a href=&#034;#debut_articles=20&#034;&gt;20&lt;/a&gt; | &lt;a href=&#034;#debut_articles=30&#034;&gt;30&lt;/a&gt; | &lt;a href=&#034;#debut_articles=40&#034;&gt;40&lt;/a&gt; | &lt;a href=&#034;#debut_articles=50&#034;&gt;50&lt;/a&gt; | &lt;a href=&#034;#debut_articles=60&#034;&gt;60&lt;/a&gt; | &lt;a href=&#034;#debut_articles=70&#034;&gt;70&lt;/a&gt; | &lt;a href=&#034;#debut_articles=80&#034;&gt;80&lt;/a&gt; | &lt;a href=&#034;#debut_articles=1020&#034;&gt;...&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le num&#233;ro &#224; partir duquel les r&#233;sultats sont affich&#233;s est pass&#233; dans l'url via un param&#232;tre &lt;a id=&#034;debut_---&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{debut_page=x}&lt;/code&gt; portant le m&#234;me nom (ici, &#171; page &#187;) que la boucle concern&#233;e. (Ce param&#232;tre est exploitable dans une autre boucle via le crit&#232;re classique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{debut_page,10}&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;A noter : le nombre total de liens affich&#233;s est limit&#233; ; des points de suspension permettent, le cas &#233;ch&#233;ant, d'aller directement &#224; la toute fin de la liste, ou de revenir au tout-d&#233;but.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;ancre&#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;Ancres-de-pagination&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Ancres-de-pagination'&gt;Ancres de pagination&lt;a class='sommaire-back sommaire-back-9' href='#s-Ancres-de-pagination' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La balise &lt;tt&gt;#PAGINATION&lt;/tt&gt; comporte une ancre HTML qui permet au navigateur d'afficher directement la partie de la page qui est pagin&#233;e ; toutefois si l'on veut mettre les liens de pagination &lt;i&gt;en dessous&lt;/i&gt; de la liste des articles, il faut pouvoir placer l'ancre &lt;i&gt;au-dessus&lt;/i&gt; de la liste.&lt;/p&gt;
&lt;p&gt;C'est &#224; cela que sert la balise &lt;i&gt;&lt;a href='https://www.spip.net/fr_article4328.html' class=&#034;spip_in&#034;&gt;#ANCRE_PAGINATION&lt;/a&gt;&lt;/i&gt;, qui retourne l'ancre en question, et interdit &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt; suivante d'afficher son ancre.&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;B_page&gt; #ANCRE_PAGINATION &lt;ul&gt; &lt;BOUCLE_page(ARTICLES){par date}{pagination}&gt; &lt;li&gt;#TITRE&lt;/li&gt; &lt;/BOUCLE_page&gt; &lt;/ul&gt; [&lt;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/nav&gt;] &lt;/B_page&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Inversement, pour ne pas ancrer, on pr&#233;cisera &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#ANCRE_PAGINATION|vide)]&lt;/code&gt; dans la boucle.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;acces_direct&#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;Acces-direct-a-un-element-particulier&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Acces-direct-a-un-element-particulier'&gt;Acc&#232;s direct &#224; un &#233;l&#233;ment particulier&lt;a class='sommaire-back sommaire-back-9' href='#s-Acces-direct-a-un-element-particulier' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour permettre de donner une URL permanente vers un &#233;l&#233;ment pr&#233;cis d'une liste pagin&#233;e on utilisera &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;debut_abc=@xxx&lt;/code&gt; o&#249; &#171; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;abc&lt;/code&gt; &#187; est le nom de la boucle de pagination et &#171; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;xxx&lt;/code&gt; &#187; l'id de l'objet dans la table sur laquelle porte la pagination.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exemple&lt;/strong&gt; : Dans une boucle&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;B_pagi&gt; [&lt;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/nav&gt;] &lt;ul&gt; &lt;BOUCLE_pagi(ARTICLES){par titre}{pagination}&gt; &lt;li&gt;#ID_ARTICLE : #TITRE&lt;/li&gt; &lt;/BOUCLE_pagi&gt; &lt;/ul&gt; &lt;/B_pagi&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;debut_pagi=10&lt;/code&gt; place la pagination sur la deuxi&#232;me page (&#224; partir du &lt;i&gt;dixi&#232;me&lt;/i&gt; &#233;l&#233;ment de la liste)&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;debut_pagi=@231&lt;/code&gt; place la pagination sur la page qui contient l'id_article &#171; 231 &#187;.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;grand_total&#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;Le-nombre-total-de-resultats&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Le-nombre-total-de-resultats'&gt;Le nombre total de r&#233;sultats&lt;a class='sommaire-back sommaire-back-9' href='#s-Le-nombre-total-de-resultats' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dans une boucle avec le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt;, &lt;a href='https://www.spip.net/fr_article4334.html' class=&#034;spip_in&#034;&gt;#TOTAL_BOUCLE&lt;/a&gt; affiche le nombre d'&#233;l&#233;ments effectivement retourn&#233;s, c'est-&#224;-dire 10 sur les pages pleines, et 10 ou moins sur la derni&#232;re page de r&#233;sultats.&lt;/p&gt;
&lt;p&gt;Pour afficher le nombre d'&#233;l&#233;ments qui &lt;strong&gt;auraient &#233;t&#233; retourn&#233;s&lt;/strong&gt; si le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt; n'avait pas &#233;t&#233; l&#224;, utilisez la balise &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#GRAND_TOTAL&lt;/code&gt;&lt;/strong&gt;.&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;B_pagination&gt; #ANCRE_PAGINATION &lt;BOUCLE_pagination (ARTICLES) {pagination}&gt; #TITRE &lt;br&gt; &lt;/BOUCLE_pagination&gt; Il y a au total #GRAND_TOTAL articles, cette page en affiche #TOTAL_BOUCLE &lt;/B_pagination&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;indiquera : &#171; Il y a au total 1578 articles, cette page en affiche 10. &#187;&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;pas&#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;Changer-le-pas-de-la&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Changer-le-pas-de-la'&gt;Changer le pas de la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination}&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-9' href='#s-Changer-le-pas-de-la' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le nombre standard de 10 &#233;l&#233;ments par page peut &#234;tre modifi&#233; par un param&#232;tre suppl&#233;mentaire dans le crit&#232;re.&lt;/p&gt;
&lt;p&gt;Ainsi&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_page(ARTICLES){pagination 5}&gt; #TITRE&lt;br&gt; &lt;/BOUCLE_page&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;retournera les titres de cinq articles &#224; partir de &lt;i&gt;debut_page&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Le param&#232;tre en question peut lui-m&#234;me &#234;tre compos&#233; comme on le souhaite &#224; partir d'autres balises, notamment &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{xx}&lt;/code&gt;, ce qui permet de faire un affichage &#224; la demande tr&#232;s complet.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;La-pagination-dans-les-squelettes-inclus&#034;&gt;&lt;h2 class=&#034;h2&#034; id='La-pagination-dans-les-squelettes-inclus'&gt; La pagination dans les squelettes inclus&lt;a class='sommaire-back sommaire-back-9' href='#s-La-pagination-dans-les-squelettes-inclus' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Si votre pagination doit fonctionner dans un squelette inclus, vous &lt;strong&gt;devez&lt;/strong&gt; passer en param&#232;tre de la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;INCLURE&lt;/code&gt; la formulation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{ajax, env}&lt;/code&gt; ; ceci permet au squelette inclus de se calculer avec la bonne valeur du param&#232;tre &lt;tt&gt;debut_xxx&lt;/tt&gt;, et se justifie qui plus est par un besoin de s&#233;curit&#233; (la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt; est en effet calcul&#233;e &#224; partir de l'URL compl&#232;te de la page).&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;nommer_critere&#034;&gt;&lt;/a&gt;&lt;br class='autobr' /&gt;
&lt;strong&gt;Nommer le crit&#232;re de pagination&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lorsque l'on utilise des squelettes inclus plusieurs fois dans la m&#234;me page comme :&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_incluse(ARTICLES){id_rubrique}{par titre}&gt; &lt;INCLURE{fond=motsgroupe5,id_article,ajax,env}&gt; &lt;/BOUCLE_incluse&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et que cet &lt;i&gt;INCLURE&lt;/i&gt; poss&#232;de une pagination (d'o&#249; l'utilisation du crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{env}&lt;/code&gt;), lorsque vous cliquerez sur une pagination, vous verrez toutes les paginations se modifier en m&#234;me temps.&lt;/p&gt;
&lt;p&gt;Pour &#233;viter cela, il suffit de &lt;strong&gt;nommer le crit&#232;re pagination&lt;/strong&gt; &#224; l'int&#233;rieur du fichier inclu par un nom qui sera diff&#233;rent &#224; chaque inclusion :&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;B_groupe5&gt; #ANCRE_PAGINATION &lt;BOUCLE_groupe5(MOTS){id_groupe=5}{pagination 15, #ID_ARTICLE}&gt; #TITRE&lt;br&gt; &lt;/BOUCLE_groupe5&gt; [&lt;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/nav&gt;] &lt;/B_groupe5&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut aussi vouloir sp&#233;cifier d&#232;s l'appel de l'INCLURE le nom que l'on veut donner au crit&#232;re pagination :&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=page_paginee, env, nom_p=_abc}&gt; &lt;INCLURE{fond=page_paginee, env, nom_p=_def}&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;dans page_paginee.html :&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;B_a&gt; #ANCRE_PAGINATION &lt;BOUCLE_a(ARTICLES){pagination 25, #ENV{nom_p}}&gt; #TITRE&lt;br&gt; &lt;/BOUCLE_a&gt; [&lt;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/nav&gt;] &lt;/B_a&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;Styles-de-la-pagination&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Styles-de-la-pagination'&gt;Styles de la pagination&lt;a class='sommaire-back sommaire-back-9' href='#s-Styles-de-la-pagination' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La pagination est constitu&#233;e d'une s&#233;rie de liens, et d'un num&#233;ro de page correspondant &#224; la page actuelle dot&#233; de la class &#171; .on &#187; : on d&#233;finira donc les styles pour &lt;tt&gt;a&lt;/tt&gt; et &lt;tt&gt;.on&lt;/tt&gt; pour en personnaliser l'apparence.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Choisir-le-modele-de-pagination&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Choisir-le-modele-de-pagination'&gt;Choisir le mod&#232;le de pagination&lt;a class='sommaire-back sommaire-back-9' href='#s-Choisir-le-modele-de-pagination' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt; accepte un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{modele}&lt;/code&gt;, qui permet de modifier le r&#233;sultat de la balise.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;pagination_articles&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{precedent_suivant}&lt;/code&gt; affichera des liens vers les pages pr&#233;c&#233;dentes et suivantes. Les liens seront les suivants&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;a href='#pagination_articles' class='lien_pagination'&gt;page pr&#233;c&#233;dente&lt;/a&gt; | &lt;a href='#pagination_articles' class='lien_pagination'&gt;page suivante&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;debut_articles&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page}&lt;/code&gt; affichera quelque chose de la forme suivante&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;span class=&#034;on&#034;&gt;1&lt;/span&gt; | &lt;a href=&#034;#debut_articles=10&#034;&gt;2&lt;/a&gt; | &lt;a href=&#034;#debut_articles=20&#034;&gt;3&lt;/a&gt; | &lt;a href=&#034;#debut_articles=30&#034;&gt;4&lt;/a&gt; | &lt;a href=&#034;#debut_articles=40&#034;&gt;5&lt;/a&gt; | &lt;a href=&#034;#debut_articles=50&#034;&gt;6&lt;/a&gt; | &lt;a href=&#034;#debut_articles=60&#034;&gt;7&lt;/a&gt; | &lt;a href=&#034;#debut_articles=70&#034;&gt;8&lt;/a&gt; | &lt;a href=&#034;#debut_articles=80&#034;&gt;9&lt;/a&gt; | &lt;a href=&#034;#debut_articles=1020&#034;&gt;...&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;autre_pagination_articles&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page_precedent_suivant}&lt;/code&gt; affichera quelque chose comme&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;a href='#pagination_articles' class='lien_pagination'&gt;page pr&#233;c&#233;dente&lt;/a&gt; &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;1&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;2&lt;/a&gt; | &lt;span class=&#034;on&#034;&gt;3&lt;/span&gt;	| &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;4&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;5&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;6&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;page suivante&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;pagination_prive&#034;&gt;&lt;/a&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{prive}&lt;/code&gt; affichera quelque chose comme&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;span class=&#034;pages&#034;&gt;&lt;strong class=&#034;on&#034;&gt;0&lt;/strong&gt;&lt;span class=&#034;sep&#034;&gt; | &lt;/span&gt;&lt;a rel=&#034;nofollow&#034; class=&#034;lien_pagination bind-ajax&#034; href='https://www.spip.net/?debut_liste_art=10#pagination_liste_art'&gt;10&lt;/a&gt;&lt;span class=&#034;sep&#034;&gt; | &lt;/span&gt;&lt;a rel=&#034;nofollow&#034; class=&#034;lien_pagination bind-ajax&#034; href='https://www.spip.net/?debut_liste_art=20#pagination_liste_art'&gt;20&lt;/a&gt;&lt;span class=&#034;sep&#034;&gt; | &lt;/span&gt;&lt;a rel=&#034;nofollow&#034; class=&#034;lien_pagination bind-ajax&#034; href='https://www.spip.net/?debut_liste_art=30#pagination_liste_art'&gt;30&lt;/a&gt;&lt;/span&gt; &lt;span class=&#034;all&#034;&gt;&lt;span class=&#034;sep&#034;&gt; | &lt;/span&gt;&lt;a rel=&#034;nofollow&#034; class=&#034;lien_pagination bind-ajax&#034; href='https://www.spip.net/?debut_liste_art=-1#pagination_liste_art'&gt;Tout afficher&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il est possible de d&#233;finir d'autres mod&#232;les de pagination dans le dossiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/&lt;/code&gt; de votre jeu de squelettes. Ils devront s'appeler &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pagination_nomdumodele&lt;/code&gt;. On pourra, pour les fabriquer, s'inspirer de ceux livr&#233;s de base avec SPIP et situ&#233;s dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;prive/modeles/&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;Personnaliser-le-modele-de-pagination&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Personnaliser-le-modele-de-pagination'&gt;Personnaliser le mod&#232;le de pagination&lt;a class='sommaire-back sommaire-back-9' href='#s-Personnaliser-le-modele-de-pagination' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Chaque mod&#232;le poss&#232;de des param&#232;tres qu'il est possible de personnaliser.&lt;/p&gt;
&lt;p&gt;Par exemple, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page_precedent_suivant}&lt;/code&gt; affiche par d&#233;faut :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;a href='#pagination_articles' class='lien_pagination'&gt;page pr&#233;c&#233;dente&lt;/a&gt; &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;1&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;2&lt;/a&gt; | &lt;span class=&#034;on&#034;&gt;3&lt;/span&gt;	| &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;4&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;5&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;6&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;page suivante&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{page_precedent_suivant, label_precedent=&lt;, label_suivant=&gt;}&lt;/code&gt; affiche :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;p class=&#034;pagination&#034;&gt;&lt;a href='#pagination_articles' class='lien_pagination'&gt;&lt;&lt;/a&gt; &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;1&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;2&lt;/a&gt; | &lt;span class=&#034;on&#034;&gt;3&lt;/span&gt;	| &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;4&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;5&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;6&lt;/a&gt; | &lt;a href='#autre_pagination_articles' class='lien_pagination'&gt;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Configurer l'adresse des liens de #PAGINATION&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; partir de SPIP 3.2.8, il devient possible de sp&#233;cifier quelle URL doit servir de base pour les liens g&#233;n&#233;r&#233;s par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par exemple, cela permet, si n&#233;cessaire, de nettoyer une variable d'URL ind&#233;sirable : &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{prive,self=#SELF|parametre_url{...}}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configurer le nombre de liens &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Depuis SPIP 4.0, les diff&#233;rents mod&#232;les de pagination acceptent un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nombre_liens_max&lt;/code&gt; qui, pass&#233; a la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt; permet de d&#233;finir le nombre de lien de pagination maximum affich&#233; par le mod&#232;le. On peut &#233;galement employer la constante &lt;a href='https://www.spip.net/fr_article6642.html' class=&#034;spip_in&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_PAGINATION_NOMBRE_LIENS_MAX&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;D&#233;finir un nouveau mod&#232;le de pagination&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il est possible de surcharger un mod&#232;le de pagination existant ou d'en d&#233;finir un nouveau dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles&lt;/code&gt; de votre squelette ou plugin. Pour cela, cr&#233;ez le fichier de ce nouveau mod&#232;le avec le nom d&#233;sir&#233;. Ainsi le mod&#232;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;legere.html&lt;/code&gt;, vous permet d'utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION{legere}&lt;/code&gt; dans vos squelettes.&lt;/p&gt;
&lt;p&gt;Les mod&#232;les de paginations re&#231;oivent des variables d'environnement dont ils peuvent faire usage : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page_courante&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nombre_pages&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bloc_ancre&lt;/code&gt;. Ils peuvent aussi utiliser le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|bornes_pagination&lt;/code&gt; qui renvoie les bornes de la pagination cr&#233;&#233;e.&lt;br class='autobr' /&gt;
Pour vous faciliter la t&#226;che, vous pouvez commencer en reprenant le code d'un mod&#232;le de pagination livr&#233; avec SPIP et l'adapter &#224; vos besoins.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ne pas enregistrer dans l'historique du navigateur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il faut pour cela associer la classe CSS &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nohistory&lt;/code&gt; au lien ajax (voir &lt;a href='https://www.spip.net/fr_article3753.html#Modalites-complementaires' class=&#034;spip_in&#034;&gt;`&lt;i&gt;ajax&lt;/i&gt;` pour les `inclure`&lt;/a&gt;) :&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;nav role=&#034;navigation&#034; class=&#034;pagination&#034;&gt; (#PAGINATION{precedent_suivant}|replace{lien_pagination,lien_pagination nohistory}) &lt;/nav&gt;] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
