<?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=178&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>#ID_LOGO_XXX</title>
		<link>https://www.spip.net/fr_article6834.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6834.html</guid>
		<dc:date>2023-11-22T07:59:21Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>RealET</dc:creator>


		<dc:subject>#ID_LOGO_XXX</dc:subject>

		<description>&lt;p&gt;Depuis SPIP 4.2, les logos sont g&#233;r&#233;s par SPIP comme des documents normaux. La balise #ID_LOGO_ retourne l'identifiant du document utilis&#233; pour le logo d'un objet.&lt;/p&gt;

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

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav69f410d0d132e6.18385566&#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&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Syntaxe&#034; class=&#034;spip_ancre&#034;&gt;Syntaxe&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Usage-pour-recuperer-les-informations-du-logo&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Usage-pour-recuperer-les-informations-du-logo&#034; class=&#034;spip_ancre&#034;&gt;Usage pour r&#233;cup&#233;rer les informations du logo&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Attention-piege-avec-INFO_TITRE&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Attention-piege-avec-INFO_TITRE&#034; class=&#034;spip_ancre&#034;&gt;Attention, pi&#232;ge avec #INFO_TITRE&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-A-lire-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#A-lire-aussi&#034; class=&#034;spip_ancre&#034;&gt;&#192; lire aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Syntaxe&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Syntaxe'&gt;Syntaxe&lt;a class='sommaire-back sommaire-back-4' href='#s-Syntaxe' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le type d'objet est sp&#233;cifi&#233; dans le nom de la balise, tel que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_LOGO_ARTICLE&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_LOGO_SITE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour les articles, ces balises ont quelques variantes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La balise peut aussi demander explicitement le logo normal ou de survol, avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_LOGO_ARTICLE_NORMAL&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_LOGO_ARTICLE_SURVOL&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; On peut demander un logo de rubrique en absence de logo sur l'article demand&#233; avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_LOGO_ARTICLE_RUBRIQUE&lt;/code&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;Usage-pour-recuperer-les-informations-du-logo&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Usage-pour-recuperer-les-informations-du-logo'&gt;Usage pour r&#233;cup&#233;rer les informations du logo&lt;a class='sommaire-back sommaire-back-4' href='#s-Usage-pour-recuperer-les-informations-du-logo' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Une fois l'identifiant du logo r&#233;cup&#233;r&#233;, une boucle DOCUMENTS peut &#234;tre utilis&#233;e, entre autres, pour r&#233;cup&#233;rer le titre et le descriptif du logo (attention, il faut le modificateur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{tout}&lt;/code&gt;, sinon, la boucle ne retourne rien) :&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_TitreLogo(DOCUMENTS){id_document=#ID_LOGO_ARTICLE}{tout}&gt; #TITRE, #DESCRIPTIF &lt;/BOUCLE_TitreLogo&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;Attention-piege-avec-INFO_TITRE&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Attention-piege-avec-INFO_TITRE'&gt;Attention, pi&#232;ge avec #INFO_TITRE&lt;a class='sommaire-back sommaire-back-4' href='#s-Attention-piege-avec-INFO_TITRE' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INFO_TITRE{document, #ID_LOGO_ARTICLE}&lt;/code&gt; renvoie le titre du document si renseign&#233;, sinon le nom du fichier&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;C'est donc pour cela qu'une boucle sera plus pr&#233;cise&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;A-lire-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='A-lire-aussi'&gt;&#192; lire aussi&lt;a class='sommaire-back sommaire-back-4' href='#s-A-lire-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article6461.html' class=&#034;spip_in&#034;&gt;Les balises #LOGO_XXX&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article1823.html' class=&#034;spip_in&#034;&gt;La boucle DOCUMENTS&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article5544.html' class=&#034;spip_in&#034;&gt;#INFO_XXX&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;C'est donc pour cela qu'une boucle sera plus pr&#233;cise&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>_MOTS_CREATION_RETOUR_MOT_CREE</title>
		<link>https://www.spip.net/fr_article6450.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article6450.html</guid>
		<dc:date>2018-09-01T09:13:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>RealET</dc:creator>


		<dc:subject>_MOTS_CREATION_RETOUR_MOT_CREE</dc:subject>

		<description>
&lt;p&gt;La constante _MOTS_CREATION_RETOUR_MOT_CREE permet de changer le comportement de SPIP &#224; la cr&#233;ation d'un mot cl&#233; : avec cette constante, on arrive sur la page des propri&#233;t&#233;s du mot nouvellement cr&#233;&#233; [1]. &lt;br class='autobr' /&gt;
Il est possible de personnaliser cette valeur dans votre fichier config/mes_options.php (voir l'article qui lui est consacr&#233;). &lt;br class='autobr' /&gt;
Exemple : // Revenir &#224; la page de propri&#233;t&#233;s du mot apr&#232;s sa cr&#233;ation if (!defined('_MOTS_CREATION_RETOUR_MOT_CREE')) (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique643.html" rel="directory"&gt;Variables et Constantes de personnalisation&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La constante &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_MOTS_CREATION_RETOUR_MOT_CREE&lt;/code&gt;&lt;/strong&gt; permet de changer le comportement de SPIP &#224; la cr&#233;ation d'un mot cl&#233; : avec cette constante, on arrive sur la page des propri&#233;t&#233;s du mot nouvellement cr&#233;&#233;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Par d&#233;faut, SPIP a un comportement d&#233;rogatoire pour la cr&#233;ation des mots cl&#233; (&#8230;)&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible de personnaliser cette valeur dans votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/mes_options.php&lt;/code&gt; (voir &lt;a href='https://www.spip.net/fr_article4654.html' class=&#034;spip_in&#034;&gt;l'article qui lui est consacr&#233;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exemple :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// Revenir &#224; la page de propri&#233;t&#233;s du mot apr&#232;s sa cr&#233;ation if (!defined('_MOTS_CREATION_RETOUR_MOT_CREE')) define('_MOTS_CREATION_RETOUR_MOT_CREE', true); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Par d&#233;faut, SPIP a un comportement d&#233;rogatoire pour la cr&#233;ation des mots cl&#233; : alors que les autres objets de SPIP font arriver sur la page des propri&#233;t&#233;s de l'objet nouvellement cr&#233;&#233;, dans le cas des mots cl&#233;s, SPIP ram&#232;ne &#224; la page qui contenait le bouton de cr&#233;ation (soit la page listant tous les groupes de mots, soit la page du groupe)&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Cette constante est disponible &#224; partir de SPIP 3.1.9 et SPIP 3.2.2&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>_CNIL_PERIODE</title>
		<link>https://www.spip.net/fr_article5253.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article5253.html</guid>
		<dc:date>2010-09-08T16:54:28Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>RealET</dc:creator>


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

		<description>
&lt;p&gt;Les adresses IP stock&#233;es dans la table &#171; spip_forum &#187; sont encrypt&#233;es de mani&#232;re non r&#233;versible (algorithme MD5) au bout de 4 mois. &lt;br class='autobr' /&gt; Il est possible de modifier le d&#233;lai avant cryptage des IPs (4 mois par d&#233;faut) en d&#233;finissant cette constante dans votre fichier config/mes_options.php (voir l'article qui lui est consacr&#233;). &lt;br class='autobr' /&gt;
Par exemple : // crypter les IP au bout de 2 mois define('_CNIL_PERIODE', 3600*24*31*2) ; &lt;br class='autobr' /&gt;
Pour que SPIP ne crypte jamais les IP vous pouvez d&#233;finir cette constante &#224; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique643.html" rel="directory"&gt;Variables et Constantes de personnalisation&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les adresses IP stock&#233;es dans la table &#171; spip_forum &#187; sont encrypt&#233;es de mani&#232;re non r&#233;versible (algorithme MD5) au bout de 4 mois.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il est possible de modifier le d&#233;lai avant cryptage des IPs (4 mois par d&#233;faut) en d&#233;finissant cette constante dans votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/mes_options.php&lt;/code&gt; (voir l'&lt;a href='https://www.spip.net/fr_article4654.html' class=&#034;spip_in&#034;&gt;article qui lui est consacr&#233;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Par exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// crypter les IP au bout de 2 mois define('_CNIL_PERIODE', 3600*24*31*2); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour que SPIP ne crypte &lt;i&gt;jamais&lt;/i&gt; les IP vous pouvez d&#233;finir cette constante &#224; z&#233;ro :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// ne jamais crypter les IP define('_CNIL_PERIODE', 0); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Ce cryptage s'appuie sur l'article 226-20 du code p&#233;nal fran&#231;ais et les &lt;a href=&#034;https://www.cnil.fr/fr/codes-de-conduite-les-8-bonnes-pratiques-de-la-cnil&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;bonnes pratiques &#233;dit&#233;es par la CNIL&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>_DIR_PLUGINS_AUTO</title>
		<link>https://www.spip.net/fr_article4865.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article4865.html</guid>
		<dc:date>2010-04-22T14:13:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>RealET</dc:creator>


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

		<description>
&lt;p&gt;_DIR_PLUGINS_AUTO d&#233;finit l'emplacement du dossier qui contiendra les plugins installables par le m&#233;canisme de t&#233;l&#233;chargement de plugins int&#233;gr&#233; &#224; SPIP. &lt;br class='autobr' /&gt; _DIR_PLUGINS_AUTO est une cha&#238;ne de caract&#232;res correspondant &#224; un chemin relatif &#224; partir de la racine de SPIP. &lt;br class='autobr' /&gt;
Il est possible de d&#233;finir cette constante dans votre fichier config/mes_options.php (voir l'article qui lui est consacr&#233;). &lt;br class='autobr' /&gt;
D&#233;finir cette constante &#224; la valeur '' (cha&#238;ne vide) permet de d&#233;sactiver compl&#232;tement la (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique643.html" rel="directory"&gt;Variables et Constantes de personnalisation&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_DIR_PLUGINS_AUTO&lt;/code&gt; d&#233;finit l'emplacement du dossier qui contiendra les plugins installables par le m&#233;canisme de t&#233;l&#233;chargement de plugins int&#233;gr&#233; &#224; SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_DIR_PLUGINS_AUTO&lt;/code&gt; est une cha&#238;ne de caract&#232;res correspondant &#224; un chemin relatif &#224; partir de la racine de SPIP.&lt;/p&gt;
&lt;p&gt;Il est possible de d&#233;finir cette constante dans votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/mes_options.php&lt;/code&gt; (voir l'&lt;a href='https://www.spip.net/fr_article4654.html' class=&#034;spip_in&#034;&gt;article qui lui est consacr&#233;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;D&#233;finir cette constante &#224; la valeur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;''&lt;/code&gt; (cha&#238;ne vide) permet de d&#233;sactiver compl&#232;tement la fonctionnalit&#233; d'installation automatique.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// D&#233;sactiver l'installation par t&#233;l&#233;chargement depuis l'administration de SPIP define('_DIR_PLUGINS_AUTO', ''); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par d&#233;faut, cette constante vaut :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;define('_DIR_PLUGINS_AUTO', _DIR_PLUGINS.'auto/'); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C'est &#224; dire : le sous-dossier &lt;i&gt;&#171; auto/ &#187;&lt;/i&gt; dans le dossier &lt;i&gt;&#171; plugins/ &#187;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Voir aussi :
&lt;br /&gt;- &lt;a href='https://www.spip.net/fr_article5296.html' class=&#034;spip_in&#034;&gt;_DIR_PLUGINS_SUPPL&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Formulaires CVT par l'exemple</title>
		<link>https://www.spip.net/fr_article3796.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3796.html</guid>
		<dc:date>2008-12-16T09:45:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic, RealET</dc:creator>


		<dc:subject>#FORMULAIRE</dc:subject>
		<dc:subject>Formulaires CVT</dc:subject>

		<description>&lt;p&gt;La cr&#233;ation de formulaires est extr&#234;mement simplifi&#233;e pour le webmestre ou lors du d&#233;veloppement. Voyons cela &#224; travers un exemple simple et concret.&lt;/p&gt;

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

/ 
&lt;a href="https://www.spip.net/@formulaire" rel="tag"&gt;#FORMULAIRE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@multifrformulairescvtencvtformsesformularioscvtcaformulariscvtmulti" rel="tag"&gt;Formulaires CVT&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;nav69f410d0d861b9.64284454&#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-Etape-1-Creer-le-squelette-de-son-formulaire&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Etape-1-Creer-le-squelette-de-son-formulaire&#034; class=&#034;spip_ancre&#034;&gt;&#201;tape 1 : Cr&#233;er le squelette de son formulaire&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Etape-2-la-fonction-charger&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Etape-2-la-fonction-charger&#034; class=&#034;spip_ancre&#034;&gt;&#201;tape 2 : la fonction charger&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Etape-3-Verifier-que-la-saisie-est-correcte&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Etape-3-Verifier-que-la-saisie-est-correcte&#034; class=&#034;spip_ancre&#034;&gt;&#201;tape 3 : V&#233;rifier que la saisie est correcte&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Etape-4-traiter&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Etape-4-traiter&#034; class=&#034;spip_ancre&#034;&gt;&#201;tape 4 : traiter !&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Le-bonus-des-formulaires-ajax-simplifies&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-bonus-des-formulaires-ajax-simplifies&#034; class=&#034;spip_ancre&#034;&gt;Le bonus : des formulaires ajax simplifi&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Pour-aller-plus-loin&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Pour-aller-plus-loin&#034; class=&#034;spip_ancre&#034;&gt;Pour aller plus loin&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;Etape-1-Creer-le-squelette-de-son-formulaire&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Etape-1-Creer-le-squelette-de-son-formulaire'&gt;&#201;tape 1 : Cr&#233;er le squelette de son formulaire&lt;a class='sommaire-back sommaire-back-6' href='#s-Etape-1-Creer-le-squelette-de-son-formulaire' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dans le sous-r&#233;pertoire formulaires/ de votre dossier &#171; squelettes &#187;, cr&#233;ez le fichier contact.html qui va contenir le code HTML de votre formulaire de contact. Par exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;form action='#ENV{action}' method='post'&gt; #ACTION_FORMULAIRE{#ENV{action}} &lt;label&gt;Votre email&lt;/label&gt; &lt;input type='text' name='email' value='#ENV{email}' /&gt; &lt;br /&gt; &lt;label&gt;Votre message&lt;/label&gt; &lt;textarea name='message'&gt;#ENV{message}&lt;/textarea&gt; &lt;input type='submit' name='ok' value='ok' /&gt; &lt;/form&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le constater, ce formulaire ne contient que quelques particularit&#233;s :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'attribut action de la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;form&gt;&lt;/code&gt; contient &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{action}&lt;/code&gt; qui est l'URL sur laquelle le formulaire sera envoy&#233; ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ACTION_FORMULAIRE{#ENV{action}}&lt;/code&gt; indique &#224; SPIP de transmettre aux fonctions &#171; charger, verifier, traiter &#187; les donn&#233;es saisies et celles contenues &#233;ventuellement dans l'URL (depuis SPIP 2.1 l'argument &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{action}&lt;/code&gt; est en fait inutile, &#233;tant &#224; pr&#233;sent la valeur par d&#233;faut) ;&lt;/li&gt;&lt;li&gt; chaque input, textarea ou select contient la valeur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{xxx}&lt;/code&gt; o&#249; xxx correspond &#224; l'attribut name correspondant.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&#192; ce stade, vous pouvez d&#233;j&#224; afficher ce formulaire dans un squelette, avec la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_CONTACT&lt;/code&gt; ou directement dans le texte d'un article avec le code &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;formulaire|contact&gt;&lt;/code&gt;. Vous appr&#233;cierez de pouvoir tester et affiner le rendu et le contenu de votre formulaire sans &#233;crire une seule ligne de PHP.&lt;/p&gt;
&lt;p&gt;Toutefois, si vous saisissez du texte et cliquez sur le bouton OK, votre formulaire ne fait rien, et vous ne retrouvez pas votre saisie.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Etape-2-la-fonction-charger&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Etape-2-la-fonction-charger'&gt;&#201;tape 2 : la fonction charger&lt;a class='sommaire-back sommaire-back-6' href='#s-Etape-2-la-fonction-charger' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous allons donc maintenant indiquer &#224; SPIP quels sont les champs que l'internaute peut remplir.&lt;/p&gt;
&lt;p&gt;Cr&#233;ez pour cela un fichier contact.php dans le sous-r&#233;pertoire formulaires/ (juste &#224; c&#244;t&#233; de votre squelette contact.html, donc), et mettez-y le code suivant :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php function formulaires_contact_charger_dist(){ $valeurs = array('email'=&gt;'','message'=&gt;''); return $valeurs; } ?&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Que fait ce code ?&lt;/p&gt;
&lt;p&gt;Il d&#233;clare la fonction &lt;strong&gt;charger&lt;/strong&gt; du formulaire &lt;strong&gt;contact&lt;/strong&gt; du r&#233;pertoire &lt;strong&gt;formulaires&lt;/strong&gt; cons&#233;cutivement nomm&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires_contact_charger&lt;/code&gt;.&lt;br class='manualbr' /&gt;Le suffixe _dist signale qu'il s'agit de la fonction charger par d&#233;faut de ce formulaire, mais qu'elle est &#233;ventuellement personnalisable (voir au sujet des surcharges &lt;a href=&#034;http://programmer.spip.org/Surcharger-une-fonction-_dist&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://programmer.spip.org/Surcharg...&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Cette fonction liste, dans la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$valeurs&lt;/code&gt;, les champs de saisie de votre formulaire et, pour chaque champ, la valeur initiale par d&#233;faut.&lt;br class='manualbr' /&gt;La fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires_contact_charger_dist&lt;/code&gt; renvoie donc cette liste de champs.&lt;/p&gt;
&lt;p&gt;Testez &#224; nouveau votre formulaire : si vous remplissez les champs et validez avec le bouton OK, vous verrez que cette fois-ci le formulaire n'a pas perdu les valeurs que vous avez saisies (m&#234;me s'il ne fait toujours rien).&lt;/p&gt;
&lt;p&gt;Dans cet exemple, tous les champs sont vides par d&#233;faut. Nous pourrions am&#233;liorer notre fonction en remplissant automatiquement l'email lorsque le visiteur est identifi&#233;.&lt;br class='manualbr' /&gt;Cela nous donnerait le code suivant pour la fonction charger :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function formulaires_contact_charger_dist(){ $valeurs = array('email'=&gt;'','message'=&gt;''); if (isset($GLOBALS['visiteur_session']['email'])) $valeurs['email'] = $GLOBALS['visiteur_session']['email']; return $valeurs; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si vous testez maintenant votre formulaire, en &#233;tant identifi&#233;, vous constaterez :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; que le champ email est d&#233;j&#224; rempli avec l'email de votre compte SPIP&lt;/li&gt;&lt;li&gt; que les valeurs saisies ou modifi&#233;es sont conserv&#233;es telles quelles apr&#232;s validation&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;Etape-3-Verifier-que-la-saisie-est-correcte&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Etape-3-Verifier-que-la-saisie-est-correcte'&gt;&#201;tape 3 : V&#233;rifier que la saisie est correcte&lt;a class='sommaire-back sommaire-back-6' href='#s-Etape-3-Verifier-que-la-saisie-est-correcte' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Avant de prendre en compte les valeurs saisies par l'internaute nous devons bien &#233;videmment v&#233;rifier que ce qu'il nous envoie est correct.&lt;/p&gt;
&lt;p&gt;Nous allons, par exemple, d&#233;finir les contraintes suivantes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les champs email et message sont obligatoires&lt;/li&gt;&lt;li&gt; l'email doit &#234;tre valide&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour v&#233;rifier la saisie, nous allons cr&#233;er la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires_contact_verifier_dist&lt;/code&gt; (sur le m&#234;me mod&#232;le que la fonction charger) toujours dans le m&#234;me fichier contact.php :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function formulaires_contact_verifier_dist(){ $erreurs = array(); // verifier que les champs obligatoires sont bien la : foreach(array('email','message') as $obligatoire) if (!_request($obligatoire)) $erreurs[$obligatoire] = 'Ce champ est obligatoire'; // verifier que si un email a &#233;t&#233; saisi, il est bien valide : include_spip('inc/filtres'); if (_request('email') AND !email_valide(_request('email'))) $erreurs['email'] = 'Cet email n\'est pas valide'; if (count($erreurs)) $erreurs['message_erreur'] = 'Votre saisie contient des erreurs !'; return $erreurs; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Remarque : l'utilisation de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_request()&lt;/code&gt; est expliqu&#233;e sur le site &lt;a href=&#034;http://programmer.spip.org/_request&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;programmer.spip.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La fonction verifier renvoie une liste de champs en erreurs, avec le message d'erreur correspondant &#224; chaque champ.&lt;/p&gt;
&lt;p&gt;&#192; ce stade, vous ne verrez aucune diff&#233;rence si vous testez le formulaire : en effet, votre formulaire contact.html n'affiche pas les erreurs. Vous allez donc le compl&#233;ter comme suit :&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;p class='formulaire_erreur'&gt;(#ENV*{message_erreur})&lt;/p&gt;] &lt;form action='#ENV{action}' method='post'&gt; #ACTION_FORMULAIRE{#ENV{action}} &lt;label&gt;Votre email&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{email})&lt;/span&gt;] &lt;input type='text' name='email' value='#ENV{email}' /&gt; &lt;br /&gt; &lt;label&gt;Votre message&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{message})&lt;/span&gt;] &lt;textarea name='message'&gt;#ENV{message}&lt;/textarea&gt; &lt;input type='submit' name='ok' value='ok' /&gt; &lt;/form&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez bien :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'affichage d'un message d'erreur g&#233;n&#233;ral renvoy&#233; par la fonction verifier &lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[&lt;p class='reponse_formulaire reponse_formulaire_erreur'&gt;(#ENV*{message_erreur})&lt;/p&gt;]&lt;/code&gt;&lt;/li&gt;&lt;li&gt; les messages d'erreur devant chaque champ :&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[&lt;span class='erreur_message'&gt;(#ENV**{erreurs}|table_valeur{email})&lt;/span&gt;]&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Vous pouvez maintenant tester votre formulaire en saisissant un email erron&#233; ou en laissant un champ vide : votre formulaire commence d&#233;j&#224; &#224; interagir avec l'internaute !&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Etape-4-traiter&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Etape-4-traiter'&gt;&#201;tape 4 : traiter !&lt;a class='sommaire-back sommaire-back-6' href='#s-Etape-4-traiter' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lorsque la fonction verifier ne renvoie aucune erreur, SPIP appelle automatiquement la fonction traiter correspondante. D&#233;clarons cette fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;formulaires_contact_traiter_dist&lt;/code&gt; (toujours dans le fichier contact.php) et faisons-lui envoyer un mail au webmestre :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function formulaires_contact_traiter_dist(){ $envoyer_mail = charger_fonction('envoyer_mail','inc'); $email_to = $GLOBALS['meta']['email_webmaster']; $email_from = _request('email'); $sujet = 'Formulaire de contact'; $message = _request('message'); $envoyer_mail($email_to,$sujet,$message,$email_from); return array('message_ok'=&gt;'Votre message a bien &#233;t&#233; pris en compte. Vous recevrez prochainement une r&#233;ponse !'); } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous remarquerez que la fonction traiter ne fait aucune v&#233;rification : elles ont toutes &#233;t&#233; faites au pr&#233;alable (dans la fonction verifier). Si la fonction traiter est appel&#233;e c'est qu'il n'y a aucune erreur.&lt;/p&gt;
&lt;p&gt;La fonction traiter renvoie un message de succ&#232;s, &#171; message_ok &#187;, contenu dans un tableau. Comme pour les messages d'erreur, il faut compl&#233;ter notre formulaire pour qu'il affiche ce message. Comme suit :&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;p class='formulaire_ok'&gt;(#ENV*{message_ok})&lt;/p&gt;] [&lt;p class='formulaire_erreur'&gt;(#ENV*{message_erreur})&lt;/p&gt;] [(#EDITABLE|oui) &lt;form action='#ENV{action}' method='post'&gt; #ACTION_FORMULAIRE{#ENV{action}} &lt;label&gt;Votre email&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{email})&lt;/span&gt;] &lt;input type='text' name='email' value='#ENV{email}' /&gt; &lt;br /&gt; &lt;label&gt;Votre message&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{message})&lt;/span&gt;] &lt;textarea name='message'&gt;#ENV{message}&lt;/textarea&gt; &lt;input type='submit' name='ok' value='ok' /&gt; &lt;/form&gt; ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez bien :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'affichage d'un message de succ&#232;s au d&#233;but&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[&lt;p class=&#034;formulaire_message&#034;&gt;(#ENV*{message_ok})&lt;/p&gt;]&lt;/code&gt;&lt;/li&gt;&lt;li&gt; l'affichage conditionnel du formulaire de saisie en fonction de #EDITABLE : apr&#232;s la saisie, il est en g&#233;n&#233;ral plus clair pour l'internaute de ne pas r&#233;afficher le formulaire complet mais juste le message de succ&#232;s. #EDITABLE sert &#224; cela.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Astuce : Il arrive parfois que l'on veuille placer une BOUCLE dans le formulaire (pour proposer les champs d'un select depuis la base par exemple). L'utilisation de #EDITABLE et de cette boucle provoque une erreur. La solution est d'y ajouter une boucle CONDITION comme le montre l'exemple ci-apr&#232;s :&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;p class='formulaire_ok'&gt;(#ENV*{message_ok})&lt;/p&gt;] [&lt;p class='formulaire_erreur'&gt;(#ENV*{message_erreur})&lt;/p&gt;] &lt;BOUCLE_editable(CONDITION){si #ENV{editable}|oui}&gt; &lt;form action='#ENV{action}' method='post'&gt; #ACTION_FORMULAIRE{#ENV{action}} &lt;BOUCLE_article(ARTICLES){0,1}&gt;#TITRE&lt;/BOUCLE_article&gt; &lt;label&gt;Votre email&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{email})&lt;/span&gt;] &lt;input type='text' name='email' value='#ENV{email}' /&gt; &lt;br /&gt; &lt;label&gt;Votre message&lt;/label&gt; [&lt;span class='erreur'&gt;(#ENV**{erreurs}|table_valeur{message})&lt;/span&gt;] &lt;textarea name='message'&gt;#ENV{message}&lt;/textarea&gt; &lt;input type='submit' name='ok' value='ok' /&gt; &lt;/form&gt; &lt;/BOUCLE_editable&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;C'est fini&lt;/strong&gt; ! Vous pouvez utiliser votre formulaire de contact.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Le-bonus-des-formulaires-ajax-simplifies&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Le-bonus-des-formulaires-ajax-simplifies'&gt;Le bonus : des formulaires ajax simplifi&#233;s&lt;a class='sommaire-back sommaire-back-6' href='#s-Le-bonus-des-formulaires-ajax-simplifies' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vous souhaitez que l'interaction entre votre formulaire et l'internaute soit plus rapide et ne passe pas par le rechargement complet de la page &#224; chaque erreur ou lors de la validation ?&lt;/p&gt;
&lt;p&gt;Il faut que votre formulaire soit impl&#233;ment&#233; en AJAX. D'habitude c'est l&#224; que se situe la difficult&#233;, ce type d'impl&#233;mentation &#233;tant souvent long et laborieux. Mais c'est simplifi&#233; dans SPIP, par le formalisme CVT, qui vous fait b&#233;n&#233;ficier de m&#233;canismes automatis&#233;s, dont l'ajaxisation de vos formulaires.&lt;/p&gt;
&lt;p&gt;Pour cela, il suffit de placer votre formulaire dans une div dot&#233;e de la class ajax :&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;div class='ajax'&gt; #FORMULAIRE_CONTACT &lt;/div&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Et le tour est jou&#233; !&lt;/strong&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Pour-aller-plus-loin&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Pour-aller-plus-loin'&gt;Pour aller plus loin&lt;a class='sommaire-back sommaire-back-6' href='#s-Pour-aller-plus-loin' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;- Cet exemple simple ne produit pas un joli formulaire. Pour un r&#233;sultat plus esth&#233;tique, s&#233;mantique et accessible, n'h&#233;sitez pas &#224; utiliser les recommandations de structures de &lt;a href='https://www.spip.net/fr_article3791.html' class=&#034;spip_in&#034;&gt;Structure HTML des formulaires de SPIP&lt;/a&gt; pour tous vos formulaires SPIP
&lt;br /&gt;- Tout savoir sur la fonction &lt;i&gt;charger()&lt;/i&gt; : &lt;a href='https://www.spip.net/fr_article4151.html' class=&#034;spip_in&#034;&gt;La fonction charger() des formulaires CVT&lt;/a&gt;
&lt;br /&gt;- Tout savoir sur la fonction &lt;i&gt;verifier() &lt;/i&gt; : &lt;a href='https://www.spip.net/fr_article4152.html' class=&#034;spip_in&#034;&gt;La fonction verifier() des formulaires CVT&lt;/a&gt;
&lt;br /&gt;- Tout savoir sur la fonction &lt;i&gt;traiter()&lt;/i&gt; : &lt;a href='https://www.spip.net/fr_article4153.html' class=&#034;spip_in&#034;&gt;La fonction traiter() des formulaires CVT&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>`{ajax}` pour les `inclure`</title>
		<link>https://www.spip.net/fr_article3753.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3753.html</guid>
		<dc:date>2008-12-16T09:22:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cam.lafit, cerdic, JLuc, RealET</dc:creator>


		<dc:subject>INCLURE</dc:subject>
		<dc:subject>ajax</dc:subject>

		<description>
&lt;p&gt;Le crit&#232;re ajax permet de cliquer sur un lien et de ne rafraichir dans la page que la zone qui changerait si on r&#233;-affichait toute la page avec les nouveaux param&#232;tres. &lt;br class='autobr' /&gt; En pratique &lt;br class='autobr' /&gt;
Le principe est de rendre AJAX abordable car la complexit&#233; est cach&#233;e : &lt;br class='autobr' /&gt;
J'ai un morceau de page qui contient des liens vers cette m&#234;me page et ne provoquent de changement que dans le morceau de page consid&#233;r&#233; : je mets ce morceau de page dans un squelette s&#233;par&#233; je marque les liens concern&#233;s par la class (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.spip.net/fr_rubrique470.html" rel="directory"&gt;Gestion des squelettes&lt;/a&gt;

/ 
&lt;a href="https://www.spip.net/@inclure" rel="tag"&gt;INCLURE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@ajax" rel="tag"&gt;ajax&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{ajax}&lt;/code&gt; permet de cliquer sur un lien et de ne rafraichir dans la page que la zone qui changerait si on r&#233;-affichait toute la page avec les nouveaux param&#232;tres.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69f410d0db3ab6.83550819&#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-En-pratique&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#En-pratique&#034; class=&#034;spip_ancre&#034;&gt;En pratique&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-En-detail&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#En-detail&#034; class=&#034;spip_ancre&#034;&gt;En d&#233;tail&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Quelques-exemples&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Quelques-exemples&#034; class=&#034;spip_ancre&#034;&gt;Quelques exemples&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Limites-et-cas-particuliers&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Limites-et-cas-particuliers&#034; class=&#034;spip_ancre&#034;&gt;Limites et cas particuliers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Modalites-complementaires&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Modalites-complementaires&#034; class=&#034;spip_ancre&#034;&gt;Modalit&#233;s compl&#233;mentaires&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Rechargement-telecommande-de-blocs-ajax&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Rechargement-telecommande-de-blocs-ajax&#034; class=&#034;spip_ancre&#034;&gt;Rechargement t&#233;l&#233;command&#233; de blocs ajax&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;En-pratique&#034;&gt;&lt;h2 class=&#034;h2&#034; id='En-pratique'&gt;En pratique&lt;a class='sommaire-back sommaire-back-7' href='#s-En-pratique' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le principe est de rendre &lt;i&gt;AJAX&lt;/i&gt; abordable car la complexit&#233; est cach&#233;e :&lt;/p&gt;
&lt;p&gt;J'ai un morceau de page qui contient des liens vers cette m&#234;me page et &lt;br class='autobr' /&gt;
ne provoquent de changement que dans le morceau de page consid&#233;r&#233; :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; je mets ce morceau de page dans un squelette s&#233;par&#233;&lt;/li&gt;&lt;li&gt; je marque les liens concern&#233;s par la class ajax : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a href='monlien' class='ajax'&gt;...&lt;/a&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; j'inclus mon squelette dans la page principale avec&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=monskel,ajax,env}&gt;&lt;/code&gt; ou &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE{fond=monskel,ajax,env}&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Et c'est tout !&lt;/p&gt;
&lt;p&gt;Quelques petites pr&#233;cisions tout de m&#234;me :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; testez toujours d'abord votre squelette sans l'argument &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{ajax}&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{ajax}&lt;/code&gt; devrait toujours &#234;tre accompagn&#233; de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{env}&lt;/code&gt; afin d'&#233;viter tout risque d'injection d'urls dans le cache de SPIP ;&lt;/li&gt;&lt;li&gt; par defaut, les liens &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;a&lt;/code&gt; contenus dans une classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pagination&lt;/code&gt; sont aussi ajax&#233;s ;&lt;/li&gt;&lt;li&gt; il est possible de cibler d'autres liens en sp&#233;cifiant leurs s&#233;lecteurs CSS jquery dans la variable javascript &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajaxbloc_selecteur&lt;/code&gt;. Exemple : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;var ajaxbloc_selecteur = 'a.ajax, a.uneautreclasse';&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; il faut bien entendu que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INSERT_HEAD&lt;/code&gt; figure dans le head du squelette de la page, et que le javascript soit activ&#233; dans le navigateur de l'internaute qui la consulte.&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;En-detail&#034;&gt;&lt;h2 class=&#034;h2&#034; id='En-detail'&gt;En d&#233;tail&lt;a class='sommaire-back sommaire-back-7' href='#s-En-detail' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Syntaxe d'appel &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;INCLURE{fond=mon_fond,ajax,env}&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#INCLURE{fond=mon_fond,ajax,env})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cet appel inclut le squelette mon_fond en &#171; ajaxant &#187; automatiquement tous les liens cibl&#233;s par la variable js &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajaxbloc_selecteur&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Un bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;div ..&gt;&lt;/div&gt;&lt;/code&gt; est ins&#233;r&#233; automatiquement autour du contenu du squelette inclus, pour le m&#233;canisme de gestion de l'ajax.&lt;/p&gt;
&lt;p&gt;Par d&#233;faut celle-ci cible les s&#233;lecteurs CSS &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.pagination a, a.ajax&lt;/code&gt;. Autrement dit, il faut avoir dans le code source des squelettes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit la gestion standard de la pagination par SPIP. A condition que la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#PAGINATION&lt;/code&gt; soit inclue dans un &#233;l&#233;ment de classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pagination&lt;/code&gt;. Ex : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;p&gt;#PAGINATION&lt;/p&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; soit une classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajax&lt;/code&gt; sur les liens (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a class=&#034;ajax&#034; href=...&gt;&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le hit ajax relance automatiquement le calcul du squelette inclus seul en restaurant son &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt;, et en y ajoutant les param&#232;tres pass&#233;s dans l'url du lien&lt;/p&gt;
&lt;p&gt;Le bloc recharg&#233; passe en opacit&#233; 50 % et prend la class &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;loading&lt;/code&gt; pendant le chargement ce qui permet de le styler &#224; sa convenance.&lt;/p&gt;
&lt;p&gt;Il est int&#233;ressant de noter que :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les liens &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajax&lt;/code&gt; sont mis en cache dans le navigateur lorsqu'ils sont cliqu&#233;s une fois. Le bloc n'est donc charg&#233; qu'une fois, m&#234;me si l'internaute revient plusieurs fois sur le lien concern&#233;&lt;/li&gt;&lt;li&gt; certains liens peuvent &#234;tre pr&#233;-charg&#233;s &#224; l'avance en leur ajoutant la classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;preload&lt;/code&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;Quelques-exemples&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Quelques-exemples'&gt;Quelques exemples&lt;a class='sommaire-back sommaire-back-7' href='#s-Quelques-exemples' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Utilisation de liens ajax&lt;/strong&gt;&lt;br class='manualbr' /&gt;Soit le squelette &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc-liens.html&lt;/code&gt;&lt;br class='autobr' /&gt;
Il sera appel&#233;e dans le squelette incluant par&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;[(#INCLURE{fond=inc-liens,ajax,env})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et contiendra&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_liste(AUTEURS) &gt; &lt;a class=&#034;ajax&#034; href=&#034;[(#SELF|parametre_url{id_auteur,#ID_AUTEUR})]&#034;&gt; #NOM #ID_AUTEUR &lt;/a&gt; &lt;/BOUCLE_liste&gt; [(#ENV{id_auteur}|oui) #ENV{id_auteur} ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Utilisation de la pagination&lt;/strong&gt;&lt;br class='manualbr' /&gt;Pour la pagination, prenons un exemple tir&#233; de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;squelettes-dist/sommaire.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mettons dans un squelette &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc-recents.html&lt;/code&gt; la boucle qui liste les articles r&#233;cents :&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;[(#REM) Derniers articles ] &lt;B_articles_recents&gt; &lt;div class=&#034;menu articles&#034;&gt; [(#ANCRE_PAGINATION)] &lt;h2&gt;&lt;:derniers_articles:&gt;&lt;/h2&gt; &lt;ul&gt; &lt;BOUCLE_articles_recents(ARTICLES) {par date}{inverse} {pagination 5}&gt; &lt;li class=&#034;hentry&#034;&gt; [(#LOGO_ARTICLE_RUBRIQUE|#URL_ARTICLE|image_reduire{150,100})] &lt;h3 class=&#034;entry-title&#034;&gt;&lt;a href=&#034;#URL_ARTICLE&#034; rel=&#034;bookmark&#034;&gt;#TITRE&lt;/a&gt;&lt;/h3&gt; &lt;abbr class=&#034;published&#034;[ title=&#034;(#DATE|date_iso)&#034;]&gt;[(#DATE|affdate_jourcourt)]&lt;/abbr&gt;[, &lt;:par_auteur:&gt; (#LESAUTEURS)] [&lt;div class=&#034;#EDIT{intro} introduction entry-content&#034;&gt;(#INTRODUCTION)&lt;/div&gt;] &lt;/li&gt; &lt;/BOUCLE_articles_recents&gt; &lt;/ul&gt; [&lt;p class=&#034;pagination&#034;&gt;(#PAGINATION)&lt;/p&gt;] &lt;/div&gt; &lt;/B_articles_recents&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il suffit alors de mettre dans sommaire.html, &#224; la place de cette 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;INCLURE{fond=inc-recents,ajax,env}&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;Limites-et-cas-particuliers&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Limites-et-cas-particuliers'&gt;Limites et cas particuliers&lt;a class='sommaire-back sommaire-back-7' href='#s-Limites-et-cas-particuliers' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Ce m&#233;canisme automatis&#233; d'ajaxisation des blocs repose sur une hypoth&#232;se : par d&#233;faut, un lien ajax ne permet de rafra&#238;chir que le bloc le contenant, en ins&#233;rant la version modifi&#233;e au m&#234;me endroit. &#192; noter qu'il est possible, &#224; partir d'un bloc, de recharger un autre bloc de la page, en utilisant &lt;a href=&#034;#ajaxreload&#034; class=&#034;spip_ancre&#034;&gt;la technique d&#233;crite plus bas&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Par ailleurs, il est important de noter que le calcul du squelette inclus ne doit reposer exclusivement que sur les param&#232;tres pass&#233;s en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt;. En effet, lors du calcul du bloc ajax, celui-ci sera recalcul&#233; tout seul, en dehors du squelette appelant. Seules les variables contenues dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; seront restaur&#233;es.&lt;/p&gt;
&lt;p&gt;Ainsi, il n'est pas possible de faire r&#233;f&#233;rence &#224; des variables php globales : celles-ci ne seront pas restaur&#233;es au moment du calcul du bloc ajax. Si vous vouliez vraiment utiliser des variables globales php, il faut les r&#233;injecter dans le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; au moment de l'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;INCLURE{fond=monskel,ajax,env,parametre=#EVAL{$GLOBALS['toto']}}&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;Modalites-complementaires&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Modalites-complementaires'&gt;Modalit&#233;s compl&#233;mentaires&lt;a class='sommaire-back sommaire-back-7' href='#s-Modalites-complementaires' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href='https://www.spip.net/fr_article5427.html' class=&#034;spip_in&#034;&gt;SPIP 3.0&lt;/a&gt; am&#233;liore le m&#233;canisme :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Historique de navigation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les liens &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.ajax&lt;/code&gt; ne cassent plus l'historique de navigation sur les navigateurs qui supportent l'API HTML5 History (Firefox, Safari, Chrome &#224; la date de cet article). C'est-&#224;-dire que lorsqu'on clique sur un lien ajax de SPIP qui recharge une partie de la page, l'URL est mise &#224; jour dans le navigateur et le visiteur peut cliquer sur Pr&#233;c&#233;dent pour revenir en arri&#232;re.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Classes sp&#233;ciales sur les liens ajax &lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.nohistory&lt;/code&gt; indique que le lien n'affecte pas l'historique de navigation lorsqu'il est cliqu&#233; ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.preload&lt;/code&gt; indique &#224; SPIP que le contenu du lien ajax doit &#234;tre pr&#233;charg&#233; au moment o&#249; la page est charg&#233;e. Ainsi le clic sur le lien produira une mise &#224; jour imm&#233;diate ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.nocache&lt;/code&gt; indique &#224; SPIP que le contenu du lien ajax ne doit pas &#234;tre mis en cache. Ainsi plusieurs clics sur le m&#234;me lien provoqueront autant de chargements depuis le serveur (par d&#233;faut, seul le premier chargement &#224; lieu pour une url donn&#233;e et le contenu est ensuite m&#233;moris&#233; par le navigateur).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;#BOUTON_ACTION&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#BOUTON_ACTION&lt;/code&gt; peuvent d&#233;clencher le rechargement du bloc incluant en ajax.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;ajaxreload&#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;Rechargement-telecommande-de-blocs-ajax&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Rechargement-telecommande-de-blocs-ajax'&gt;Rechargement t&#233;l&#233;command&#233; de blocs ajax &lt;a class='sommaire-back sommaire-back-7' href='#s-Rechargement-telecommande-de-blocs-ajax' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Les liens &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.ajax&lt;/code&gt; permettent par d&#233;faut le rechargement du bloc ajax qui les contient, mais il est parfois n&#233;cessaire de provoquer le rechargement d'un autre bloc ajax de la page.&lt;/p&gt;
&lt;p&gt;Pour cela, il devient possible, au moment de leur inclusion, de nommer les blocs ajax qui doivent pouvoir &#234;tre recharg&#233;s :&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=...,ajax=nomdubloc} /&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le bloc ajax ainsi nomm&#233; peut ensuite &#234;tre recharg&#233; via l'appel de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ajaxReload('nomdubloc')&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible de passer en second argument une liste d'options contenant :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;callback&lt;/code&gt; : fonction callback qui doit &#234;tre appel&#233;e apr&#232;s le chargement ajax du bloc&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;args&lt;/code&gt; : liste d'argument qui seront pass&#233;s &#224; l'url lors du chargement du bloc (permet de modifier le #ENV du bloc mis &#224; jour) ;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;history&lt;/code&gt; : indique si le rechargement affecte ou non l'historique de navigation (faux par d&#233;faut).&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Exemple&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;javascript&#034; class='spip_code spip_code_block language-javascript' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;ajaxReload('nomdubloc', { callback:function(){alert('fini');}, args:{id_article:3}, history:false }); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ajaxReload peut &#234;tre utilis&#233; &#233;galement sur un s&#233;lecteur jQuery auquel cas il provoquera le rechargement du plus petit bloc ajax qui contient l'&#233;l&#233;ment cibl&#233;. Il ne prend alors qu'un argument possible (le tableau d'options) : &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$('#contenu').ajaxReload({args:{id_article:3}})&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;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-7' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article1828.html' class=&#034;spip_in&#034;&gt;&lt;INCLURE&gt; d'autres squelettes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article4583.html' class=&#034;spip_in&#034;&gt;Ajax dans un #BOUTON_ACTION&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Documentation &lt;a href=&#034;https://programmer.spip.net/995&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&#034;Blocs-ajax-et-ajaxReload&#034;&lt;/a&gt; sur programmer.spip.net&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://contrib.spip.net/Controleur-Vue-avec-ajaxReload&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;AjaxReload par l'exemple&lt;/a&gt; &lt;br class='autobr' /&gt;
et &lt;a href=&#034;https://contrib.spip.net/Exemple-de-bloc-telecommande-en-Ajax&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Exemple de bloc t&#233;l&#233;command&#233; en Ajax&lt;/a&gt; sur contrib.spip.net&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
