<?xml 
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel xml:lang="fr">
	<title>SPIP</title>
	<link>http://www.spip.net/</link>
	<description>Syst&#232;me de Publication pour Internet</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>

	<image>
		<title>SPIP</title>
		<url>http://www.spip.net/local/cache-vignettes/L144xH49/siteon0-56029.jpg</url>
		<link>http://www.spip.net/</link>
		<height>49</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>SPIP 3.0</title>
		<link>http://www.spip.net/fr_article5427.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5427.html</guid>
		<dc:date>2012-05-19T11:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic, tetue</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;SPIP 3 : une nouvelle version marqu&#233;e par la r&#233;&#233;criture compl&#232;te de l'espace priv&#233; en squelettes, une forte modularisation et une boucle DATA r&#233;volutionnaire.&lt;br class=&#039;autobr&#039; /&gt;
SPIP 2.0 avait apport&#233; les fonctionnalit&#233;s permettant de l'utiliser comme un &#171; framework &#187; pour le d&#233;veloppement d'applications Web, au-del&#224; de sa vocation initiale de simple outil de publication.&lt;br class=&#039;autobr&#039; /&gt;
SPIP 3 pousse la logique du &#171; framework &#187; jusqu'&#224; se l'appliquer &#224; lui-m&#234;me : l'ensemble de l'espace priv&#233; de SPIP a &#233;t&#233; recod&#233; en squelettes, sur la (...)&lt;/p&gt;


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

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;img class=&#039;spip_logos&#039; alt=&quot;&quot; align=&quot;right&quot; src=&quot;http://www.spip.net/local/cache-vignettes/L150xH95/arton5427-93cea.jpg&quot; width=&#039;150&#039; height=&#039;95&#039; style=&#039;&#039; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; : une nouvelle version marqu&#233;e par la r&#233;&#233;criture compl&#232;te de l'espace priv&#233; en squelettes, une forte modularisation et une boucle DATA r&#233;volutionnaire.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;a href=&quot;http://www.spip.net/fr_article3784.html&quot; class=&#039;spip_in&#039; hreflang=&#039;fr&#039;&gt;&lt;span style=&#039;color: #273494;&#039;&gt;SPIP 2.0&lt;/span&gt;&lt;/a&gt; avait apport&#233; les fonctionnalit&#233;s permettant de l'utiliser comme un &#171; framework &#187; pour le d&#233;veloppement d'applications Web, au-del&#224; de sa vocation initiale de simple outil de publication.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; pousse la logique du &#171; framework &#187; jusqu'&#224; se l'appliquer &#224; lui-m&#234;me : l'ensemble de l'espace priv&#233; de SPIP a &#233;t&#233; recod&#233; en squelettes, sur la base des outils et fonctions propos&#233;s par le langage de squelettes de SPIP.&lt;/p&gt; &lt;p&gt;Cette remise &#224; plat de l'espace priv&#233; a &#233;t&#233; l'occasion de repenser le fonctionnement des objets &#233;ditoriaux et de normaliser leur usage pour le rendre le plus g&#233;n&#233;rique possible : la plupart des particularit&#233;s historiques de chaque objet (et les exceptions de traitement associ&#233;es dans le code de SPIP) ont &#233;t&#233; gomm&#233;es pour &#234;tre ramen&#233;es &#224; une simple d&#233;claration.&lt;/p&gt; &lt;p&gt;La cr&#233;ation de nouveaux objets &#233;ditoriaux et la personnalisation des objets existants deviennent ainsi beaucoup plus faciles et plus rapides.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; ach&#232;ve &#233;galement la d&#233;coupe du logiciel en plugins comme SPIP 2 l'avait amorc&#233; : l'ensemble des fonctionnalit&#233;s propos&#233;es par SPIP 2 repose dor&#233;navant sur un noyau &lt;strong&gt;SPIP 3&lt;/strong&gt; accompagn&#233; de 23 plugins.&lt;/p&gt; &lt;p&gt;La d&#233;coupe compl&#232;te du noyau a permis de compl&#233;ter ses API et points d'entr&#233;e pour les d&#233;veloppeurs de plugins.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; se nourrit fortement des d&#233;veloppements de la communaut&#233; SPIP-Zone, et marque une forte inversion : ce n'est plus le noyau qui tire les d&#233;veloppements des plugins, mais les d&#233;veloppements de plugins qui nourrissent l'avanc&#233;e de SPIP par leurs exp&#233;rimentations&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb1&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Outre le Porte-plume d&#233;j&#224; int&#233;gr&#233; dans SPIP 2 et qui initiait ce mouvement, on (...)&#039; id=&#039;nh1&#039;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;Parmi de nombreuses autres nouveaut&#233;s fonctionnelles, &lt;strong&gt;SPIP 3&lt;/strong&gt; introduit une nouvelle &lt;a href=&quot;http://www.spip.net/fr_article5444.html&quot; class=&#039;spip_in&#039;&gt;boucle DATA&lt;/a&gt; qui permet enfin de boucler sur tout type de donn&#233;es et plus seulement sur les tables SQL. Il devient ainsi possible de parcourir soit une &#233;num&#233;ration, soit un &lt;a href=&quot;http://www.spip.net/fr_article5443.html&quot; class=&#039;spip_in&#039;&gt;fichier CSV, XML, YAML&lt;/a&gt;... Plus fort encore, la boucle DATA permet directement de boucler sur une URL : il devient possible de parcourir directement une feuille de calcul Google Spreadsheet, un &lt;a href=&quot;http://www.spip-contrib.net/Plugin-iCalendar&quot; class=&#039;spip_out&#039; hreflang=&#039;fr&#039; rel=&#039;external&#039;&gt;calendrier en ligne&lt;/a&gt;, une liste de &lt;a href=&quot;http://www.spip.net/fr_article5445.html&quot; class=&#039;spip_in&#039;&gt;vid&#233;os sur Youtube&lt;/a&gt;, des &lt;a href=&quot;http://www.spip.net/fr_article5445.html&quot; class=&#039;spip_in&#039;&gt;photos sur Flickr&lt;/a&gt;&#8230; le Web devient votre base de donn&#233;es !&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pr&#233;requis&lt;/strong&gt; :&lt;br class=&#039;autobr&#039; /&gt;
&lt;strong&gt;&lt;span style=&quot;color:#00CAD8&quot;&gt;SPIP 3.0&lt;/span&gt;&lt;/strong&gt; requiert d&#233;sormais au minimum une version 5.1.0 de PHP pour pouvoir fonctionner correctement.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Un nouvel espace priv&#233;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb2&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Ce chantier avait &#233;t&#233; amorc&#233; depuis quelque temps sur la Zone, et ceux qui (...)&#039; id=&#039;nh2&#039;&gt;2&lt;/a&gt;]&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Visuellement, l'espace priv&#233; demeure dans la continuit&#233; des versions pr&#233;c&#233;dentes, compl&#233;t&#233;e de nouvelles ic&#244;nes, avec :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; pour les ic&#244;nes principales de navigation, un &lt;a href=&quot;http://sevcommunication.com/De-nouvelles-icones-pour-SPIP-3&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;jeu sp&#233;cifique r&#233;alis&#233; pour SPIP par S&#233;bastien Desbeno&#238;t&lt;/a&gt;,&lt;/li&gt;&lt;li&gt; pour le reste de la page, l'adoption d'un jeu d&#233;riv&#233; de FatCow.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La refonte de l'interface est essentiellement technique, m&#234;me si elle a &#233;galement permis de r&#233;soudre un certain nombre de d&#233;fauts ergonomiques historiques.&lt;/p&gt; &lt;p&gt;La navigation principale est repens&#233;e et r&#233;organis&#233;e. Le menu d&#233;roulant, d&#233;sormais enti&#232;rement navigable au clavier, int&#232;gre aussi des temporisations pour faciliter son utilisation &#224; la souris et &#234;tre plus robuste aux mouvements mal contr&#244;l&#233;s.&lt;/p&gt; &lt;p&gt;L'ensemble de l'espace priv&#233; est donc r&#233;&#233;crit sous forme de squelettes rang&#233;s dans le r&#233;pertoire &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;prive/squelettes&lt;/code&gt;&lt;/strong&gt; organis&#233;s par sous-dossiers correspondants &#224; un d&#233;coupage de la page en blocs. Ce d&#233;coupage est utilis&#233; notamment pour le rafra&#238;chissement des morceaux de page en Ajax, &#233;vitant le rechargement complet des pages et fluidifiant les interactions&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb3&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Par exemple, le passage en &#233;dition sur un article devient instantan&#233; gr&#226;ce au (...)&#039; id=&#039;nh3&#039;&gt;3&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;De nombreux points d'entr&#233;e (utilis&#233;s en premier lieu par les plugins du noyau) sont disponibles sous forme de pipeline pour permettre aux plugins d'&#233;tendre les fonctionnalit&#233;s de l'espace priv&#233;.&lt;/p&gt; &lt;p&gt;Les pages de l'espace priv&#233; sont r&#233;organis&#233;es et renomm&#233;es. En particulier toutes les pages d'objets &#233;ditoriaux utilisent un nommage coh&#233;rent fond&#233; sur le nom de l'objet.&lt;/p&gt; &lt;p&gt;La r&#233;&#233;criture a &#233;galement permis de remettre &#224; niveau la structure compl&#232;te du HTML et son accessibilit&#233;. Un r&#233;f&#233;rentiel a &#233;t&#233; mis en place pour que les d&#233;veloppeurs de plugins puissent r&#233;utiliser les m&#234;mes structures, et que les ajouts d'interface restent homog&#232;nes avec le noyau.&lt;/p&gt; &lt;p&gt;Toutes les listes d'objet sont des squelettes qu'il devient facile de personnaliser. Elles b&#233;n&#233;ficient toutes du tri par colonne et de pagination ajax.&lt;/p&gt; &lt;p&gt;Un syst&#232;me d'&#233;chafaudage des pages d'objet permet de construire automatiquement une interface minimale pour les nouveaux objets d&#233;clar&#233;s par les plugins. Chaque &#233;l&#233;ment de cette interface par d&#233;faut peut ensuite &#234;tre personnalis&#233; en fonction des particularit&#233;s de chaque objet :&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb4&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; id=&#039;nh4&#039;&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;Tous les formulaires interactifs sont &#233;crits sous forme de formulaires CVT, ce qui permet d'assurer des interactions de qualit&#233; avec gestion syst&#233;matique des messages d'erreur, v&#233;rification de saisie, ajax robuste &#224; volont&#233;, saisie multipage si n&#233;cessaire&#8230; Ils sont ainsi tous facilement extensibles par les plugins.&lt;/p&gt; &lt;p&gt;Autre nouveaut&#233;, en mode &#233;dition SPIP 3 prend en compte le retour &#224; la ligne simple (il n'est d&#233;sormais plus n&#233;cessaire d'utiliser &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;_ &lt;/code&gt; &#187;).&lt;/p&gt; &lt;p&gt;Enfin, l'espace priv&#233; int&#232;gre un m&#233;canisme technique de th&#232;mes qui permet de personnaliser les feuilles de style ou tout ou partie des ic&#244;nes. Ce m&#233;canisme pourra &#234;tre utilis&#233; par un plugin proposant des variantes activables par chaque utilisateur en fonction de ses pr&#233;f&#233;rences.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Modularisation en plugins&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; ach&#232;ve donc la d&#233;coupe du logiciel en plugins. Son noyau conserve la gestion des articles, rubriques et auteurs ; le langage de squelettes et l'ossature de l'espace priv&#233;. Toutes les autres fonctionnalit&#233;s sont externalis&#233;es dans des plugins, automatiquement install&#233;s dans la distribution par d&#233;faut de &lt;strong&gt;SPIP 3&lt;/strong&gt;. Ces plugins fournis par d&#233;faut sont d&#233;sormais plac&#233;s dans un dossier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;plugins-dist/&lt;/code&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb5&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;en SPIP 2.1 ils &#233;taient plac&#233;s dans le dossier d&#233;sormais inutile.&#039; id=&#039;nh5&#039;&gt;5&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Cette d&#233;coupe du noyau a permis de compl&#233;ter un certain nombre d'API implicites, maintenant &#224; disposition des d&#233;veloppeurs de plugins qui peuvent ainsi ajouter des fonctionnalit&#233;s sans limite, en prenant mod&#232;le sur les plugins natifs de SPIP.&lt;/p&gt; &lt;p&gt;Dans le domaine des plugins, &lt;strong&gt;SPIP 3&lt;/strong&gt; am&#232;ne &#233;galement une refonte importante du formalisme de d&#233;claration XML. Outre une lisibilit&#233; am&#233;lior&#233;e, cette &#233;volution int&#232;gre la question des traductions de plugins, ainsi que les outils d'alimentation automatique d'un annuaire des plugins de SPIP et un outil de chargement.&lt;/p&gt; &lt;p&gt;Par ailleurs, les plugins peuvent b&#233;n&#233;ficier des fonctions de mise &#224; jour de base de donn&#233;es du core (avec reprise sur timeout) par simple d&#233;claration de la proc&#233;dure.&lt;/p&gt; &lt;p&gt;Les plugins distribu&#233;s par d&#233;faut avec SPIP sont :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;Br&#232;ves&lt;/strong&gt; s'occupe de l'objet &#233;ditorial Br&#232;ves.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Compagnon&lt;/strong&gt; propose l'affichage de textes p&#233;dagogiques d'information et d'accompagnement lors des premiers acc&#232;s &#224; l'espace priv&#233;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Compresseur&lt;/strong&gt; d&#233;j&#224; pr&#233;sent dans SPIP 2.1, prend en charge l'optimisation des performances du site en compressant et concat&#233;nant les feuilles de style CSS et les fichiers JavaScript embarqu&#233;s dans la page. Cette version du plugin am&#233;liore des feuilles par m&#233;dia. Utilisation de @media pour concat&#233;ner tous les m&#233;dias en un seul fichier sans en modifier l'ordre de chargement. Gestion des urls absolues sans protocole pour que les feuilles de style compress&#233;es fonctionnent sur http et https.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Dump&lt;/strong&gt; assure la gestion des sauvegardes et restaurations. La fonctionnalit&#233; a &#233;t&#233; compl&#232;tement r&#233;-&#233;crite pour assurer une sauvegarde compl&#232;te et fiable. Le format de sauvegarde est maintenant SQLite et toutes les tables sont syst&#233;matiquement conserv&#233;es.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Forum&lt;/strong&gt; g&#232;re l'objet &#233;ditorial &lt;i&gt;forum&lt;/i&gt;, tant pour le site public que pour les interactions &#233;ditoriales dans l'espace priv&#233;. Outre une interface de mod&#233;ration repens&#233;e, les forums sont maintenant utilisables sur tous les objets &#233;ditoriaux de SPIP (natifs ou ajout&#233;s par des plugins).&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Images&lt;/strong&gt;, d&#233;j&#224; dans SPIP 2.1, prend en charge tous les filtres d'images et de couleurs dans les squelettes.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;jQuery UI&lt;/strong&gt; impl&#233;mente dans SPIP la librairie compl&#233;mentaire. jQuery UI facilite la cr&#233;ation de composants graphiques dynamiques : onglets, drag &amp; drop, barres de progression, widgets, effets&#8230;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Mediabox&lt;/strong&gt; int&#232;gre dans SPIP par d&#233;faut une bo&#238;te &lt;i&gt;pop-in&lt;/i&gt; pour visualiser les m&#233;dias ou proposer des interactions&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb6&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;C'est une alternative aux plugin Thickbox, LightBox... qui repose sur la (...)&#039; id=&#039;nh6&#039;&gt;6&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Medias&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb7&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Connu pour SPIP 2 sous le nom &quot;M&#233;diath&#232;que&quot;&#039; id=&#039;nh7&#039;&gt;7&lt;/a&gt;]&lt;/span&gt;&lt;/strong&gt; prend en charge la gestion des documents et images. Il propose une refonte de l'interface et rend les documents utilisables sur n'importe quel objet &#233;ditorial.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Mots&lt;/strong&gt; apporte la gestion des mots-cl&#233;s et groupes de mots. Les mots-cl&#233;s sont maintenant utilisables sur tous les objets &#233;ditoriaux.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Organiseur&lt;/strong&gt; assure les fonctions de messagerie et calendrier interne de l'espace priv&#233;. L'interface est compl&#232;tement refondue. La messagerie interne b&#233;n&#233;ficie de notification par email, et le calendrier repose sur la librairie FullCalendar qui permet une navigation fluide.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;P&#233;titions&lt;/strong&gt; g&#232;re les p&#233;titions sur articles et propose une interface de mod&#233;ration repens&#233;e.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Porte plume&lt;/strong&gt;, d&#233;j&#224; dans SPIP 2.1, assure l'aide &#224; la saisie.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;R&#233;visions&lt;/strong&gt; assure le versionage utilisable sur tous les objets &#233;ditoriaux de SPIP. L'interface de gestion des r&#233;visions est modernis&#233;e.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;SafeHTML&lt;/strong&gt;, d&#233;j&#224; dans SPIP 2.1, prend en charge la s&#233;curisation des contenus externes potentiellement dangereux.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Sites&lt;/strong&gt; assure le fonctionnement de l'objet &#233;ditorial &#171; Site syndiqu&#233; &#187; ainsi que des articles syndiqu&#233;s. Une interface de mod&#233;ration des articles syndiqu&#233;s est propos&#233;e.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Squelettes par rubriques&lt;/strong&gt; assure le fonctionnement des squelettes suffix&#233;s (article-2.html pour les articles de la rubrique 2).&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Statistiques&lt;/strong&gt; assure le calcul des statistiques du site et des articles, et propose un affichage compl&#232;tement refondu.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Support vieux navigateur&lt;/strong&gt;, d&#233;j&#224; dans SPIP 2.1, propose des fonctions JavaScript activables pour permettre aux vieilles versions de navigateurs d'afficher correctement votre site.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Svp&lt;/strong&gt; permet la gestion compl&#232;te des plugins : installation, activation, mise &#224; jour, recherche&#8230;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Textwheel&lt;/strong&gt; est un moteur typographique qui supporte int&#233;gralement les raccourcis de SPIP, d&#233;crits d&#233;sormais dans un fichier de r&#232;gles au format YAML. Ce moteur permet une nette acc&#233;l&#233;ration du traitement des raccourcis (jusqu'&#224; 2 fois plus rapide sur certains contenus), et facilite l'&#233;volution et la personnalisation des raccourcis.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Urls &#201;tendues&lt;/strong&gt; supporte les URLs propres ou arborescentes, et propose une interface de configuration ainsi qu'une interface de gestion avanc&#233;e optionnelle pour g&#233;rer finement les URLs de chaque page.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Vert&#232;bres&lt;/strong&gt;, d&#233;j&#224; dans SPIP 2.1, permet au webmestre d'afficher le contenu d'une table SQL de SPIP au moyen d'un squelette g&#233;n&#233;r&#233; automatiquement d'apr&#232;s la structure SQL de la table. Cet affichage se fait maintenant dans l'espace priv&#233;.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Un nouveau jeu de squelettes par d&#233;faut&lt;/h3&gt;
&lt;p&gt;Pour marquer le coup, les squelettes par d&#233;faut ont &#233;t&#233; r&#233;vis&#233;s. Par la r&#233;partition en plusieurs feuilles de styles r&#233;-utilisables ind&#233;pendamment (&lt;a href=&quot;http://romy.tetue.net/817&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;m&#233;thode Daisy&lt;/a&gt;, cf. &lt;a href=&quot;http://spip-blog.net/703&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;Un, deux, trois&#8230; feuilles CSS !&lt;/a&gt;), ils constituent d&#233;sormais un cadre de travail HTML/CSS modulaire, imm&#233;diatement utilisable pour d&#233;marrer un site. Ils proposent notamment un traitement typographique complet et harmonieux, inspir&#233; du framework Blueprint. L'historique &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_style.css&lt;/code&gt; dispara&#238;t au profit de &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip.css&lt;/code&gt;&lt;/strong&gt;, qui peut &#234;tre utilis&#233;e en compl&#233;ment de votre framework habituel.&lt;/p&gt; &lt;p&gt;Les squelettes adoptent une nouvelle &lt;a href=&quot;http://romy.tetue.net/826&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;structure HTML de base&lt;/a&gt; qui anticipe le HTML5, &quot;responsive&quot; par d&#233;faut, et embarque des &lt;a href=&quot;http://romy.tetue.net/837&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;s&#233;lecteurs conditionnels&lt;/a&gt; pour plus de souplesse CSS.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;De nouvelles fonctionnalit&#233;s&lt;/h3&gt;
&lt;p&gt;Le support de SQLite a &#233;t&#233; nettement am&#233;lior&#233;, et c'est le format de base de donn&#233;es propos&#233; par d&#233;faut lors d'une nouvelle installation (quand il est support&#233; par le serveur), compte tenu de sa simplicit&#233; de mise en &#339;uvre&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb8&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;en revanche le support de PostGreSQL doit &#234;tre consid&#233;r&#233; comme exp&#233;rimental et (...)&#039; id=&#039;nh8&#039;&gt;8&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;La gestion des objets &#233;ditoriaux est g&#233;n&#233;ralis&#233;e. Par suite, les auteurs, documents, mots-cl&#233;s, forums, r&#233;visions et logos sont utilisables sur n'importe quel objet (tous ceux de SPIP mais aussi tout objet &#233;ditorial ajout&#233; par un plugin avec la nouvelle API de d&#233;claration). &lt;br class=&#039;autobr&#039; /&gt;
La gestion du statut, de la date de publication, de la langue et de la traduction est &#233;galement g&#233;n&#233;ralis&#233;e et utilisable sur tout objet par simple d&#233;claration.&lt;br class=&#039;autobr&#039; /&gt;
Lorsque le signalement de l'&#233;dition concourante est activ&#233;, tout objet &#233;dit&#233; est d&#233;sormais pris en compte dans le signalement.&lt;/p&gt; &lt;p&gt;L'identit&#233; du site est compl&#233;t&#233;e d'un slogan du site, entre titre et descriptif long, utilisable avec la balise &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#SLOGAN_SITE_SPIP&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;L'&#233;cran de s&#233;curit&#233; est int&#233;gr&#233; en standard.&lt;/p&gt; &lt;p&gt;Les logs (fichiers de trace) b&#233;n&#233;ficient d'une gestion par niveau d'importance. Par d&#233;faut, les logs sont beaucoup moins verbeux en production et ne signalent que les anomalies ou informations importantes. Le niveau de log peut &#234;tre ajust&#233; pour le debug ou le d&#233;veloppement, permettant ainsi d'avoir toutes les informations n&#233;cessaires.&lt;/p&gt; &lt;p&gt;Le cron p&#233;riodique qui reposait sur des fichiers a &#233;t&#233; supprim&#233; au profit d'une file de t&#226;ches en attente (qui g&#232;re aussi les t&#226;ches p&#233;riodiques). Cette file de t&#226;ches permet de programmer des actions asynchrones&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb9&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Par exemple, pour l'envoi d'un mail &quot;d&#232;s que possible&quot; qui permet de rendre la (...)&#039; id=&#039;nh9&#039;&gt;9&lt;/a&gt;]&lt;/span&gt; et propose une API simple d'utilisation pour les d&#233;veloppeurs de plugin.&lt;/p&gt; &lt;p&gt;L'ajax des squelettes (&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{ajax}&lt;/code&gt; sur les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;INCLURE&lt;/code&gt;) b&#233;n&#233;ficie d'une prise en charge des attributs ARIA pour am&#233;liorer son accessibilit&#233;. De plus, l'historique de navigation est aussi automatiquement pris en charge gr&#226;ce &#224; l'API &#171; History &#187; de HTML5&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb10&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;dans tous les navigateurs modernes &#224; l'exception de Internet Explorer qui ne (...)&#039; id=&#039;nh10&#039;&gt;10&lt;/a&gt;]&lt;/span&gt;. L'URL du navigateur est donc mise &#224; jour automatiquement sur les liens ajax, et permet les retours en arri&#232;re sans soucis.&lt;/p&gt; &lt;p&gt;Les mod&#232;les utilis&#233;s dans du texte &#233;ditorial re&#231;oivent automatiquement l'environnement du squelette dans lequel est affich&#233; le texte&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb11&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Voir Utiliser les mod&#232;les&#039; id=&#039;nh11&#039;&gt;11&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;Les formulaires des l'espace priv&#233; utilisent les possibilit&#233;s de HTML5 avec par exemple les attributs &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;required&lt;/code&gt; ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;placeholder&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Les squelettes peuvent maintenant &#233;chapper les caract&#232;res &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;# [ ] ( ) { } &lt; &gt;&lt;/code&gt; en utilisant une barre oblique &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;\&lt;/code&gt;&lt;/strong&gt;. Il devient possible d'&#233;crire des conditions par exemple sur une case &#224; cocher de formulaire de mani&#232;re bien plus &#233;l&#233;gante, sans que les crochets de l'attribut &lt;i&gt;name&lt;/i&gt; n'interf&#232;rent avec les crochets de la balise englobante :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{param}&lt;/span&gt;&lt;span style=&quot;color: #FF851D;&quot;&gt;|oui&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;label for=&#039;tendresse&#039;&gt;Avec tendresse ?&lt;/label&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;input type=&#039;checkbox&#039; name=&#039;avec_quoi&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color:#FF2100; font-weight:bold;&quot;&gt;\&lt;/span&gt;[&lt;/span&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color:#FF2100; font-weight:bold;&quot;&gt;\&lt;/span&gt;]&lt;/span&gt;&#039; id=&#039;tendresse&#039; checked=&#039;checked&#039; value=&#039;tendresse&#039; /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Raccourcis&lt;/h3&gt;
&lt;p&gt;Un raccourci pour les abr&#233;viations a &#233;t&#233; introduit nativement : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[SNCF|Soci&#233;t&#233; Nationale des Chemins de fer Fran&#231;ais]&lt;/code&gt; (ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[CMS|Content Management System{en}]&lt;/code&gt;) pour indiquer une langue diff&#233;rente du texte principal) g&#233;n&#232;re une balise &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;abbr&lt;/code&gt;&lt;/strong&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb12&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;La balise &lt;acronym&gt; n'est plus utilis&#233;e en HTML5.&#039; id=&#039;nh12&#039;&gt;12&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;Les mod&#232;les de document peuvent prendre en argument la largeur ou la hauteur pour r&#233;duire leur dimension : &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;docxx|largeur=150&gt;&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Les tableaux &#224; 2 entr&#233;es (horizontale et verticale) sont d&#233;sormais g&#233;r&#233;s correctement.&lt;/p&gt; &lt;p&gt;Il n'est d&#233;sormais plus n&#233;cessaire d'utiliser le raccourci &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;_ &lt;/code&gt; &#187; pour produire un retour ligne simple.&lt;br class=&#039;autobr&#039; /&gt;
Pour retrouver le fonctionnement ant&#233;rieur, ce nouveau comportement est d&#233;brayable en utilisant un &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;define(&#039;_AUTOBR&#039;, &#039;&#039;);&lt;/code&gt; dans son fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mes_options.php&lt;/code&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Boucles&lt;/h3&gt;
&lt;p&gt;Le syst&#232;me de boucles de SPIP a &#233;t&#233; g&#233;n&#233;ralis&#233; pour s'appliquer non plus directement sur une table SQL mais sur un it&#233;rateur. Un it&#233;rateur SQL assure le fonctionnement historique des boucles sur les tables SQL, mais il devient possible de boucler sur toute donn&#233;e it&#233;rable : &lt;a href=&quot;http://www.spip.net/fr_article5444.html&quot; class=&#039;spip_in&#039;&gt;Les it&#233;rateurs de SPIP&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Premier exemple de nouvelle application : la boucle &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DATA&lt;/code&gt;&lt;/strong&gt; &#233;tend le fonctionnement des boucles &#224; toute information structur&#233;e sous forme de tableau. Il devient possible de boucler sur un fichier CSV, sur une url distante qui renvoie une information en JSON... :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;http://www.spip.net/fr_article5443.html&quot; class=&#039;spip_in&#039;&gt;Exemples de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;BOUCLE(DATA)&lt;/code&gt; &lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://zzz.rezo.net/La-boucle-iCalendar.html&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://zzz.rezo.net/La-boucle-iCalendar.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://zzz.rezo.net/Exemples-de-boucles-YQL.html&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://zzz.rezo.net/Exemples-de-boucles-YQL.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour assurer la migration facile des squelettes qui utilisaient des boucles &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;POUR&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;CONDITION&lt;/code&gt;, celles-ci sont &#233;galement support&#233;es comme cas particuliers de la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DATA&lt;/code&gt;, dans la m&#234;me syntaxe que celle qui existait.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Crit&#232;res&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{si ...}&lt;/code&gt;&lt;/strong&gt; : permet de conditionner l'ex&#233;cution d'une boucle &#224; la condition exprim&#233;e dans le crit&#232;re, qui ne d&#233;pend pas des donn&#233;es en base mais du contexte du squelette.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{tri ...}&lt;/code&gt;&lt;/strong&gt; : associ&#233; &#224; la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TRI&lt;/code&gt; &lt;a href=&quot;http://www.spip.net/fr_article5429.html&quot; class=&#039;spip_in&#039;&gt;pour des tris faciles&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{feuille}&lt;/code&gt;&lt;/strong&gt; : permet de s&#233;lectionner les rubriques sans enfants (celles tout en bas de la hi&#233;rarchie).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{noeud}&lt;/code&gt;&lt;/strong&gt; : permet de s&#233;lectionner les rubriques qui ont des enfants.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{!racine}&lt;/code&gt;&lt;/strong&gt; : exclut les rubriques de la racine.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{profondeur=3}&lt;/code&gt;&lt;/strong&gt; : permet de s&#233;lectionner les rubriques du 3e niveau (la racine est le niveau 0, les rubriques secteurs sont le niveau 1, puis les rubriques du dessous le niveau 2 etc ...).&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Balises&lt;/h3&gt;
&lt;p&gt;Les mod&#232;les peuvent avoir un cache s'ils contiennent une balise &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CACHE&lt;/code&gt;&lt;/strong&gt; (mais par d&#233;faut ils n'en ont pas, comme auparavant).&lt;/p&gt; &lt;p&gt;Dans l'espace priv&#233;, les squelettes n'ont pas de cache non plus, sauf si une balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CACHE&lt;/code&gt; est pr&#233;sente.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#LOGO_DOCUMENT&lt;/code&gt;&lt;/strong&gt; peut prendre en argument le mode d'affichage du logo :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;i&gt;auto&lt;/i&gt; (par d&#233;faut, et c'est le fonctionnement historique) affiche automatiquement la vignette du document si existante, sinon un aper&#231;u ; et sinon l'ic&#244;ne correspondant au type de document.&lt;/li&gt;&lt;li&gt; &lt;i&gt;icone&lt;/i&gt; indique que c'est l'ic&#244;ne correspondant au type du fichier qui doit &#234;tre affich&#233;e&lt;/li&gt;&lt;li&gt; &lt;i&gt;apercu&lt;/i&gt; affiche un aper&#231;u de l'image exclusivement, m&#234;me si une vignette existe.&lt;/li&gt;&lt;li&gt; &lt;i&gt;vignette&lt;/i&gt; affiche la vignette du document si elle existe, ou sinon rien.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La balise &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#SPIP_CRON&lt;/code&gt;&lt;/strong&gt; dispara&#238;t et n'a plus d'effet dans les squelettes o&#249; elle serait encore utilis&#233;e.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOUTON_ACTION{libell&#233;, url, classe, confirm, title, callback}&lt;/code&gt;&lt;/strong&gt; g&#233;n&#232;re un mini formulaire HTML avec un seul bouton qui affiche &#171; &lt;i&gt;libell&#233;&lt;/i&gt; &#187; et d&#233;clenche au clic un POST vers &#171; &lt;i&gt;url&lt;/i&gt; &#187;. Cette balise est &#224; utiliser de pr&#233;f&#233;rence &#224; un lien quand la page &#171; &lt;i&gt;url&lt;/i&gt; &#187; modifie la base de donn&#233;es. Si la &#171; &lt;i&gt;classe&lt;/i&gt; &#187; contient la valeur &#171; &lt;i&gt;ajax&lt;/i&gt; &#187; le bouton d&#233;clenchera un rechargement du bloc ajax qui l'inclue. &#171; &lt;i&gt;confirm&lt;/i&gt; &#187; permet d'indiquer un message pour faire confirmer l'action par l'utilisateur, &#171; &lt;i&gt;title&lt;/i&gt; &#187; le contenu de l'attribut homonyme sur le bouton, et &#171; &lt;i&gt;callback&lt;/i&gt; &#187; une fonction javascript &#224; appeler lors du clic sur le bouton.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#INFO_XXX{article, 13}&lt;/code&gt;&lt;/strong&gt; : permet de retrouver le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#XXX&lt;/code&gt; sans faire une boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ARTICLES&lt;/code&gt; sur l'article &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;13&lt;/code&gt; (utilisable pour toute boucle et tout champ de la boucle : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#INFO_TITRE{article,13}&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#INFO_NOM{auteur,2}&lt;/code&gt;...)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG{nom}&lt;/code&gt;&lt;/strong&gt; permet d'afficher la valeur de la meta de configuration &lt;i&gt;nom&lt;/i&gt;.&lt;br class=&#039;autobr&#039; /&gt;
Si la meta est un tableau, il est possible d'acc&#233;der directement &#224; des sous valeurs avec la syntaxe &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG{nom/sousvaleur}&lt;/code&gt; qui renverra la &lt;i&gt;sousvaleur&lt;/i&gt; de la meta &lt;i&gt;nom&lt;/i&gt;.&lt;br class=&#039;autobr&#039; /&gt;
Pour acc&#233;der &#224; la meta d'une table sp&#233;cifique &#224; un plugin, il faut utiliser la syntaxe &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG{/metamonplugin/nom}&lt;/code&gt; : en commen&#231;ant par un &lt;tt&gt;/&lt;/tt&gt;, on indique que l'on veut la meta nom de la table spip_metamonplugin au lieu de la table spip_meta de SPIP.&lt;br class=&#039;autobr&#039; /&gt;
Dans tous les cas, il est possible d'indiquer en second argument la valeur par d&#233;faut qui doit &#234;tre utilis&#233;e si la meta n'existe pas encore : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG{nom,valeurpardefaut}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&#192; l'instar de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG{nom/sousvaleur}&lt;/code&gt; les balises &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#GET&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#SESSION&lt;/code&gt;&lt;/strong&gt; permettent d'utiliser des barres obliques pour obtenir des sous valeurs de tableau tel que :&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV{nom/sousvaleur}&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#GET{tableau/cle/souscle}&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#SESSION{prefs/couleur}&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#PUBLIE&lt;/code&gt;&lt;/strong&gt; : pour tester l'&#233;tat (publi&#233; ou non) d'un objet. S'utilise dans une boucle, porte implicitement sur l'objet en cours ou avec des arguments explicites : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#PUBLIE{article, 3}|oui) ... ]&lt;/code&gt;, sur tout autre objet.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CLE&lt;/code&gt;&lt;/strong&gt; et &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#VALEUR&lt;/code&gt;&lt;/strong&gt; sont les deux balises qui permettent d'afficher la cl&#233; et la valeur dans une boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DATA&lt;/code&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#VALEUR{x}&lt;/code&gt; permet d'afficher la sous valeur de x si &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#VALEUR&lt;/code&gt; est un tableau (&#233;quivalent &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#VALEUR|table_valeur{x})]&lt;/code&gt;). On peut encha&#238;ner plusieurs sous index &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#VALEUR{x/y/z}&lt;/code&gt; pour afficher une valeur dans un sous-niveau du tableau.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#PRODUIRE&lt;/code&gt;&lt;/strong&gt; : renvoie le nom d'un fichier statique produit &#224; partir d'un squelette. Utile pour une feuille de style calcul&#233;e ou un fichier javascript calcul&#233;. La syntaxe est la m&#234;me que pour la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#INCLURE&lt;/code&gt; : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#PRODUIRE{fond=mafeuille.css,couleur=ffffff}&lt;/code&gt; pour utiliser le squelette &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mafeuille.css.html&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#LISTE{a,b,c}&lt;/code&gt;&lt;/strong&gt; renvoie simplement un tableau contenant les valeurs a,b et c. C'est une &#233;criture simplifi&#233;e de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ARRAY{0,a,1,b,2,c}&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TOTAL_UNIQUE&lt;/code&gt;&lt;/strong&gt; renvoie le nombre d'&#233;l&#233;ments affich&#233;s par l'interm&#233;diaire du filtre &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|unique&lt;/code&gt;. Si on utilise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|unique{nom}&lt;/code&gt;, il faut faire r&#233;f&#233;rence au m&#234;me nom dans la balise : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TOTAL_UNIQUE{nom}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;Dans l'espace priv&#233; :&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#AIDER{surtitre}&lt;/code&gt;&lt;/strong&gt; permet d'afficher un lien vers la section &lt;i&gt;surtitre&lt;/i&gt; de l'aide de SPIP.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_OUVRIR&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_PIED&lt;/code&gt;&lt;/strong&gt; et &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_FERMER&lt;/code&gt;&lt;/strong&gt; permettent d'utiliser les boites styl&#233;es de l'espace priv&#233; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_OUVRIR{titre,classe}&lt;/code&gt; ouvre une bo&#238;te. le &lt;i&gt;titre&lt;/i&gt; peut &#234;tre omis. Les classes styl&#233;es dans l'espace priv&#233; sont : simple, info, note, raccourcis et important ;&lt;/li&gt;&lt;li&gt; le HTML qui suit est inclus dans la bo&#238;te ;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_PIED&lt;/code&gt; permet de passer au pied de la bo&#238;te quand un pied est n&#233;cessaire.&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOITE_FERMER&lt;/code&gt; ferme la bo&#238;te.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour de nombreux exemples, voir la page de l'espace priv&#233; &lt;i&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ecrire/?exec=charte_boites&lt;/code&gt;&lt;/i&gt; propos&#233;e par le plugin &lt;a href=&quot;http://plugins.spip.net/dev&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://plugins.spip.net/dev&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_RECHERCHE_ECRIRE&lt;/code&gt;&lt;/strong&gt; affiche le formulaire de recherche de l'espace priv&#233;. On peut lui indiquer en premier argument l'url vers laquelle il doit pointer, et une classe en second argument. En pr&#233;sence de javascript le formulaire se comporte comme un lien vers url avec le param&#232;tre recherche fourni par la saisie. Si on indique la classe ajax en second argument, le formulaire provoque le rechargement du bloc ajax incluant, comme un lien ajax donc : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_RECHERCHE_ECRIRE{#SELF, ajax}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CHEMIN_IMAGE{article-24.png}&lt;/code&gt;&lt;/strong&gt; renvoie le chemin vers l'ic&#244;ne article-24.png du th&#232;me de l'espace priv&#233; en cours d'utilisation par l'auteur connect&#233;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Filtres&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|lien_ou_expose&lt;/code&gt;&lt;/strong&gt; permet de construire simplement un menu de plusieurs liens en exposant celui qui est s&#233;lectionn&#233; par un &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;strong&gt;&lt;/code&gt; et en gardant un lien &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;a&gt;&lt;/code&gt; sinon. Exemple : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#URL_PAGE{mapage}|lien_ou_expose{libelle, #ENV{page}|=={mapage}, classe, title, rel})]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|singulier_ou_pluriel&lt;/code&gt;&lt;/strong&gt; affiche une cha&#238;ne ou une autre en fonction du nombre sur lequel il est appliqu&#233; : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#TOTAL_BOUCLE|singulier_ou_pluriel{1_article,nb_articles})]&lt;/code&gt;. &lt;i&gt;1_article&lt;/i&gt; et &lt;i&gt;nb_articles&lt;/i&gt; sont des cha&#238;nes de langue qui re&#231;oivent le nombre en argument &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;@nb@&lt;/code&gt;. Si le nombre est z&#233;ro, le filtre n'affiche rien.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|balise_img&lt;/code&gt;&lt;/strong&gt; permet de construire rapidement une balise HTML &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;img&gt;&lt;/code&gt; &#224; partir d'un nom de fichier en renseignant syst&#233;matiquement le width et le height pour acc&#233;l&#233;rer le rendu de la page : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#CHEMIN{monimage.png}|balise_img{alt,class})]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|affdate_debut_fin&lt;/code&gt;&lt;/strong&gt; affiche sous forme sympathique un intervalle de temps entre une date de d&#233;but et une date de fin, en prenant en compte le fait que la date de d&#233;but et la date de fin sont ou non le m&#234;me jour, le m&#234;me mois, la m&#234;me ann&#233;e, et en prenant en compte l'affichage de l'heure ou non (second argument, &lt;i&gt;oui&lt;/i&gt; ou &lt;i&gt;non&lt;/i&gt;. Exemple :&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#DATE_DEBUT|affdate_debut_fin{#DATE_FIN,horaireouinon})]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|timestamp&lt;/code&gt;&lt;/strong&gt; ajoute au nom d'un fichier un horodatage sous la forme ?1234567890 ou le nombre repr&#233;sente la date du fichier compt&#233; en secondes depuis le 1er janvier 1970. Ce filtre est utile pour r&#233;f&#233;rencer par exemple des feuilles de styles en s'assurant que le navigateur les rechargera quand leur url change :&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[&lt;link rel=&quot;stylesheet&quot; href=&quot;(#CHEMIN{css/perso.css}|timestamp)&quot; type=&quot;text/css&quot; /&gt;]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|objet_icone&lt;/code&gt;&lt;/strong&gt; renvoie l'ic&#244;ne standard d'un objet de SPIP. Par d&#233;faut, la taille 24px est renvoy&#233;e sauf si la taille 16 ou 32 est demand&#233;e en argument : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#OBJET|objet_icone{16})]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|objet_info&lt;/code&gt;&lt;/strong&gt; renvoie une propri&#233;t&#233; d'un objet de SPIP telle que d&#233;clar&#233;e (ou automatiquement renseign&#233;e par SPIP) via l'API &lt;i&gt;declarer_tables_objets_sql&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|objet_afficher_nb&lt;/code&gt;&lt;/strong&gt; affiche le nombre d'objets en prenant en compte le nombre auquel le filtre s'applique et les cha&#238;nes de langue d&#233;clar&#233;es pour l'objet : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#TOTAL_BOUCLE|objet_afficher_nb{auteur})]&lt;/code&gt; affichera par exemple &lt;i&gt;1 auteur&lt;/i&gt; ou &lt;i&gt;23 auteurs&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|wrap&lt;/code&gt;&lt;/strong&gt; encadre un texte d'une balise html : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#TITRE|wrap{&lt;h3&gt;})]&lt;/code&gt; produit le m&#234;me r&#233;sultat que &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[&lt;h3&gt;(#TITRE)&lt;/h3&gt;]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|generer_info_entite&lt;/code&gt;&lt;/strong&gt; affiche le champ d'un objet SPIP : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#ID_ARTICLE|generer_info_entite{article,titre})]&lt;/code&gt; renvoie le titre mis en forme de l'article &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ID_ARTICLE&lt;/code&gt;. C'est &#233;quivalent ici &#224; [(#INFO_TITRE&lt;i&gt;article,#ID_ARTICLE&lt;/i&gt;)]&lt;/p&gt; &lt;p&gt;&lt;i&gt;Dans l'espace priv&#233; :&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|icone_horizontale&lt;/code&gt;&lt;/strong&gt; affiche une ic&#244;ne de l'espace priv&#233; au format horizontal. La syntaxe est : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#URL|icone_horizontale{libelle,icone,fonction})]&lt;/code&gt;. &lt;i&gt;icone&lt;/i&gt; peut &#234;tre d&#233;sign&#233; en abr&#233;g&#233; (&lt;i&gt;article&lt;/i&gt;) et sera alors au format 24px ou explicitement (&lt;i&gt;article-24.png&lt;/i&gt;). Le 3&#232;me argument &lt;i&gt;fonction&lt;/i&gt; pr&#233;cise une famille d'action associ&#233;e &#224; l'ic&#244;ne et peut &#234;tre au choix &lt;i&gt;add&lt;/i&gt;, &lt;i&gt;del&lt;/i&gt;, &lt;i&gt;edit&lt;/i&gt;, &lt;i&gt;new&lt;/i&gt;, ou omis. Exemple &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#URL_ECRIRE{auteur_edit,new=oui}|icone_horizontale{&lt;:icone_creer_nouvel_auteur:&gt;,auteur,new})]&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|icone_verticale&lt;/code&gt;&lt;/strong&gt; affiche une ic&#244;ne de l'espace priv&#233; au format vertical. La syntaxe est la m&#234;me que pour &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|icone_horizontale&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|bouton_action_horizontal&lt;/code&gt;&lt;/strong&gt; utilise la m&#234;me syntaxe que &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|icone_horizontale&lt;/code&gt; et affichera un r&#233;sultat visuellement semblable. Cependant le markup HTML sera du m&#234;me type que celui de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#BOUTON_ACTION&lt;/code&gt; pour d&#233;clencher un POST vers l'url et est donc utile quand l'url modifie la base de donn&#233;es.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;|sinon_interdire_acces&lt;/code&gt;&lt;/strong&gt; plac&#233; &#224; n'importe quel endroit de la page permet de bloquer l'acc&#232;s &#224; celle-ci quand l'expression &#224; laquelle il s'applique est fausse. Dans ce cas une page d'erreur est affich&#233;e, sauf si une url de redirection est fournie en argument (on peut aussi alors fournir un status http de redirection en second argument). On l'utilise g&#233;n&#233;ralement sur une v&#233;rification d'autorisation &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;[(#AUTORISER{modifier,article,#ID_ARTICLE}|sinon_interdire_acces)]&lt;/code&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;JavaScript&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; utilise la version v1.7.2 de jQuery et int&#232;gre d&#233;sormais jQuery UI en version 1.8.20. Il devient possible d'utiliser une version diff&#233;rente de jQuery dans le site public en surchargeant simplement &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;javascript/jquery.js&lt;/code&gt; dans le dossier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;squelettes/&lt;/code&gt; sans risquer de casser l'espace priv&#233;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Liens ajax :&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
Les liens &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;.ajax&lt;/code&gt; ne cassent plus l'historique de navigation sur les navigateurs qui supportent &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;l'API HTML5 History&lt;/a&gt; (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 &lt;i&gt;Pr&#233;c&#233;dent&lt;/i&gt; pour revenir en arri&#232;re.&lt;/p&gt; &lt;p&gt;Classes sp&#233;ciales sur les liens ajax :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&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=&#039;spip_code&#039; dir=&#039;ltr&#039;&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=&#039;spip_code&#039; dir=&#039;ltr&#039;&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;Rechargement t&#233;l&#233;command&#233; de blocs ajax :&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
Les liens &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&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 de nommer les blocs ajax au moment de leur inclusion :&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;INCLURE{fond=...,ajax=nomdubloc} /&gt;&lt;/code&gt;. Le bloc ajax ainsi nomm&#233; peut ensuite &#234;tre recharg&#233; via l'appel de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ajaxReload(&#039;nomdubloc&#039;);&lt;/code&gt;. Il est possible de passer en second argument une liste d'options contenant :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; callback : fonction callback qui doit &#234;tre appel&#233;e apr&#232;s le chargement ajax du bloc&lt;/li&gt;&lt;li&gt; args : liste d'argument qui seront pass&#233;s &#224; l'url lors du chargement du bloc (permet de modifier le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV&lt;/code&gt; du bloc mis &#224; jour) ;&lt;/li&gt;&lt;li&gt; history : indique si le rechargement affecte ou non l'historique de navigation (faux par d&#233;faut).
Exemple : &lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_javascript cadre spip_cadre&quot;&gt;&lt;div class=&quot;javascript&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;ajaxReload&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;nomdubloc&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; callback&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #3366CC;&quot;&gt;&#039;fini&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; args&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;id_article&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #CC0000;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; history&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #003366; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ajaxReload&lt;/code&gt; 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;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$(&#039;#contenu&#039;).ajaxReload({args:{id_article:3}})&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Animations javascript :&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
Lors des interactions d&#233;clench&#233;es par l'utilisateur, il est possible de d&#233;clencher plusieurs animations type qui s'appliquent toutes sur un s&#233;lecteur &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;jQuery&lt;/code&gt; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;jQuery(&#039;#monid&#039;).animateLoading()&lt;/code&gt; d&#233;clenche l'animation de chargement sur &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#monid&lt;/code&gt; (automatiquement d&#233;clench&#233;e lors des rechargements ajax)&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;jQuery(&#039;#monid&#039;).endLoading()&lt;/code&gt; arr&#234;te l'animation de chargement sur &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#monid&lt;/code&gt; (automatiquement d&#233;clench&#233;e lors des rechargements ajax)&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;jQuery(&#039;#monid&#039;).animateAppend()&lt;/code&gt; anime le bloc &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#monid&lt;/code&gt; pour montrer qu'il vient d'&#234;tre ajout&#233; par l'interaction&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;jQuery(&#039;#monid&#039;).animateRemove()&lt;/code&gt; anime le bloc &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#monid&lt;/code&gt; pour montrer qu'il est supprim&#233; par l'interaction&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fonctions utilitaires :&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;parametre_url()&lt;/code&gt; s'utilise comme sa version PHP de parametre_url pour ajouter, supprimer, r&#233;cup&#233;rer des arguments d'une URL :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;parametre_url(url,arg,value)&lt;/code&gt; ajoute &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;arg=value&lt;code&gt; &#224; &lt;code&gt;url&lt;/code&gt; et retourne l'url modifi&#233;e ;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;parametre_url(url,arg,&#039;&#039;)&lt;/code&gt; supprime la valeur de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;arg&lt;code&gt; dans &lt;code&gt;url&lt;/code&gt; et retourne l'url modifi&#233;e ;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;parametre_url(url,arg)&lt;/code&gt; retourne la valeur de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;arg&lt;code&gt; dans &lt;code&gt;url&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$(&#039;a&#039;).followLink()&lt;/code&gt; suit le lien en simulant un clic dessus (prend en compte le fait que le lien est ou non un lien ajax).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Popin dans l'espace priv&#233; :&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
Un lien vers une page de l'espace priv&#233; avec une classe &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;.popin&lt;/code&gt; provoque l'ouverture d'une popin qui contient le coeur de la page point&#233;e (bloc &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;contenu/&lt;/code&gt;). Le lien conserve sa capacit&#233; &#224; &#234;tre ouvert dans un autre onglet via clic droit et la page compl&#232;te est affich&#233;e dans ce cas.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;API&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; introduit plusieurs &lt;strong&gt;API g&#233;n&#233;riques&lt;/strong&gt; dans la gestion des objets &#233;ditoriaux :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; une gestion g&#233;n&#233;rique des tables de liens d'un objet avec n'importe quel autre objet : c'est &lt;a href=&quot;http://www.spip.net/fr_article5477.html&quot; class=&#039;spip_in&#039;&gt;l'API &lt;strong&gt;editer_liens&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; La cr&#233;ation de nouveaux objets &#233;ditoriaux est simplifi&#233;e par &lt;a href=&quot;http://www.spip.net/fr_article5525.html&quot; class=&#039;spip_in&#039;&gt;une API d&#233;clarative&lt;/a&gt;&lt;/li&gt;&lt;li&gt; une gestion g&#233;n&#233;rique des fonctions d'insertion, modification ou publication des objets &#233;ditoriaux : &lt;a href=&quot;http://www.spip.net/fr_article5526.html&quot; class=&#039;spip_in&#039;&gt;l'API &lt;strong&gt;editer_objet&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_test_si_publie($objet, $id_objet)&lt;/code&gt;&lt;/strong&gt; permet de tester facilement si un objet est publi&#233; ou non en fonction de son statut tel que d&#233;clar&#233; (et en fonction d'une &#233;ventuelle post-publication)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;generer_url_ecrire_objet($objet,$id_objet,$args, $ancre)&lt;/code&gt;&lt;/strong&gt; renvoie l'url vers la page de l'objet dans l'espace priv&#233;. &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$args&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$ancre&lt;/code&gt; sont optionnels.&lt;/li&gt;&lt;li&gt; le pipeline &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;optimiser_base_disparus&lt;/code&gt;&lt;/strong&gt; est appel&#233; lors du nettoyage en base des objets &#224; la poubelles et des liens morts qui en r&#233;sultent&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;SPIP 3&lt;/strong&gt; dispose &#233;galement d'une &lt;a href=&quot;http://www.spip.net/fr_article5527.html&quot; class=&#039;spip_in&#039;&gt;&lt;strong&gt;gestion de file de t&#226;ches&lt;/strong&gt;&lt;/a&gt; qui permet de programmer l'ex&#233;cution future ou simplement asynchone (ASAP mais sans faire attendre l'utilisateur) de fonctions.&lt;/p&gt; &lt;p&gt;La mise en place de configuration des plugins est simplifi&#233;e par la prise en charge automatis&#233;e des formulaires &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_CONFIGURER_XXX&lt;/code&gt;&lt;/strong&gt; et par l'utilisation des fonctions &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;lire_config&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ecrire_config&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;effacer_config&lt;/code&gt;&lt;/strong&gt; (voir &lt;a href=&quot;http://www.spip.net/fr_article5414.html&quot; class=&#039;spip_in&#039; hreflang=&#039;fr&#039;&gt;Configurer une fonctionnalit&#233; de votre site, ou un plugin&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Les &lt;a href=&quot;http://www.spip.net/fr_article3800.html&quot; class=&#039;spip_in&#039; hreflang=&#039;fr&#039;&gt;formulaires CVT&lt;/a&gt; permettent facilement de faire &lt;a href=&quot;http://www.spip.net/fr_article5386.html&quot; class=&#039;spip_in&#039;&gt;des formulaires en plusieurs pages&lt;/a&gt;, et supportent &#233;galement &lt;a href=&quot;http://www.spip.net/fr_article5428.html&quot; class=&#039;spip_in&#039;&gt;la sauvegarde automatique de la saisie&lt;/a&gt; par simple d&#233;claration.&lt;br class=&#039;autobr&#039; /&gt;
Un pipeline &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaire_fond&lt;/code&gt;&lt;/strong&gt; permet de personnaliser le fond des formulaires (pour modifier le HTML du formulaire)&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb13&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; id=&#039;nh13&#039;&gt;13&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Dans l'API SQL :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; la fonction &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sql_skip&lt;/code&gt;&lt;/strong&gt; est ajout&#233;e et permet de sauter un certain nombre de r&#233;sultats. &lt;/li&gt;&lt;li&gt; Les valeurs &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;null&lt;/code&gt; dans sql_updateq et sql_insertq sont traduites en &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;NULL&lt;/code&gt;&lt;/strong&gt; SQL et ne sont plus assimil&#233;es &#224; une cha&#238;ne vide.&lt;/li&gt;&lt;li&gt; les fonctions &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sql_demarrer_transaction&lt;/code&gt;&lt;/strong&gt; et &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sql_terminer_transaction&lt;/code&gt;&lt;/strong&gt; permettent respectivement comme leur nom le sugg&#232;re de d&#233;marrer ou de cl&#244;turer une transaction SQL&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb14&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Est ajout&#233; de mani&#232;re exp&#233;rimentale &#233;galement pr&#233;sent plut&#244;t pour contourner un (...)&#039; id=&#039;nh14&#039;&gt;14&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Introduction d'un point d'entr&#233;e bac-&#224;-sable, (&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;public/sandbox.php&lt;/code&gt;&lt;/strong&gt;) pour la compilation des squelettes, permet &#224; un plugin de g&#233;rer la compilation des squelettes dans un ensemble de filtres et fonctions en liste blanche ou liste noire, et d'interdire le PHP dans les squelettes.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Sp&#233;cialisation des crit&#232;res&lt;/strong&gt; :&lt;br class=&#039;autobr&#039; /&gt;
Il est possible de pr&#233;fixer par le nom du serveur et/ou le nom de la table le nom de la fonction crit&#232;re. La recherche se fait dans l'ordre :&lt;/p&gt;
&lt;ol class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_serveur_TABLE_moncritere_dist&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_serveur_TABLE_moncritere&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_serveur_moncritere_dist&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_serveur_moncritere&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_TABLE_moncritere_dist&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_TABLE_moncritere&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_moncritere_dist&lt;/code&gt;,&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;critere_moncritere&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Dans le fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;options.php&lt;/code&gt; d'un plugin ou dans le fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mes_options.php&lt;/code&gt;, &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$GLOBALS[&#039;marqueur_skel&#039;] .= &quot;:prefixe&quot;&lt;/code&gt;&lt;/strong&gt; permet de diff&#233;rencier le cache des squelettes compil&#233;s comme &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$GLOBALS[&#039;marqueur&#039;] .= &quot;:prefixe&quot;&lt;/code&gt; permettait d&#233;j&#224; de diff&#233;rencier le cache des squelettes.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#039;nb1&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh1&#039; class=&#039;spip_note&#039; title=&#039;Notes 1&#039; rev=&#039;footnote&#039;&gt;1&lt;/a&gt;] &lt;/span&gt;Outre le Porte-plume d&#233;j&#224; int&#233;gr&#233; dans SPIP 2 et qui initiait ce mouvement, on peut citer notamment les plugins Afficher_objets, Base CSS, Navigation du priv&#233;, CVT multi-&#233;tapes, Forum, Job-queue, Mediabox, M&#233;diath&#232;que, TextWheel, URLs &#233;ditables, Comments, qui ont, pour certains, inspir&#233; fortement le d&#233;veloppement de SPIP lui-m&#234;me ; pour d'autres &#233;t&#233; int&#233;gr&#233;s, avec quelquefois certaines &#233;volutions.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb2&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh2&#039; class=&#039;spip_note&#039; title=&#039;Notes 2&#039; rev=&#039;footnote&#039;&gt;2&lt;/a&gt;] &lt;/span&gt;Ce chantier avait &#233;t&#233; amorc&#233; depuis quelque temps sur la Zone, et ceux qui d'entre vous utilisaient d&#233;j&#224; le plugin &lt;i&gt;Navigation du priv&#233;&lt;/i&gt; ou la &lt;i&gt;m&#233;diath&#232;que&lt;/i&gt; retrouveront vite leurs marques.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb3&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh3&#039; class=&#039;spip_note&#039; title=&#039;Notes 3&#039; rev=&#039;footnote&#039;&gt;3&lt;/a&gt;] &lt;/span&gt;Par exemple, le passage en &#233;dition sur un article devient instantan&#233; gr&#226;ce au pr&#233;-chargement Ajax.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb4&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh4&#039; class=&#039;spip_note&#039; title=&#039;Notes 4&#039; rev=&#039;footnote&#039;&gt;4&lt;/a&gt;] &lt;/span&gt;&lt;a href=&quot;http://core.spip.org/projects/spip/repository/revisions/17650&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://core.spip.org/projects/spip/repository/revisions/17650&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb5&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh5&#039; class=&#039;spip_note&#039; title=&#039;Notes 5&#039; rev=&#039;footnote&#039;&gt;5&lt;/a&gt;] &lt;/span&gt;en SPIP 2.1 ils &#233;taient plac&#233;s dans le dossier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;extensions/&lt;/code&gt; d&#233;sormais inutile.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb6&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh6&#039; class=&#039;spip_note&#039; title=&#039;Notes 6&#039; rev=&#039;footnote&#039;&gt;6&lt;/a&gt;] &lt;/span&gt;C'est une alternative aux plugin Thickbox, LightBox... qui repose sur la librairie Colorbox&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb7&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh7&#039; class=&#039;spip_note&#039; title=&#039;Notes 7&#039; rev=&#039;footnote&#039;&gt;7&lt;/a&gt;] &lt;/span&gt;Connu pour SPIP 2 sous le nom &quot;M&#233;diath&#232;que&quot;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb8&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh8&#039; class=&#039;spip_note&#039; title=&#039;Notes 8&#039; rev=&#039;footnote&#039;&gt;8&lt;/a&gt;] &lt;/span&gt;en revanche le support de PostGreSQL doit &#234;tre consid&#233;r&#233; comme exp&#233;rimental et incomplet pour un usage en production&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb9&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh9&#039; class=&#039;spip_note&#039; title=&#039;Notes 9&#039; rev=&#039;footnote&#039;&gt;9&lt;/a&gt;] &lt;/span&gt;Par exemple, pour l'envoi d'un mail &quot;d&#232;s que possible&quot; qui permet de rendre la main &#224; l'utilisateur imm&#233;diatement sans devoir attendre que le mail soit effectivement envoy&#233;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb10&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh10&#039; class=&#039;spip_note&#039; title=&#039;Notes 10&#039; rev=&#039;footnote&#039;&gt;10&lt;/a&gt;] &lt;/span&gt;dans tous les navigateurs modernes &#224; l'exception de Internet Explorer qui ne la supporte pas encore&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb11&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh11&#039; class=&#039;spip_note&#039; title=&#039;Notes 11&#039; rev=&#039;footnote&#039;&gt;11&lt;/a&gt;] &lt;/span&gt;Voir &lt;a href=&quot;http://www.spip.net/fr_article3454.html&quot; class=&#039;spip_in&#039; hreflang=&#039;fr&#039;&gt;Utiliser les mod&#232;les&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb12&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh12&#039; class=&#039;spip_note&#039; title=&#039;Notes 12&#039; rev=&#039;footnote&#039;&gt;12&lt;/a&gt;] &lt;/span&gt;La balise &lt;acronym&gt; n'est plus utilis&#233;e en HTML5.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb13&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh13&#039; class=&#039;spip_note&#039; title=&#039;Notes 13&#039; rev=&#039;footnote&#039;&gt;13&lt;/a&gt;] &lt;/span&gt;&lt;a href=&quot;http://core.spip.org/projects/spip/repository/revisions/18754&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://core.spip.org/projects/spip/repository/revisions/18754&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb14&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh14&#039; class=&#039;spip_note&#039; title=&#039;Notes 14&#039; rev=&#039;footnote&#039;&gt;14&lt;/a&gt;] &lt;/span&gt;Est ajout&#233; de mani&#232;re exp&#233;rimentale &#233;galement &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sql_preferer_transaction&lt;/code&gt; pr&#233;sent plut&#244;t pour contourner un probl&#232;me de lenteur sur des insertions multiples avec SQLite, qui sont ex&#233;cut&#233;es plus rapidement en mode transactionnel. Cette fonction renvoie &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; uniquement en SQLite&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>API de gestion de la file des travaux</title>
		<link>http://www.spip.net/fr_article5527.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5527.html</guid>
		<dc:date>2012-05-19T09:50:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;SPIP 3.0 int&#232;gre nativement une interface de programmation (ou API) de gestion de file de travaux. Elle permet de programmer des t&#226;ches &#224; ex&#233;cuter dans le futur, ou simplement le plus t&#244;t possible mais sans faire attendre l'utilisateur.&lt;br class=&#039;autobr&#039; /&gt;
Les travaux programm&#233;s sont &#224; tout moment visualisables dans l'espace d'administration via le menu Maintenance &gt; Liste des travaux. La page de suivi permet de forcer l'ex&#233;cution imm&#233;diate d'une t&#226;che, ou de supprimer certaines t&#226;ches.&lt;br class=&#039;autobr&#039; /&gt;
Ajouter un travail dans la file (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique257.html" rel="directory"&gt;Guide des fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;a href=&quot;http://www.spip.net/fr_article5427.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&quot;color:#00CAD8&quot;&gt;SPIP 3.0&lt;/span&gt;&lt;/a&gt; int&#232;gre nativement une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;interface de programmation&lt;/a&gt; (ou API) de gestion de file de travaux. Elle permet de programmer des t&#226;ches &#224; ex&#233;cuter dans le futur, ou simplement le plus t&#244;t possible mais sans faire attendre l'utilisateur&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb1&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Ces fonctionnalit&#233;s &#233;taient disponibles pour SPIP 2.1 dans le plugin (...)&#039; id=&#039;nh1&#039;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Les travaux programm&#233;s sont &#224; tout moment visualisables dans l'espace d'administration via le menu &lt;i&gt;Maintenance&lt;/i&gt; &gt; &lt;i&gt;Liste des travaux&lt;/i&gt;. La page de suivi permet de forcer l'ex&#233;cution imm&#233;diate d'une t&#226;che, ou de supprimer certaines t&#226;ches.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Ajouter un travail dans la file&lt;/h3&gt;
&lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;3&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;$id_job = job_queue_add($function, $description, $arguments = array(), $file = &#039;&#039;, $no_duplicate = FALSE, $time=0, $priority=0)&lt;/textarea&gt;
&lt;p&gt;Avec les arguments :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$function&lt;/code&gt; : le nom de la fonction PHP qui doit &#234;tre appel&#233;e&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$description&lt;/code&gt; : une description humainement compr&#233;hensible de ce que fait la tache (essentiellement pour l'affichage dans la page de suivi de l'espace priv&#233;)&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$arguments&lt;/code&gt; (facultatif, vide par d&#233;faut) : les arguments qui seront pass&#233;s &#224; la fonction, sous forme de tableau PHP &lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$file&lt;/code&gt; (facultatif, vide par d&#233;faut) : nom du fichier &#224; inclure. Si le nom finit par un &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;/&lt;/code&gt; alors on consid&#232;re que c'est un r&#233;pertoire et SPIP fera un &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;charger_fonction($function,$file)&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$no_duplicate&lt;/code&gt; (facultatif, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; par d&#233;faut) &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; si vaut &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; la t&#226;che ne sera pas ajout&#233;e si elle existe d&#233;j&#224; en file d'attente avec la m&#234;me fonction et les m&#234;mes arguments.&lt;/li&gt;&lt;li&gt; si vaut &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&#039;function_only&#039;&lt;/code&gt; la t&#226;che ne sera pas ajout&#233;e si elle existe d&#233;j&#224; en file d'attente avec la m&#234;me fonction ind&#233;pendamment de ses arguments&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$time&lt;/code&gt; (facultatif, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;0&lt;/code&gt; par d&#233;faut) indique la date sous forme de timestamp &#224; laquelle la t&#226;che doit &#234;tre programm&#233;e. Si 0 ou une date pass&#233;e, la t&#226;che sera ex&#233;cut&#233;e aussit&#244;t que possible (en g&#233;n&#233;ral en fin hit, en asynchrone).&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$priority&lt;/code&gt; (facultatif, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;0&lt;/code&gt; par d&#233;faut) indique un niveau de priorit&#233; entre -10 et +10. Les t&#226;ches sont ex&#233;cut&#233;es par ordre de priorit&#233; d&#233;croissante, une fois leur date d'ex&#233;cution pass&#233;e. La priorit&#233; est surtout utilis&#233;e quand une t&#226;che cron indique qu'elle n'a pas fini et doit &#234;tre relanc&#233;e : dans ce cas SPIP r&#233;duit sa priorit&#233; pour &#234;tre s&#251;r que celle t&#226;che ne monopolise pas la file d'attente.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La fonction renvoie le num&#233;ro de travail ajout&#233; ou 0 si aucun travail n'a &#233;t&#233; ajout&#233;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Supprimer un travail de la file&lt;/h3&gt;
&lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;2&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;job_queue_remove($id_job)&lt;/textarea&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_job&lt;/code&gt; est le num&#233;ro du travail en attente, tel que retourn&#233; par la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;job_queue_add&lt;/code&gt;&lt;/p&gt; &lt;p&gt;La fonction retourne &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; si le travail a bien &#233;t&#233; trouv&#233; et supprim&#233;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; sinon.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Associer un travail &#224; un objet &#233;ditorial&lt;/h3&gt;
&lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;2&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;job_queue_link($id_job,$objets)&lt;/textarea&gt;
&lt;p&gt;Avec les arguments :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_job&lt;/code&gt; : le num&#233;ro de travail en attente, tel que retourn&#233; par la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;job_queue_add&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets&lt;/code&gt; une liste d'objets sous la forme d'un tableau d'objets &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;array(array(&#039;objet&#039;=&gt;&#039;article&#039;,&#039;id_objet&#039;=&gt;23),...)&lt;/code&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Lorsque des travaux sont associ&#233;s &#224; un objet, ils apparaissent sur la page de l'espace priv&#233; de cet objet, et les auteurs qui ont le droit de modifier l'objet peuvent aussi supprimer le travail avant son ex&#233;cution.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#039;nb1&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh1&#039; class=&#039;spip_note&#039; title=&#039;Notes 1&#039; rev=&#039;footnote&#039;&gt;1&lt;/a&gt;] &lt;/span&gt;Ces fonctionnalit&#233;s &#233;taient disponibles pour &lt;a href=&quot;http://www.spip.net/fr_article4728.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&#039;color: #169249;&#039;&gt;SPIP 2.1&lt;/span&gt;&lt;/a&gt; dans le plugin &lt;a href=&quot;http://plugins.spip.net/queue.html&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;job_queue&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>API &#171; editer_objet &#187;</title>
		<link>http://www.spip.net/fr_article5526.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5526.html</guid>
		<dc:date>2012-05-19T09:49:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;L'ajout, la modification et la publication des instances d'objets &#233;ditoriaux sont simplifi&#233;s par une interface de programmation (ou API) constitu&#233;e de 3 fonctions g&#233;n&#233;riques qui peuvent servir pour manipuler tous les objets de SPIP.&lt;br class=&#039;autobr&#039; /&gt;
Ins&#233;rer&lt;br class=&#039;autobr&#039; /&gt;
Une nouvelle instance d'un objet &#233;ditorial est cr&#233;&#233;e en base par include_spip('action/editer_objet') ; $id_objet = objet_inserer($objet, $id_parent) ;&lt;br class=&#039;autobr&#039; /&gt;
objet_inserer prend 2 arguments :&lt;br class=&#039;autobr&#039; /&gt; $objet est le nom de l'objet ins&#233;r&#233; (article, breve,...)&lt;br class=&#039;autobr&#039; /&gt; $id_parent (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique257.html" rel="directory"&gt;Guide des fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;L'ajout, la modification et la publication des instances d'objets &#233;ditoriaux sont simplifi&#233;s par une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;interface de programmation&lt;/a&gt; (ou API) constitu&#233;e de 3 fonctions g&#233;n&#233;riques qui peuvent servir pour manipuler tous les objets de SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Ins&#233;rer&lt;/h3&gt;
&lt;p&gt;Une nouvelle instance d'un objet &#233;ditorial est cr&#233;&#233;e en base par&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;action/editer_objet&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$id_objet&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; objet_inserer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$objet&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_parent&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/fac8b6439ad1093a7e93087ce2cc9dbe.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_inserer&lt;/code&gt; &lt;/strong&gt; prend 2 arguments :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objet&lt;/code&gt; est le nom de l'objet ins&#233;r&#233; (article, breve,...)&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_parent&lt;/code&gt; (facultatif) est l'id du parent de l'objet (id_rubrique pour un article ou une breve, id_groupe pour un mot...)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les pipelines &lt;i&gt;pre_insertion&lt;/i&gt; et &lt;i&gt;post_insertion&lt;/i&gt; sont appel&#233;s automatiquement par la fonction.&lt;/p&gt; &lt;p&gt;Si, pour l'objet demand&#233;, une fonction sp&#233;cifique &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;xxx_inserer&lt;/code&gt; existe dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;action/editer_xxx&lt;/code&gt;, elle sera automatiquement appel&#233;e par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_inserer&lt;/code&gt; &#224; la place du traitement g&#233;n&#233;rique.&lt;/p&gt; &lt;p&gt;La fonction retourne l'id de l'enregistrement ajout&#233; en base, ou 0 en cas d'&#233;chec.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Modifier&lt;/h3&gt;
&lt;p&gt;Pour modifier une instance d'un objet en base, on utilise la fonction : &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_modifier&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;action/editer_objet&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_modifier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$objet&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_objet&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$set&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/1248008d8c80c6af3753f657ba435929.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Les 3 arguments :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objet&lt;/code&gt; indique le nom de l'objet modifi&#233;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_objet&lt;/code&gt; donne l'id de l'objet modifi&#233;&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$set&lt;/code&gt; est un tableau associatif champ=&gt;valeur des champs modifi&#233;s&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La fonction appelle automatiquement les pipelines &lt;i&gt;pre_edition&lt;/i&gt; et &lt;i&gt;post_edition&lt;/i&gt;.&lt;/p&gt; &lt;p&gt;Si pour l'objet demand&#233;, une fonction sp&#233;cifique &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;xxx_modifier&lt;/code&gt; existe dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;action/editer_xxx&lt;/code&gt;, elle sera automatiquement appel&#233;e par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_modifier&lt;/code&gt; &#224; la place du traitement g&#233;n&#233;rique.&lt;/p&gt; &lt;p&gt;La fonction retourne une cha&#238;ne vide si tout s'est bien pass&#233; ou l'erreur en cas d'&#233;chec.&lt;/p&gt; &lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_modifier&lt;/code&gt; v&#233;rifie les droits de l'auteur de la session en cours &#224; faire l'action, via un appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;modifier&#039;, $objet, $id_objet)&lt;/code&gt;. Si elle est appel&#233;e par une t&#226;che anonyme, il sera n&#233;cessaire d'accorder une autorisation exceptionnelle comme indiqu&#233;e dans &lt;a href=&quot;http://www.spip.net/fr_article5528.html&quot; class=&#039;spip_in&#039;&gt;API &#171; autoriser &#187;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Publier&lt;/h3&gt;
&lt;p&gt;Pour la publication d'un objet (modification du statut ou de la date), il convient d'appeler la m&#234;me fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_modifier&lt;/code&gt; de la m&#234;me fa&#231;on que pour la modification.&lt;/p&gt; &lt;p&gt;Cette fonction d&#233;l&#232;gue &#224; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_instituer&lt;/code&gt;&lt;/strong&gt; la mise &#224; jour des champs qui concernent le statut de l'objet. Il est ainsi possible de modifier le contenu d'un objet et de le publier en un seul appel.&lt;/p&gt; &lt;p&gt;Si une fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;xxx_instituer&lt;/code&gt; existe dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;action/editer_xxx&lt;/code&gt; elle sera automatiquement appel&#233;e par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_instituer&lt;/code&gt; &#224; la place du traitement g&#233;n&#233;rique.&lt;/p&gt; &lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_instituer&lt;/code&gt; v&#233;rifie les droits de l'auteur de la session en cours &#224; faire l'action, via un appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;instituer&#039;, $objet, $id_objet)&lt;/code&gt;. Si elle est appel&#233;e par une t&#226;che anonyme, il sera n&#233;cessaire d'accorder une autorisation exceptionnelle comme indiqu&#233;e dans &lt;a href=&quot;http://www.spip.net/fr_article5528.html&quot; class=&#039;spip_in&#039;&gt;API &#171; autoriser &#187;&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>API &#171; autoriser &#187;</title>
		<link>http://www.spip.net/fr_article5528.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5528.html</guid>
		<dc:date>2012-05-19T09:49:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>SPIP 2.0</dc:subject>

		<description>
&lt;p&gt;L'interface de programmation (API) &#171; autoriser &#187; introduite dans SPIP 2.0 permet de g&#233;rer finement les autorisations donn&#233;es &#224; un auteur d'effectuer une action sur un objet.&lt;br class=&#039;autobr&#039; /&gt;
V&#233;rifier une autorisation&lt;br class=&#039;autobr&#039; /&gt;
La v&#233;rification d'une autorisation se fait par un appel de la forme :&lt;br class=&#039;autobr&#039; /&gt; include_spip('inc/autoriser') ; if (autoriser('modifier', 'article', $id_article)) ...&lt;br class=&#039;autobr&#039; /&gt;
La fonction autoriser($faire, $type, $id, $qui, $opt) accepte 5 arguments dont seul le premier est obligatoire :&lt;br class=&#039;autobr&#039; /&gt; $faire est une cha&#238;ne qui d&#233;signe (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique257.html" rel="directory"&gt;Guide des fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip20" rel="tag"&gt;SPIP 2.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;L'&lt;a href=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;interface de programmation&lt;/a&gt; (API) &#171; autoriser &#187; introduite dans &lt;a href=&quot;http://www.spip.net/fr_article3784.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&#039;color: #273494;&#039;&gt;SPIP 2.0&lt;/span&gt;&lt;/a&gt; permet de g&#233;rer finement les autorisations donn&#233;es &#224; un auteur d'effectuer une action sur un objet.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;V&#233;rifier une autorisation&lt;/h3&gt;
&lt;p&gt;La v&#233;rification d'une autorisation se fait par un appel de la forme :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;inc/autoriser&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;autoriser&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;modifier&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;article&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/b2e4c855017ad3b87ef915ffc5425f8c.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser($faire, $type, $id, $qui, $opt)&lt;/code&gt; accepte 5 arguments dont seul le premier est obligatoire :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$faire&lt;/code&gt;&lt;/strong&gt; est une cha&#238;ne qui d&#233;signe l'action soumise &#224; autorisation. C'est en r&#232;gle g&#233;n&#233;rale un verbe simple (&lt;i&gt;modifier&lt;/i&gt;, &lt;i&gt;creer&lt;/i&gt;, &lt;i&gt;supprimer&lt;/i&gt;, &lt;i&gt;voir&lt;/i&gt;, &lt;i&gt;configurer&lt;/i&gt;...), parfois associ&#233; &#224; un contexte (les mots sont alors coll&#233;s : &lt;i&gt;changerlangue&lt;/i&gt;, &lt;i&gt;publierdans&lt;/i&gt;...). &lt;br class=&#039;manualbr&#039; /&gt;Il y a quelques exceptions o&#249; le &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$faire&lt;/code&gt;&lt;/strong&gt; n'est pas un verbe et s'utilise sans aucun autre argument (&lt;i&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;webmestre&#039;)&lt;/code&gt;&lt;/i&gt; par exemple, ou &lt;i&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;ecrire&#039;)&lt;/code&gt;&lt;/i&gt; &#8212;qui d&#233;signe ici l'espace d'administration et non l'action&#8212;).&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt;&lt;/strong&gt; est une cha&#238;ne qui d&#233;signe sur quoi porte l'action. C'est en g&#233;n&#233;ral le type d'un objet &#233;ditorial (article, rubrique, mot, groupe-mots, ...).&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id&lt;/code&gt;&lt;/strong&gt; d&#233;signe l'id (la cl&#233; primaire) de l'objet sur lequel porte l'action. &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id&lt;/code&gt;&lt;/strong&gt; est en g&#233;n&#233;ral un nombre entier, mais peut &#234;tre une cha&#238;ne si cela correspond &#224; la cl&#233; primaire de la table SQL concern&#233;e.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qui&lt;/code&gt;&lt;/strong&gt; d&#233;signe l'auteur (au sens SPIP) qui va faire l'action. Si il n'est pas fourni (ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;null&lt;/code&gt; dans l'appel de la fonction autoriser, c'est implicitement l'auteur connect&#233; qui est pris en compte. Sinon &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qui&lt;/code&gt;&lt;/strong&gt; peut &#234;tre l'id_auteur d'un auteur dont on veut v&#233;rifier les droits, ou un tableau associatif qui d&#233;crit l'auteur (tableau qui contient alors les champs de la table spip_auteurs pour l'auteur concern&#233;)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$opt&lt;/code&gt;&lt;/strong&gt; est un tableau associatif de donn&#233;es suppl&#233;mentaires contextuelles concernant l'action qui sont parfois utilis&#233;es par l'autorisation. Par exemple lorsqu'on veut modifier/publier un article, on appellera &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;instituer&#039;, &#039;article&#039;, $id_article, null, array(&#039;statut&#039; =&gt; &#039;publie&#039;))&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser&lt;/code&gt; retourne &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; &#187; ou &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; &#187; en fonction des droits de l'auteur &#224; faire l'action demand&#233;e.&lt;/p&gt; &lt;p&gt;Dans un squelette, la v&#233;rification d'une autorisation se fait par &lt;a href=&quot;http://www.spip.net/fr_article3896.html&quot; class=&#039;spip_in&#039;&gt;la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#AUTORISER&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Donner une autorisation exceptionnelle&lt;/h3&gt;
&lt;p&gt;Il arrive qu'on ait besoin de faire une action qui sera soumise &#224; autorisation pour un auteur qui normalement n'en a pas le droit. Cela peut se produire, par exemple, dans le cas d'une &lt;a href=&quot;http://www.spip.net/fr_article5527.html&quot; class=&#039;spip_in&#039;&gt;action programm&#233;e&lt;/a&gt; qui sera alors ex&#233;cut&#233;e anonymement.&lt;/p&gt; &lt;p&gt;Dans ce cas, il existe un m&#233;canisme via la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser_exception&lt;/code&gt; qui donne une autorisation exceptionnelle, le temps de r&#233;aliser l'action concern&#233;e.&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;inc/autoriser&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// donner une autorisation exceptionnelle temporaire&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;autoriser_exception&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;modifier&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;article&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// r&#233;aliser l&#039;action d&#233;sir&#233;e&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;action/editer_objet&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_modifier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;article&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;Nouveau titre&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// retirer l&#039;autorisation exceptionnelle&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;autoriser_exception&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;modifier&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;article&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/eff52ab9d71ec8072cd08ecd771795d7.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser_exception($faire, $type, $id, $autoriser)&lt;/code&gt; prend 4 arguments :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$faire&lt;/code&gt;&lt;/strong&gt; avec la m&#234;me signification que pour &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt;&lt;/strong&gt; avec la m&#234;me signification que pour &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id&lt;/code&gt;&lt;/strong&gt; avec la m&#234;me signification que pour &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$autoriser&lt;/code&gt;&lt;/strong&gt; qui est un &lt;i&gt;bool&#233;en&lt;/i&gt; et indique si l'autorisation exceptionnelle est accord&#233;e ou non :&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Lorsque &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$autoriser&lt;/code&gt; vaut &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; &#187; ou n'est pas fourni, on accorde une autorisation exceptionnelle : tous les appels suivant &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt; avec les m&#234;mes arguments &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$faire, $type&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id&lt;/code&gt; renverront &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Lorsque &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$autoriser&lt;/code&gt; vaut &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; &#187; cela signifie que l'autorisation revient sous le r&#233;gime normal et sera v&#233;rifi&#233;e selon la r&#232;gle en vigueur (elle peut donc &#234;tre encore autoris&#233;e ou effectivement interdite). Le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; n'indique donc pas ici qu'on interdit l'action, mais simplement qu'il n'y a plus d'exception.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;D&#233;clarer une nouvelle autorisation&lt;/h3&gt;
&lt;p&gt;Lorsque la fonction g&#233;n&#233;rique &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt; est appel&#233;e, elle cherche une fonction nomm&#233;e &#224; laquelle d&#233;l&#233;guer la v&#233;rification.&lt;/p&gt; &lt;p&gt;Si aucun &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; n'est fourni dans l'appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;, la recherche de la fonction se fait dans l'ordre suivant :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; autoriser_&lt;i&gt;$faire&lt;/i&gt;&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$faire&lt;/i&gt;_dist&lt;/li&gt;&lt;li&gt; autoriser_defaut&lt;/li&gt;&lt;li&gt; autoriser_defaut_dist&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si un &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; est fourni dans l'appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;, la recherche se fait dans l'ordre suivant :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; autoriser_&lt;i&gt;$type&lt;/i&gt;_&lt;i&gt;$faire&lt;/i&gt;&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$type&lt;/i&gt;_&lt;i&gt;$faire&lt;/i&gt;_dist&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$type&lt;/i&gt;&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$type&lt;/i&gt;_dist&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$faire&lt;/i&gt;&lt;/li&gt;&lt;li&gt; autoriser_&lt;i&gt;$faire&lt;/i&gt;_dist&lt;/li&gt;&lt;li&gt; autoriser_defaut&lt;/li&gt;&lt;li&gt; autoriser_defaut_dist&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans les deux cas, la recherche va du plus pr&#233;cis vers le plus g&#233;n&#233;ral. Cela permet de d&#233;finir des familles d'autorisation avec une r&#232;gle g&#233;n&#233;rale (pour une action par exemple), que l'on pr&#233;cise ensuite pour certains objets qui suivent une r&#232;gle diff&#233;rente.&lt;/p&gt; &lt;p&gt;Pour d&#233;finir une autorisation, il suffit donc de cr&#233;er une fonction avec l'un des noms de la liste ci-dessus. La fonction recevra en arguments ceux envoy&#233;s &#224; la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt; et doit renvoyer &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;true&lt;/code&gt; &#187; ou &#171; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt; &#187;.&lt;/p&gt; &lt;p&gt;On peut d&#233;finir une autorisation g&#233;n&#233;rique. Lorsque c'est une autorisation qui n'est pas encore d&#233;finie, on la suffixe en g&#233;n&#233;ral par un &lt;i&gt;_dist&lt;/i&gt; qui permet toujours &#224; un webmestre de la surcharger dans son fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mes_options.php&lt;/code&gt; (en d&#233;clarant la fonction de m&#234;me nom, mais sans son suffixe &lt;i&gt;_dist&lt;/i&gt;).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; on voit que dans le nom de la fonction, l'ordre de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$faire&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; est invers&#233; par rapport &#224; celui de l'appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&#192; noter &#233;galement qu'&#224; partir de &lt;a href=&quot;http://www.spip.net/fr_article5427.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&quot;color:#00CAD8&quot;&gt;SPIP 3.0&lt;/span&gt;&lt;/a&gt; le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; est pr&#233;sum&#233; correspondre &#224; un objet, et est normalis&#233; lors de l'appel : v&#233;rification qu'il correspond bien &#224; un type d'objet et sinon suppression du &#171; s &#187; final. Cela permet d'assurer qu'on appellera bien la bonne fonction d'autorisation m&#234;me si on utilise un synonyme du &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; (syndic au lieu de site par exemple, ou groupes_mot au lieu de groupe_mots qui est une exception de nommage).&lt;br class=&#039;manualbr&#039; /&gt;Il est cependant possible d'&#233;chapper &#224; cette normalisation en pr&#233;fixant le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt; par un '_' (underscore) dans l'appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Dans tous les cas, tous les autres caract&#232;res '_' sont retir&#233;s du &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$type&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Ainsi un appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser(&#039;modifier&#039;, &#039;groupes_mots&#039;, $id_groupe)&lt;/code&gt; d&#233;l&#232;guera &#224; la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser_groupemots_modifier()&lt;/code&gt; (ou l'une des variantes selon la r&#232;gle ci-dessus si cette fonction pr&#233;cise n'existe pas).&lt;br class=&#039;autobr&#039; /&gt;
Dans les versions ant&#233;rieures &#224; &lt;a href=&quot;http://www.spip.net/fr_article5427.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&quot;color:#00CAD8&quot;&gt;SPIP 3.0&lt;/span&gt;&lt;/a&gt; il convient de toujours faire tr&#232;s attention &#224; bien utiliser le nom de l'objet sans erreur, car sinon l'autorisation par d&#233;faut sera appel&#233;e ce qui peut conduire &#224; une erreur d'autorisation plus ou moins grave selon le cas.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Exemple de fonction d'autorisation :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt; * Autoriser a creer un article :&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt; * Il faut qu&#039;une rubrique existe et qu&#039;on ait le statut necessaire pour creer&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt; * &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt; * @return bool&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009933; font-style: italic;&quot;&gt; */&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; autoriser_article_creer_dist&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$faire&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$type&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$qui&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$opt&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;sql_countsel&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;spip_rubriques&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; AND &lt;a href=&quot;http://www.php.net/in_array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;in_array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$qui&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;0minirezo&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;1comite&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/1ec48e63bfe96401f815fa46a35c873e.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Aide au d&#233;veloppement&lt;/h3&gt;
&lt;p&gt;Lors du d&#233;veloppement d'un plugin, il peut &#234;tre utile de comprendre comment sont appel&#233;es les autorisations et dans quel ordre d'encha&#238;nement.&lt;/p&gt; &lt;p&gt;Pour cela il suffit d'ajouter la ligne suivante dans le fichier &lt;a href=&quot;http://www.spip.net/fr_article4654.html&quot; class=&#039;spip_in&#039;&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mes_options.php&lt;/code&gt;&lt;/a&gt; :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;_DEBUG_AUTORISER&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Chaque appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;autoriser()&lt;/code&gt; sera alors trac&#233; dans le fichier &lt;i&gt;spip.log&lt;/i&gt; avec le nom de la fonction appel&#233;e et le r&#233;sultat qu'elle a retourn&#233;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>#HTML5</title>
		<link>http://www.spip.net/fr_article5057.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5057.html</guid>
		<dc:date>2012-05-19T09:31:16Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>davux</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Permet de tester si le site est en HTML5.&lt;br class=&#039;autobr&#039; /&gt;
Il arrive souvent que SPIP, ainsi que les plugins, g&#233;n&#232;rent des bouts de code HTML sur le site public. Avec l'arriv&#233;e du HTML5, on a d&#233;sormais la possibilit&#233; de produire du HTML plus s&#233;mantique, que ce soit par les nouvelles balises, les nouveaux &#233;l&#233;ments de formulaire, etc.&lt;br class=&#039;autobr&#039; /&gt;
Cependant, sil l'on souhaite continuer &#224; avoir un site valide au sens du W3C (organisme de standardisation du langage HTML entre autres), il est n&#233;cessaire que l'utilisation de code (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique543.html" rel="directory"&gt;Balises&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Permet de tester si le site est en HTML5.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il arrive souvent que SPIP, ainsi que les plugins, g&#233;n&#232;rent des bouts de code HTML sur le site public. Avec l'arriv&#233;e du HTML5, on a d&#233;sormais la possibilit&#233; de produire du HTML plus s&#233;mantique, que ce soit par les nouvelles balises, les nouveaux &#233;l&#233;ments de formulaire, etc.&lt;/p&gt; &lt;p&gt;Cependant, sil l'on souhaite continuer &#224; avoir un site valide au sens du W3C (organisme de standardisation du langage HTML entre autres), il est n&#233;cessaire que l'utilisation de code HTML5 soit accompagn&#233;e de la d&#233;claration du &lt;i&gt;doctype&lt;/i&gt; suivant :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #00bbdd;&quot;&gt;&lt;!DOCTYPE html&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Cela signifie donc que SPIP et les plugins ne peuvent pas utiliser aveugl&#233;ment des &#233;l&#233;ments de HTML5 : il leur faut une indication de la part de la (ou du) webmestre pour savoir quel est le niveau de compatibilit&#233; HTML souhait&#233;. Cela est possible depuis SPIP 3.0 par l'apparition d'une nouvelle option de configuration.&lt;/p&gt;
&lt;dl class=&#039;spip_document_2521 spip_documents spip_documents_center&#039;&gt;
&lt;dt&gt;&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH315/conf_html5-2b18a.png&#039; width=&#039;500&#039; height=&#039;315&#039; alt=&#039;PNG - 56.1&#160;ko&#039; style=&#039;&#039; /&gt;&lt;/dt&gt;
&lt;dt class=&#039;crayon document-titre-2521 spip_doc_titre&#039; style=&#039;width:350px;&#039;&gt;&lt;strong&gt;Configuration HTML5&lt;/strong&gt;&lt;/dt&gt;
&lt;dd class=&#039;crayon document-descriptif-2521 spip_doc_descriptif&#039; style=&#039;width:350px;&#039;&gt;Zone de configuration dans SPIP pour autoriser ou non l'utilisation de HTML5.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;La balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#HTML5&lt;/code&gt; permet de tenir compte de ce choix :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Si le HTML5 est autoris&#233;, la balise renvoie un r&#233;sultat non-vide (espace)&lt;/li&gt;&lt;li&gt; Si la configuration reste sur HTML4 (valeur par d&#233;faut), la balise renvoie un r&#233;sultat vide. Sur les versions de SPIP inf&#233;rieures &#224; SPIP 3.0, la balise est inconnue, et renverra donc &#233;galement un r&#233;sultat vide. Il est donc possible de l'utiliser n'importe o&#249;, quelle que soit la version de SPIP vis&#233;e : les sites sous SPIP avant 2.2 seront juste consid&#233;r&#233;s comme &#233;tant en HTML4.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Exemples d'utilisation&lt;/h3&gt;
&lt;p&gt;Par exemple, un plugin ou un squelette qui g&#233;n&#232;re une zone de recherche dans un formulaire pourra utiliser la balise de la mani&#232;re suivante :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;[(#HTML5|?{search,text})] ... /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ce code g&#233;n&#232;rera, si le HTML5 est activ&#233; dans la configuration :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;search&quot;&lt;/span&gt; ... &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;et dans le cas contraire :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; ... &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Autre exemple : d&#233;finition d'une zone de saisie de formulaire comme obligatoire :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;#HTML5&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000066;&quot;&gt;required&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;required&quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; ... &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Le r&#233;sultat sera donc l'un ou l'autre de ceux-ci suivant la configuration :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;required&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;required&quot;&lt;/span&gt; ... &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_xml cadre spip_cadre&quot;&gt;&lt;div class=&quot;xml&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&lt;input&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;text&quot;&lt;/span&gt; ... &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Support par les navigateurs&lt;/h3&gt;
&lt;p&gt;Bien s&#251;r, comme toujours en d&#233;veloppement web, n'oubliez pas de v&#233;rifier quel est le comportement des navigateurs qui ne connaissent pas les balises HTML et attributs que vous souhaitez utiliser.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Formulaires CVT en plusieurs pages</title>
		<link>http://www.spip.net/fr_article5386.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5386.html</guid>
		<dc:date>2012-05-19T09:31:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>JLuc</dc:creator>


		<dc:subject>Formulaires CVT</dc:subject>
		<dc:subject>SPIP 3.0</dc:subject>

		<description>&lt;p&gt;SPIP 3 introduit la possibilit&#233; de cr&#233;er un formulaire compos&#233; de plusieurs pages de saisies avec validation de la saisie au fur de chaque page, et un seul traitement final&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb1&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;Cette fonctionnalit&#233; est &#233;galement accessible pour SPIP 2 mais n&#233;cessite (...)&#039; id=&#039;nh1&#039;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;

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

/ 
&lt;a href="http://www.spip.net/@multifrformulairescvtencvtformsesformularioscvtcaformulariscvtmulti" rel="tag"&gt;Formulaires CVT&lt;/a&gt;, 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les formulaires multi-&#233;tapes (ou multi-pages) sont une variation des formulaires CVT qui permet d'enchainer plusieurs pages de saisies, avec une validation (v&#233;rification) interm&#233;diaire de chacune de ces pages et un traitement final qui permet de prendre en compte toutes les valeurs saisies en une seule fois.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Il est n&#233;cessaire d'&#234;tre d&#233;j&#224; familier avec &lt;a href=&quot;http://www.spip.net/fr_article3796.html&quot; class=&#039;spip_in&#039;&gt;les formulaires CVT&lt;/a&gt; pour cr&#233;er un formulaire CVT en plusieurs pages.&lt;/p&gt; &lt;p&gt;Nous allons voir comment construire facilement un formulaire d'inscription en 3 pages distinctes, SPIP prenant en charge la partie compliqu&#233;e qui consiste &#224; m&#233;moriser les donn&#233;es d&#233;ja saisies pour le traitement final, et &#224; permettre la navigation entre les pages.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Les squelettes de chaque page&lt;/h3&gt;
&lt;p&gt;Chaque page du formulaire se pr&#233;sente comme un formulaire complet (avec un bouton de validation qui sert &#224; passer &#224; l'&#233;tape suivante).&lt;/p&gt; &lt;p&gt;Chacune des &#233;tape est num&#233;rot&#233;e, &#224; partir de 1, et d&#233;crite par un fichier squelette ind&#233;pendant qui impl&#233;mente un formulaire autonome pour les saisies de cette page.&lt;/p&gt; &lt;p&gt;Pour l'&#233;tape 1, le squelette est &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires/inscription.html&lt;/code&gt;.&lt;br class=&#039;manualbr&#039; /&gt;Pour l'&#233;tape 2, le squelette est &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires/inscription_2.html&lt;/code&gt;.&lt;br class=&#039;manualbr&#039; /&gt;Pour l'&#233;tape 3, le squelette est &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires/inscription_3.html&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Voici par exemple &#224; quoi ressemble la premi&#232;re page de notre formulaire :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;div class=&quot;formulaire_spip&quot;&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;p class=&quot;reponse_formulaire reponse_formulaire_ok&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #FF4E00;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{message_ok}&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;p class=&quot;reponse_formulaire reponse_formulaire_erreur&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #FF4E00;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{message_erreur}&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; [(&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{editable}&lt;/span&gt;)&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;form method=&#039;post&#039; action=&#039;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{action}&lt;/span&gt;&#039;&gt;&lt;div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#REM&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt; les hidden qui declencheront le service du formulaire parametre : url d&#039;action &lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#ACTION_FORMULAIRE&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;{action},&lt;span style=&quot;color: #D05000;&quot;&gt;#FORM&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&lt;!-- Ici les saisies de l&#039;&#233;tape 1, directement en HTML. &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt; Elles pourraient aussi &#234;tre g&#233;n&#233;r&#233;es par le plugin SAISIES --&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;label&gt;Votre email&lt;/label&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;input type=&#039;text&#039; name=&#039;email&#039; value=&#039;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{email}&lt;/span&gt;&#039; /&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;input type=&quot;submit&quot; class=&quot;submit&quot; value=&quot;&lt;span style=&quot;color: #C90&quot;&gt;&lt;:pass_ok:&gt;&lt;/span&gt;&quot; /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/form&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; ]&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/60289f0c79086c8492487746ea635098.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#192; l'int&#233;rieur de chaque squelette, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV{_etape}&lt;/code&gt; renvoie le n&#176; de l'&#233;tape, et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV{_etapes}&lt;/code&gt; renvoie le nombre total d'&#233;tapes de saisie. Cela permet par exemple d'afficher un &#233;tat de l'avancement de la saisie par rapport au nombre total de pages de saisies :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;div class=&quot;formulaire_spip formulaire_inscription formulaire_&lt;span style=&quot;color: #D05000;&quot;&gt;#FORM&lt;/span&gt; formulaire_&lt;span style=&quot;color: #D05000;&quot;&gt;#FORM_&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{_etape}&lt;/span&gt;&quot;&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;h3&gt;Inscription &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{_etape}&lt;/span&gt; / &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{_etapes}&lt;/span&gt; : indiquez votre email&lt;/h3&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;... &lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/63f0c13ae1d4aef317b01fa07d0a73b1.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A chaque page, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV&lt;/code&gt; contient toutes les valeurs d&#233;j&#224; saisies lors des &#233;tapes pr&#233;c&#233;dentes. Ainsi, si vous voulez proposer une valeur par d&#233;faut qui d&#233;pend d'une saisie pr&#233;c&#233;dente, il suffit d'utiliser celle-ci pour pr&#233;-remplir votre saisie.&lt;/p&gt; &lt;p&gt;Sur chaque page, il est aussi possible de proposer un bouton qui renvoie vers une autre &#233;tape (par exemple pour faire un bouton de retour &#224; l'&#233;tape pr&#233;c&#233;dente). Il suffit pour cela de donner au bouton l'attribut &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;name&lt;/code&gt; avec la valeur &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;_retour_etape_n&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;n&lt;/code&gt; d&#233;signant le num&#233;ro de l'&#233;tape vis&#233;e :&lt;/p&gt; &lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;5&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;&lt;p class=&quot;boutons&quot;&gt; &lt;input type=&quot;submit&quot; class=&quot;submit&quot; name=&quot;_retour_etape_2&quot; value=&quot;&lt;:retour:&gt;&quot; /&gt; &lt;/p&gt;&lt;/textarea&gt;
&lt;p&gt;Il est possible que cette &#233;tape soit une &#233;tape en avant, mais attention : dans tous les cas l'utilisateur ne pourra passer &#224; une &#233;tape n que si la saisie des &#233;tapes pr&#233;c&#233;dentes est correcte et sans erreur ! Dans le cas contraire, c'est la premi&#232;re page avec des erreurs qui lui sera pr&#233;sent&#233;e.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Charger et d&#233;clarer les &#233;tapes de saisie&lt;/h3&gt;
&lt;p&gt;La d&#233;claration des &#233;tapes ou pages de saisies se fait dans la fonction charger() de votre formulaire CVT.&lt;/p&gt; &lt;p&gt;La fonction charger() est identique &#224; celle d'un formulaire CVT conventionnel : elle doit retourner un tableau de tous les champs qui seront saisis dans l'ensemble du formulaire (donc toutes &#233;tapes confondues, comme si il n'y avait qu'une seule page de saisie).&lt;/p&gt; &lt;p&gt;Mais en plus, elle doit d&#233;clarer que le formulaire comporte plusieurs pages. Cela se fait en renvoyant en plus une valeur '_etapes' qui d&#233;signe le nombre d'&#233;tapes de saisies.&lt;/p&gt; &lt;p&gt;Dans notre exemple :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php code&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; formulaires_inscription_charger_dist&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;email&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// etape 1&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;nom&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// etape 2&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;prenom&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;semaine&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// &#233;tape 3&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;_etapes&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;div class=&#039;code_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/6adb661f9f50f167bfc6503f3fbec615.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;C'est cette valeur _etapes qui va d&#233;clencher la prise en charge par SPIP des diff&#233;rentes pages pr&#233;par&#233;es ci-dessus.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt; V&#233;rifier la saisie &#224; chaque &#233;tape&lt;/h3&gt;
&lt;p&gt;La v&#233;rification de la saisie pr&#233;sente ici une particularit&#233;. Au lieu d'avoir une seule fonction verifier() comme dans un formulaire CVT conventionnel, il va falloir fournir ici une fonction verifier() par page de saisie. Celles-ci sont num&#233;rot&#233;es &#224; partir de 1 comme pour les squelettes des diff&#233;rentes pages.&lt;/p&gt; &lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires_inscription_verifier_1_dist&lt;/code&gt; v&#233;rifie les saisies de l'&#233;tape 1 uniquement.&lt;br class=&#039;manualbr&#039; /&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires_inscription_verifier_2_dist&lt;/code&gt; v&#233;rifie les saisies de l'&#233;tape 2.&lt;br class=&#039;manualbr&#039; /&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires_inscription_verifier_3_dist&lt;/code&gt; v&#233;rifie les saisies de l'&#233;tape 3.&lt;br class=&#039;manualbr&#039; /&gt;etc.&lt;/p&gt; &lt;p&gt;A l'int&#233;rieur de ces fonctions, l'appel &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;_request&lt;/code&gt; permet d'acc&#233;der aux valeurs saisies depuis l'&#233;tape 1 jusqu'&#224; l'&#233;tape courante.&lt;/p&gt; &lt;p&gt;Le num&#233;ro d'&#233;tape courante et le nombre totale d'&#233;tapes sont &#233;galement accessible par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;request('_etape')&lt;/code&gt; et par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;request('_etapes')&lt;/code&gt;, si n&#233;cessaire, pour mutualiser du code par exemple.&lt;/p&gt; &lt;p&gt;Apr&#232;s chaque page &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;n&lt;/code&gt;, SPIP appelle les fonctions de v&#233;rification des &#233;tapes &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;1&lt;/code&gt; &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;n&lt;/code&gt; pour v&#233;rifier l'absence de r&#233;gression dans la validation (qui pourrait &#234;tre due &#224; une erreur ou &#224; une tentative de fraude par l'utilisateur). En cas d'erreur, l'utilisateur est automatiquement renvoy&#233; sur la premi&#232;re page dont la saisie n'est pas correcte.&lt;/p&gt; &lt;p&gt;En cas de succ&#232;s, SPIP passe &#224; l'&#233;tape suivante, sauf si l'utilisateur est arriv&#233; &#224; la derni&#232;re page, auquel cas SPIP appelle la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;traiter()&lt;/code&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Traiter la saisie&lt;/h3&gt;
&lt;p&gt;La fonction de traitement des saisies du formulaire n'est appel&#233;e que lorsque toutes les pages ont &#233;t&#233; saisies sans erreur.&lt;/p&gt; &lt;p&gt;Elle peut acc&#233;der &#224; l'ensemble des saisies avec la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;_request&lt;/code&gt; comme si le formulaire avait &#233;t&#233; saisi en une seule fois.&lt;/p&gt; &lt;p&gt;La fonction de traitement est donc tout &#224; fait identique &#224; celle d'un formulaire en une page et se nomme classiquement (ici &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;formulaires_inscription_traiter_dist()&lt;/code&gt;).&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Sans oublier...&lt;/h3&gt;
&lt;p&gt;- Ce formulaire ainsi construit b&#233;n&#233;ficie de tous les avantages des formulaires CVT. Il suffit donc de l'encapsuler dans une &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;div class=&#039;ajax&#039;&gt;&lt;/code&gt; pour qu'il soit automatiqent pris en charge et permette la saisie multi-page en ajax.&lt;/p&gt; &lt;p&gt;- Il est possible d'appeler le formulaire en commen&#231;ant directement &#224; l'&#233;tape 5, par exemple. Pour cela, il suffit de passer le param&#232;tre &quot;_etape=5&quot; dans l'environnement (dans l'url par exemple).&lt;br class=&#039;manualbr&#039; /&gt;Dans ce cas, les v&#233;rifications des 4 pages pr&#233;c&#233;dentes sont effectu&#233;es et en cas de validation, l'&#233;tape 5 est affich&#233;e. Sinon c'est la premi&#232;re &#233;tape qui pr&#233;sente une erreur qui est affich&#233;e.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#039;nb1&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh1&#039; class=&#039;spip_note&#039; title=&#039;Notes 1&#039; rev=&#039;footnote&#039;&gt;1&lt;/a&gt;] &lt;/span&gt;Cette fonctionnalit&#233; est &#233;galement accessible pour SPIP 2 mais n&#233;cessite l'activation du &lt;a href=&quot;http://files.spip.org/spip-zone/#cvt-multi-etapes&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;plugin cvt-multi-etapes&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Formulaire CVT avec sauvegarde automatique</title>
		<link>http://www.spip.net/fr_article5428.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5428.html</guid>
		<dc:date>2012-05-19T09:31:05Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>Formulaires CVT</dc:subject>
		<dc:subject>SPIP 3.0</dc:subject>

		<description>&lt;p&gt;SPIP 3.0 introduit la prise en charge de la sauvegarde automatique de la saisie de l'utilisateur.&lt;/p&gt;

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

/ 
&lt;a href="http://www.spip.net/@multifrformulairescvtencvtformsesformularioscvtcaformulariscvtmulti" rel="tag"&gt;Formulaires CVT&lt;/a&gt;, 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour &#233;viter que les utilisateurs ne perdent le b&#233;n&#233;fice de leur saisie en cas de perte de connexion ou de fausse manipulation, il est possible d'activer une fonction de sauvegarde automatis&#233;e dans les formulaires CVT.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Activer la fonction&lt;/h3&gt;
&lt;p&gt;Pour activer la prise en charge, il suffit que la fonction charger() du formulaire renvoie un identifiant unique qui d&#233;signe le formulaire.&lt;/p&gt; &lt;p&gt;Il y aura une sauvegarde diff&#233;rente par identifiant unique (et par formulaire), celui-ci doit donc d&#233;pendre du contexte de la saisie. Par exemple sur un formulaire de forum en r&#233;ponse &#224; un article on choisira de passer comme identifiant l'id_article de l'article auquel on r&#233;pond.&lt;/p&gt; &lt;p&gt;Cet identifiant peut &#234;tre un entier, une chaine ou un tableau, et doit &#234;tre envoy&#233; dans le champ '_autosave_id' :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; formulaires_repondre_article_charger_dist&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;...,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;_autosave_id&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$id_article&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/3953aaa0869e8f42a324063c8381c5ef.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Ou sont sauvegard&#233;es les donn&#233;es ?&lt;/h3&gt;
&lt;p&gt;Lorsqu'on active cette fonction, le formulaire va envoyer &#224; chaque modification de saisie une requ&#234;te &#224; SPIP avec la liste de tous les champs saisis. SPIP va alors stocker cette information dans la session de l'utilisateur, sur le serveur.&lt;/p&gt; &lt;p&gt;Lorsque la saisie est compl&#232;te et que l'utilisateur valide le formulaire, SPIP va alors vider cette sauvegarde (lors du traitement du formulaire).&lt;/p&gt; &lt;p&gt;Mais si l'utilisateur rencontre une erreur ou un probl&#232;me et oublie de valider le formulaire, la sauvegarde est conserv&#233;e 72H. Si l'utilisateur revient sur le m&#234;me formulaire, il va retrouver le formulaire pr&#233;-rempli avec toutes les informations qu'il avait saisi auparavant.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;De la vie priv&#233;e ...&lt;/h3&gt;
&lt;p&gt;Attention cependant &#224; ne pas utiliser cette sauvegarde automatique dans un formulaire qui collecte des donn&#233;es personnelles dans une session anonyme.&lt;/p&gt; &lt;p&gt;Si l'utilisateur est sur un poste de consultation public et ne valide pas, ses donn&#233;es seront alors disponibles pour quiconque revient sur la m&#234;me page avec son poste de consultation.&lt;/p&gt; &lt;p&gt;Par ailleurs, il est possible de personnaliser la dur&#233;e de 72H de conservation des donn&#233;es saisies en pr&#233;cisant dans le fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;mes_options.php&lt;/code&gt; par exemple (pour une dur&#233;e de 24h) :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;a href=&quot;http://www.php.net/define&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;_AUTOSAVE_GB_DELAY&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3600&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>{tri} et #TRI dans les boucles</title>
		<link>http://www.spip.net/fr_article5429.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5429.html</guid>
		<dc:date>2012-05-19T09:31:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;SPIP 3.0 introduit un crit&#232;re et une balise qui permettent de faire facilement des listes triables.&lt;br class=&#039;autobr&#039; /&gt;
Le crit&#232;re tri simplifie la r&#233;alisation de listes triables de la m&#234;me fa&#231;on que le crit&#232;re pagination simplifie la r&#233;alisation de listes pagin&#233;es.&lt;br class=&#039;autobr&#039; /&gt;
Dans une boucle simple, il permet de d&#233;finir le crit&#232;re de tri en lui indiquant en argument le champ &#224; utiliser par d&#233;faut :&lt;br class=&#039;autobr&#039; /&gt;
Jusque l&#224; rien de nouveau par rapport au crit&#232;re par. Mais tri peut &#234;tre associ&#233; &#224; la balise #TRI qui permet de g&#233;n&#233;rer un lien pour (...)&lt;/p&gt;


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

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP 3.0 introduit un crit&#232;re et une balise qui permettent de faire facilement des listes triables.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{tri}&lt;/code&gt; simplifie la r&#233;alisation de listes triables de la m&#234;me fa&#231;on que le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{pagination}&lt;/code&gt; simplifie la r&#233;alisation de listes pagin&#233;es.&lt;/p&gt; &lt;p&gt;Dans une boucle simple, il permet de d&#233;finir le crit&#232;re de tri en lui indiquant en argument le champ &#224; utiliser par d&#233;faut :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri titre}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/efb0f385375f5321f15bf7bf377ca8f8.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Jusque l&#224; rien de nouveau par rapport au crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{par}&lt;/code&gt;. Mais &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{tri}&lt;/code&gt; peut &#234;tre associ&#233; &#224; la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TRI&lt;/code&gt; qui permet de g&#233;n&#233;rer un lien pour changer le crit&#232;re de tri. La balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TRI&lt;/code&gt; prend en premier argument le champ de tri, et en second argument le libell&#233; du lien clicable pour utiliser ce champ pour le tri :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;B_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{titre,&#039;Trier par titre&#039;}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date,&#039;Trier par date&#039;}&lt;/span&gt; | &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date_redac,&#039;Trier par date de r&#233;daction&#039;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri titre}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/d851246cd2eee8961ea1009dbf554016.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ce faisant l'utilisateur se voit proposer un menu pour modifier le tri de la boucle. Le tri actuellement utilis&#233; est expos&#233; en gras et non clicable, et les tris non utilis&#233;s sont des liens clicables.&lt;/p&gt; &lt;p&gt;Si la boucle est dans une inclusion ajax, il suffit de renseigner la classe ajax en troisi&#232;me argument de la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TRI&lt;/code&gt; pour que les liens se comportent avec un rechargement partiel de la page :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;B_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{titre,&#039;Trier par titre&#039;,ajax}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date,&#039;Trier par date&#039;,ajax}&lt;/span&gt; | &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date_redac,&#039;Trier par date de r&#233;daction&#039;,ajax}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri titre}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/1d1323477cd512ef2a08b8e5303c6c9a.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{tri}&lt;/code&gt; permet &#233;galement d'indiquer le sens du tri par d&#233;faut en second argument. Il faut indiquer la valeur &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;direct&lt;/code&gt; ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;1&lt;/code&gt; pour indiquer un tri croissant par d&#233;faut, et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;inverse&lt;/code&gt; ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;-1&lt;/code&gt; pour un tri d&#233;croissant par d&#233;faut :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;B_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{titre,&#039;Trier par titre&#039;}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date,&#039;Trier par date&#039;}&lt;/span&gt; | &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date_redac,&#039;Trier par date de r&#233;daction&#039;}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri date,-1}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/6bee962d3e3449d7610e7001883ee34c.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Par ailleurs il est aussi possible de proposer le choix du sens de tri. Cela se fait en passant &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&gt;&lt;/code&gt; pour un tri croissant et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;&lt;/code&gt; pour un tri d&#233;croissant en premier argument de la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#TRI&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;B_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{&gt;,&#039;Tri croissant&#039;,ajax}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{&gt;,&#039;Tri d&#233;croissant&#039;,ajax}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{titre,&#039;Trier par titre&#039;,ajax}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date,&#039;Trier par date&#039;,ajax}&lt;/span&gt; | &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date_redac,&#039;Trier par date de r&#233;daction&#039;,ajax}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri titre}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/59827ca97fee16bd40a13e5c9f7959b8.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Cela dit, plut&#244;t que de proposer des boutons de tri syst&#233;matique, une alternative est possible : adapter automatiquement le sens du tri &#224; la colonne utilis&#233;e pour le tri. Cela se fait en passant en second argument de la balise tri un tableau avec le sens par d&#233;faut pour chaque colonne :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#SET&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{defaut_tri,&lt;span style=&quot;color: #D05000;&quot;&gt;#ARRAY&lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;tri,1,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;date,-1,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;date_redac,-1&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;}}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;B_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{titre,&#039;Trier par titre&#039;,ajax}&lt;/span&gt; | &lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date,&#039;Trier par date&#039;,ajax}&lt;/span&gt; | &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#TRI&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{date_redac,&#039;Trier par date de r&#233;daction&#039;,ajax}&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_art&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(ARTICLES)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{tri titre,&lt;span style=&quot;color: #D05000;&quot;&gt;#GET&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{defaut_tri}&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_art&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/59e95b8aef2fdf0f208b0eb311bf8768.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ainsi quand l'utilisateur choisira le tri par titre, celui-ci sera dans un ordre croissant. Mais quand il choisira la date ou la date de r&#233;daction, le tri se fera dans un ordre d&#233;croissant.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les it&#233;rateurs de SPIP</title>
		<link>http://www.spip.net/fr_article5444.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5444.html</guid>
		<dc:date>2012-05-19T09:30:50Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil, Matthieu Marcillaud</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Nous sommes en train de d&#233;velopper dans SPIP une notion g&#233;n&#233;rale de boucle, bas&#233;e sur les it&#233;rateurs de PHP.&lt;br class=&#039;autobr&#039; /&gt;
Ces boucles ne portent plus exclusivement sur des requ&#234;tes SQL, mais peuvent tourner sur toutes sortes de listes de donn&#233;es. Par exemple :&lt;br class=&#039;autobr&#039; /&gt; un tableau de donn&#233;es produit par une fonction quelconque&lt;br class=&#039;autobr&#039; /&gt; le contenu d'un fichier local au format XML, CSV, JSON, YAML, etc.&lt;br class=&#039;autobr&#039; /&gt; une liste de fichiers dans un r&#233;pertoire du serveur&lt;br class=&#039;autobr&#039; /&gt; une requ&#234;te sur un webservice&lt;br class=&#039;autobr&#039; /&gt; etc (LDAP...).&lt;br class=&#039;autobr&#039; /&gt;
Les boucles SQL&lt;br class=&#039;autobr&#039; /&gt;
Sans (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique702.html" rel="directory"&gt;Les it&#233;rateurs&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Nous sommes en train de d&#233;velopper dans SPIP une notion g&#233;n&#233;rale de boucle, bas&#233;e sur les it&#233;rateurs de PHP.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ces boucles ne portent plus exclusivement sur des requ&#234;tes SQL, mais peuvent tourner sur toutes sortes de listes de donn&#233;es. Par exemple :&lt;br /&gt;&#8212; un tableau de donn&#233;es produit par une fonction quelconque&lt;br /&gt;&#8212; le contenu d'un fichier local au format XML, CSV, JSON, YAML, etc.&lt;br /&gt;&#8212; une liste de fichiers dans un r&#233;pertoire du serveur&lt;br /&gt;&#8212; une requ&#234;te sur un webservice&lt;br /&gt;&#8212; etc (LDAP...).&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Les boucles SQL&lt;/h3&gt;
&lt;p&gt;Sans surprise, l'it&#233;rateur classique de SPIP s'appelle SQL. Il ex&#233;cute la requ&#234;te telle que SPIP l'a calcul&#233;e, et sait parcourir la liste de r&#233;sultats pour les envoyer &#224; la boucle.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;C'est une boucle capable d'it&#233;rer n'importe quel tableau de donn&#233;es. Sa syntaxe de base est la suivante :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE(DATA) {source ...}&gt; #BALISES &lt;/BOUCLE&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{source format, donn&#233;es}&lt;/code&gt; d&#233;finit les donn&#233;es sur lesquelles la boucle va it&#233;rer.&lt;/p&gt; &lt;p&gt;La d&#233;finition d'une source de donn&#233;es n&#233;cessite deux &#233;l&#233;ments :&lt;/p&gt; &lt;p&gt;&#8212; &lt;strong&gt;La partie &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;donn&#233;es&lt;/code&gt;&lt;/strong&gt; : cet &#233;l&#233;ment peut &#234;tre de plusieurs natures :&lt;br /&gt;- un tableau de donn&#233;es, par exemple &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#ENV*&lt;/code&gt;&lt;br /&gt;- le chemin d'un fichier sur le disque dur, ex : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sources/definitions.csv&lt;/code&gt;&lt;br /&gt;- l'URL d'un fichier ou d'un webservice, ex : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;http://per.sonn.es/bases/phobia.fr.yaml&lt;/code&gt;&lt;br /&gt;- ou encore, une cha&#238;ne quelconque que le format saura transformer en tableau de donn&#233;es, ex : &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&quot;select * from flickr.photos.search where text=&#039;spip&#039;&quot;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&#8212; &lt;strong&gt;La partie &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;format&lt;/code&gt;&lt;/strong&gt; est &#224; prendre dans la liste ci-dessous :&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;table&lt;/code&gt; (alias &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;array&lt;/code&gt; ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;tableau&lt;/code&gt;), pour un tableau d&#233;j&#224; cr&#233;&#233;&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;csv&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;json&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;yaml&lt;/code&gt; pour un fichier compos&#233; dans l'un de ces formats&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;file&lt;/code&gt; pour boucler sur les lignes d'un fichier&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;glob&lt;/code&gt; ou &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;pregfiles&lt;/code&gt; pour boucler sur les fichiers d'un r&#233;pertoire (et plus...)&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;rss&lt;/code&gt; (alias &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;atom&lt;/code&gt;) pour lire un flux de nouvelles&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;plugins&lt;/code&gt; pour lister les plugins actifs sur le site&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;yql&lt;/code&gt; pour envoyer une requ&#234;te sur le webservice de Yahoo Query Language&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sql&lt;/code&gt; pour envoyer une requ&#234;te brute au serveur SQL (utiliser &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{source sql, connecteur:requete}&lt;/code&gt; pour envoyer la requ&#234;te sur une base externe)&lt;br /&gt;- &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;ics&lt;/code&gt; pour boucler sur des calendriers (n&#233;cessite le plugin &lt;i&gt;icalendar&lt;/i&gt; : lire &lt;a href=&quot;http://www.spip.net/fr_article5446.html&quot; class=&#039;spip_in&#039;&gt;La boucle iCalendar&lt;/a&gt;)&lt;br /&gt;- etc.&lt;/p&gt; &lt;p&gt;Tous ces formats sont d&#233;j&#224; disponibles, et il est tr&#232;s ais&#233; d'en ajouter un nouveau, en cr&#233;ant une simple fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;inc_FORMAT_to_array($u)&lt;/code&gt;. A titre d'exemple voici la fonction qui transforme un fichier JSON en tableau de donn&#233;es :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;function inc_json_to_array_dist($u) {&lt;br /&gt; if (is_array($json = json_decode($u))&lt;br /&gt; OR is_object($json))&lt;br /&gt; return (array) $json;&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;i&gt;A lire : &lt;a href=&quot;http://www.spip.net/fr_article5443.html&quot; class=&#039;spip_in&#039;&gt;Exemples de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;BOUCLE(DATA)&lt;/code&gt; &lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;YQL &#8212; Yahoo Query Language&lt;/h3&gt;
&lt;p&gt;YQL est un webservice permettant d'interroger de fa&#231;on simple de nombreux sites comme google, twitter, flickr, etc. Avec la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt;, SPIP facilite grandement son int&#233;gration sous forme de boucles : &lt;i&gt;Cf.&lt;/i&gt; &lt;a href=&quot;http://www.spip.net/fr_article5445.html&quot; class=&#039;spip_in&#039;&gt;Exemples de boucles YQL&lt;/a&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;It&#233;rateurs PHP&lt;/h3&gt;
&lt;p&gt;SPIP est capable d'utiliser les it&#233;rateurs PHP standards. Il convient de se reporter &#224; leur documentation, qui est souvent tr&#232;s succincte, et de v&#233;rifier que les it&#233;rateurs en questions sont disponibles sur votre syst&#232;me.&lt;/p&gt; &lt;p&gt;Notons, par exemple, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DirectoryIterator&lt;/code&gt;, qui permet de lister les fichiers d'un r&#233;pertoire :&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt; &lt;BOUCLE_ls(php:DirectoryIterator){args IMG/jpg/}&lt;br /&gt; {pagination 10}&lt;br /&gt; {valeur!==^\.}{valeur==\.jpg$}&lt;br /&gt; &gt;[(#VAL{Y-m-d H:i:s}|date{#GETMTIME})] / #VALEUR&lt;br /&gt; &lt;/BOUCLE_ls&gt;&lt;br /&gt; &lt;/pre&gt;&lt;br /&gt; #PAGINATION&lt;br /&gt; &lt;/B_ls&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;pre&gt;2008-02-01 23:27:23 / arton2135.jpg 2008-08-21 11:12:58 / DSC03420.jpg 2008-08-21 11:13:11 / DSC03421.jpg 2009-08-27 11:20:11 / hash-1.jpg 2009-08-27 11:20:04 / hash.jpg&lt;/pre&gt; &lt;/blockquote&gt;
&lt;p&gt;Il convient d'indiquer &#224; SPIP qu'il s'agit d'un it&#233;rateur PHP, en indiquant &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(php:...)&lt;/code&gt; avant le nom de l'it&#233;rateur.&lt;/p&gt; &lt;p&gt;Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{args xx,yy}&lt;/code&gt; d&#233;finit les arguments que l'on va passer &#224; l'it&#233;rateur lors de son initialisation. Pour &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DirectoryIterator&lt;/code&gt;, il s'agit du chemin du r&#233;pertoire &#224; lister.&lt;/p&gt; &lt;p&gt;Les m&#233;thodes de cet it&#233;rateur (&lt;i&gt;cf.&lt;/i&gt; &lt;a href=&quot;http://php.net/manual/fr/class.directoryiterator.php&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://php.net/manual/fr/class.directoryiterator.php&lt;/a&gt;) sont disponibles sous forme de balises (ici, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#GETMTIME&lt;/code&gt;).&lt;/p&gt; &lt;p&gt;&lt;i&gt;Remarque :&lt;/i&gt; pour lister le contenu d'un r&#233;pertoire, le format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;glob&lt;/code&gt; de la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; est sans doute plus facile &#224; utiliser que cet it&#233;rateur PHP.&lt;br class=&#039;manualbr&#039; /&gt;&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_ls(DATA){source ls, IMG/jpg/*.jpg}&lt;br /&gt; {!par mtime}&gt; ...&lt;/code&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt; Filtrage, tri, pagination, fusion &lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Filtres.&lt;/strong&gt; Comme les boucles SQL, les boucles &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; peuvent &#234;tre filtr&#233;es par des crit&#232;res du type &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{valeur=x}&lt;/code&gt; ; les op&#233;rateurs disponibles sont &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;=&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&gt;&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&gt;=&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;=&lt;/code&gt;, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;==&lt;/code&gt; (expression rationnelle) et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;LIKE&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Cependant ce filtrage s'effectue non pas en amont lors de la requ&#234;te, comme en SQL, mais en aval, sur le tableau de donn&#233;es initialement r&#233;cup&#233;r&#233;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Tris.&lt;/strong&gt; Les tris &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{par xx}&lt;/code&gt; sont &#233;galement possibles, avec leur variante &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{!par xx}&lt;/code&gt; pour trier en ordre inverse.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pagination.&lt;/strong&gt; La pagination fonctionne normalement, ainsi que le crit&#232;re offset/limit &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{a,b}&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Fusion.&lt;/strong&gt; Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{fusion /x/y}&lt;/code&gt; fonctionne aussi. Par exemple, pour un fichier d'adresses au format CSV, si l'email est le champ n&#176; 3, on pourra ne retenir qu'un seul enregistrement par email avec la boucle suivante :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt; &lt;BOUCLE_csv(DATA){source csv, adresses.csv} &lt;br /&gt; {fusion /3} &lt;br /&gt; {par /0}{&#039;&lt;br /&gt;&#039;}&gt; &lt;br /&gt; #VALEUR{0} : #VALEUR{3} &lt;br /&gt; &lt;/BOUCLE_csv&gt; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La fusion se fait apr&#232;s le tri, et retient le premier &#233;l&#233;ment&lt;br class=&#039;autobr&#039; /&gt;
rencontr&#233;. De cette mani&#232;re, si un tableau est trie &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{!par date}&lt;/code&gt; puis fusionn&#233; sur l'email, l'enregistrement retenu pour chaque email sera le plus r&#233;cent.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;i&gt;Dans le prochain article, nous verrons &lt;a href=&quot;http://www.spip.net/fr_article5443.html&quot; class=&#039;spip_in&#039;&gt;des exemples de boucles &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt;&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>API editer_liens</title>
		<link>http://www.spip.net/fr_article5477.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5477.html</guid>
		<dc:date>2012-05-19T09:30:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;SPIP 3 introduit une gestion g&#233;n&#233;rique des tables de liens d'un objet avec n'importe quel autre objet.&lt;br class=&#039;autobr&#039; /&gt;
Table de lien Les liens sont structurellement non sym&#233;triques : il partent d'un objet source pour aller vers n'importe quel objet destination.&lt;br class=&#039;autobr&#039; /&gt;
Pour &#234;tre associable en tant que source, un objet bidibule stock&#233; dans une table spip_bidibules doit poss&#233;der une table spip_bidibules_liens qui poss&#232;dera un champ id_bidibule (m&#234;me nom que la cl&#233; primaire de spip_bidibules) et deux champs id_objet et objet. (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique257.html" rel="directory"&gt;Guide des fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP 3 introduit une gestion g&#233;n&#233;rique des tables de liens d'un objet avec n'importe quel autre objet.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Table de lien&lt;/h3&gt;
&lt;p&gt;Les liens sont structurellement non sym&#233;triques : il partent d'un objet source pour aller vers n'importe quel objet destination.&lt;/p&gt; &lt;p&gt;Pour &#234;tre associable en tant que source, un objet &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;bidibule&lt;/code&gt; stock&#233; dans une table &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_bidibules&lt;/code&gt; doit poss&#233;der une table &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_bidibules_liens&lt;/code&gt; qui poss&#232;dera un champ &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;id_bidibule&lt;/code&gt; (m&#234;me nom que la cl&#233; primaire de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_bidibules&lt;/code&gt;) et deux champs &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;id_objet&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet&lt;/code&gt;.&lt;br class=&#039;manualbr&#039; /&gt;La table peut aussi comporter d'autres champs pour qualifier les liens.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;API&lt;/h3&gt;
&lt;p&gt;L'API permet de g&#233;rer simplement les liens sans manipuler directement des requ&#234;tes SQL, et en offrant syst&#233;matiquement des points d'entr&#233;e aux plugins qui peuvent ainsi savoir quand un lien est ajout&#233;, supprim&#233;, ou modifi&#233; et agir en cons&#233;quence.&lt;/p&gt; &lt;p&gt;Pour utiliser l'API il faut inclure &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;action/editer_liens.php&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;action/editer_liens&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;objet_associable&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associable($objet)&lt;/code&gt; teste si un objet peut &#234;tre associ&#233; &#224; d'autres via sa table de liens.&lt;/p&gt; &lt;p&gt;Si l'objet n'est pas associable (il n'a pas de table de liens d&#233;di&#233;e), la fonction renvoie &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;false&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Si l'objet est associable, la fonction renvoie un tableau compos&#233; du nom de la cl&#233; primaire (commune &#224; la table de liens et &#224; la table de l'objet), et le nom de la table de liens.&lt;/p&gt; &lt;p&gt;Par exemple (et par d&#233;faut dans SPIP) les auteurs, les documents, les mots sont des objets associables car ils disposent tous d'une table spip_xxx_liens.&lt;/p&gt; &lt;p&gt;Par contre, les articles ne sont pas associables car ils ne disposent pas de table spip_articles_liens. Cela signifie qu'on ne peut pas cr&#233;er de liens partant des articles vers un autre objet quelconque. En revanche on peut cr&#233;er un lien depuis un mot, un auteur ou un document vers un article.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;objet_associer&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer($objets_source, $objets_lies[,$qualif])&lt;/code&gt; permet d'associer les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt; aux &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; via leurs table de lien propres.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; doivent &#234;tre tous associables au sens de la fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associable()&lt;/code&gt;. Les objets sources sont donc les pivots sur lesquels portent les liens.&lt;/p&gt; &lt;p&gt;Le format de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; est commun a toutes les fonctions de manipulation de liens. &lt;br class=&#039;manualbr&#039; /&gt;C'est un tableau dont&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; chaque cl&#233; correspond au nom de l'objet &#224; associer&lt;/li&gt;&lt;li&gt; chaque valeur d&#233;crit le ou les id pour chaque objet. Les valeurs peuvent &#234;tre :&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le joker &quot;*&quot; qui d&#233;signe &quot;tous les id d&#233;ja dans la table de lien&quot; (il a donc peu d'int&#233;r&#234;t dans le cas de l'ajout de liens comme ici)&lt;/li&gt;&lt;li&gt; une valeur scalaire autre d&#233;signe un id pr&#233;cis&lt;/li&gt;&lt;li&gt; un tableau d&#233;signe une liste d'id (un tableau ne peut pas contenir le joker &quot;*&quot;)&lt;/li&gt;&lt;li&gt; un tableau de deux &#233;l&#233;ments commen&#231;ant par la valeur 'NOT' d&#233;signe une condition exclusive : tous les id d&#233;j&#224; dans la table de lien sauf ceux d&#233;crits dans la seconde valeur (qui peut &#234;tre &#224; son tour un scalaire ou un tableau)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Le format de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt; est commun a toutes les fonctions de manipulation de liens. &lt;br class=&#039;manualbr&#039; /&gt;C'est un tableau dont&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; chaque cl&#233; correspond au nom de l'objet &#224; associer. La valeur joker &quot;*&quot; d&#233;signe &quot;tous les objets pr&#233;sents dans la table de lien&quot; (peu d'int&#233;r&#234;t dans le cas d'ajout de lien donc)&lt;/li&gt;&lt;li&gt; chaque valeur d&#233;crit le ou les id pour chaque objet. Les valeurs peuvent &#234;tre :&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le joker &quot;*&quot; qui d&#233;signe &quot;tous les id d&#233;ja dans la table de lien&quot; (il a donc peu d'int&#233;r&#234;t dans le cas de l'ajout de liens comme ici)&lt;/li&gt;&lt;li&gt; une valeur scalaire autre d&#233;signe un id pr&#233;cis&lt;/li&gt;&lt;li&gt; un tableau d&#233;signe une liste d'id (un tableau ne peut pas contenir le joker &quot;*&quot;)&lt;/li&gt;&lt;li&gt; un tableau de deux &#233;l&#233;ments commen&#231;ant par la valeur 'NOT' d&#233;signe une condition exclusive : tous les id d&#233;j&#224; dans la table de lien sauf ceux d&#233;crits dans la seconde valeur (qui peut &#234;tre &#224; son tour un scalaire ou un tableau)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qualif&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt; peut prendre un troisi&#232;me argument facultatif &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qualif&lt;/code&gt; qui est un tableau associatif &lt;/code&gt;champ=&gt;valeur&lt;/code&gt; avec lequel seront modifi&#233;s les liens ajout&#233;s. Cela peut &#234;tre utile si la table de lien dispose de champs suppl&#233;mentaires qui d&#233;crivent les liens.&lt;/p&gt; &lt;p&gt;Si plusieurs liens sont cr&#233;&#233;s en m&#234;me temps, ils se voient appliquer tous les m&#234;mes valeurs d&#233;crites dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qualif&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;exemples&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Les exemples ci-dessous sont valides :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;document&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;vu&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;oui&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/c8dffbab8a8afc01187e477df66c7508.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Le fonction renvoie le nombre de liens effectivement cr&#233;&#233;s (certains liens pouvant d&#233;j&#224; exister au moment de la tentative d'ajout, qui ne sont alors pas compt&#233;s).&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;objet_dissocier&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_dissocier($objets_source,$objets_lies)&lt;/code&gt; permet de supprimer les liens entre les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;exemples&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Les exemples ci-dessous sont valides :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_dissocier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;/* Exemple pour associer un auteur &#224; une liste d&#039;article et uniquement &#224; ceux l&#224; */&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_associer&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_dissocier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;auteur&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;NOT&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/63ad5db7f9e66fff92931dc73f3c02b6.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La fonction renvoie le nombre de liens effectivement supprim&#233;s.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;objet_qualifier_liens&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_qualifier_liens($objets_source,$objets_lies,$qualif)&lt;/code&gt; permet de modifier les valeurs des champs d&#233;crits dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qualif&lt;/code&gt; sur les liens entre &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$qualif&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;exemples&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Les exemples ci-dessous sont valides :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;objet_qualifier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;document&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;article&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;vu&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;oui&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La fonction renvoie le nombre de mise &#224; jour en base ou false en cas d'&#233;chec.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;objet_trouver_liens&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_trouver_liens($objets_source,$objets_lies)&lt;/code&gt; permet de retrouver tous les liens de &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; vers &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;La fonction renvoie un tableau constitu&#233; d'un tableau associatif pour chaque lien trouv&#233;. Ce dernier contient l'ensemble des champs du lien, auquel sont ajout&#233;s une entr&#233;e &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet=&gt;id&lt;/code&gt; pour la source et la destination du lien, pour simplifier le traitement au retour (&#233;vite d'avoir &#224; connaitre les cl&#233;s primaires par exemple).&lt;/p&gt;
&lt;h4&gt;objet_optimiser_liens&lt;/h4&gt; &lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_optimiser_liens($objets_source,$objets_lies)&lt;/code&gt; nettoie les liens restant entre &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt; lorsque l'un des deux n'existe plus (suppression en base de donn&#233;es).&lt;/p&gt; &lt;p&gt;Cette fonction est classiquement utilis&#233;e dans des fonctions crons de nettoyage de la base de donn&#233;es.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_source&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objets_lies&lt;/code&gt;&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;voir le format identique &#224; celui d&#233;crit dans &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_associer&lt;/code&gt;&lt;/p&gt; &lt;p&gt;La fonction renvoie le nombre de liens obsol&#232;tes nettoy&#233;s&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;objet_dupliquer_liens&lt;/h3&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;objet_dupliquer_liens($objet,$id_source,$id_cible)&lt;/code&gt; va dupliquer tous les liens de l'&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objet $id_source&lt;/code&gt; sur l'&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objet $id_cible&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Pour cela, toutes les tables de liens de tous les objets connus seront parcourues pour trouver les liens depuis et vers l'&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$objet $id_source&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Chaque lien trouv&#233; sera dupliqu&#233; en substituant &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_cible&lt;/code&gt; &#224; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$id_source&lt;/code&gt;&lt;/p&gt; &lt;p&gt;La fonction retourne le nombre de liens dupliqu&#233;s.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Interface d'&#233;dition&lt;/h3&gt;
&lt;p&gt;Une interface g&#233;n&#233;rique &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS&lt;/code&gt; utilisable dans les squelettes permet l'&#233;dition des liens.&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS{auteurs,article,23}&lt;/code&gt; installera le formulaire pour associer/dissocier des auteurs de l'article N&#176;23.&lt;/p&gt; &lt;p&gt;Les liens sont port&#233;s par la table lien du premier objet pass&#233; en argument du formulaire (auteurs dans l'exemple ci-dessus).&lt;/p&gt; &lt;p&gt;On peut utiliser ce formulaire de plusieurs fa&#231;ons :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS{auteurs,article,23}&lt;/code&gt; pour associer des auteurs &#224; l'article N&#176;23, sur la table pivot spip_auteurs_liens&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS{auteur,12,articles}&lt;/code&gt; pour associer des articles &#224; l'auteur N&#176;12, sur la table pivot spip_auteurs_liens&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS{mot,15,auteurs}&lt;/code&gt; pour associer des auteurs au mot N&#176;15, sur la table pivot spip_mots_liens&lt;/li&gt;&lt;li&gt; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#FORMULAIRE_EDITER_LIENS{auteurs,mot,15}&lt;/code&gt; pour associer des auteurs au mot N&#176;15, sur la table pivot spip_auteurs_liens&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;On peut donc, par la syntaxe d'appel, d&#233;finir quels objets sont associ&#233; entre eux, ainsi que la table qui supporte les liens.&lt;/p&gt; &lt;p&gt;Pour fonctionner, ce formulaire n&#233;cessite 2 squelettes correspondant au type d'objet associ&#233;. Par exemple pour pouvoir associer ou dissocier des auteurs de n'importe quel autre objet, les squelettes &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;prive/objets/liste/auteurs_lies.html&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;prive/objets/liste/auteurs_associer.html&lt;/code&gt; sont n&#233;cessaires au fonctionnement du formulaire. Ils pr&#233;sentent la liste des objets d&#233;j&#224; associ&#233;s ainsi que la s&#233;lection des objets &#224; associer.&lt;br class=&#039;autobr&#039; /&gt;
SPIP inclue nativement les vues n&#233;cessaires pour les auteurs, les rubriques, ainsi que les mots via le plugin mots.&lt;br class=&#039;autobr&#039; /&gt;
Des plugins peuvent rendre cette interface disponible pour de nouveaux objets &#233;ditoriaux par la d&#233;finition de ces deux squelettes.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>


<item xml:lang="fr">
		<title>API de d&#233;claration d'objets &#233;ditoriaux</title>
		<link>http://www.spip.net/fr_article5525.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5525.html</guid>
		<dc:date>2012-05-19T09:30:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cerdic, _Eric_</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Dans SPIP 3.0 la cr&#233;ation de nouveaux objets &#233;ditoriaux est simplifi&#233;e par une interface de programmation (ou API) d&#233;clarative [1] qui permet &#224; SPIP de construire de fa&#231;on automatis&#233;e une grande partie de l'interface d'&#233;dition de ces objets.&lt;br class=&#039;autobr&#039; /&gt;
La d&#233;claration d'un nouvel objet &#233;ditorial se fait via le pipeline declarer_tables_objets_sql qui permet de peupler un tableau associatif : Les cl&#233;s du tableau sont les noms des tables SQL (exemple spip_articles) &#224; chaque cl&#233; sont associ&#233;es un certain nombre de (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique257.html" rel="directory"&gt;Guide des fonctions avanc&#233;es&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Dans &lt;a href=&quot;http://www.spip.net/fr_article5427.html&quot; class=&#039;spip_in&#039;&gt;&lt;span style=&quot;color:#00CAD8&quot;&gt;SPIP 3.0&lt;/span&gt;&lt;/a&gt; la cr&#233;ation de nouveaux objets &#233;ditoriaux est simplifi&#233;e par une &lt;a href=&quot;http://fr.wikipedia.org/wiki/Interface_de_programmation&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;interface de programmation&lt;/a&gt; (ou API) d&#233;clarative&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb2-1&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;qui regroupe notamment en une seule, plusieurs d&#233;clarations existantes (...)&#039; id=&#039;nh2-1&#039;&gt;1&lt;/a&gt;]&lt;/span&gt; qui permet &#224; SPIP de construire de fa&#231;on automatis&#233;e une grande partie de l'interface d'&#233;dition de ces objets.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;La d&#233;claration d'un nouvel objet &#233;ditorial se fait via le pipeline &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;declarer_tables_objets_sql&lt;/code&gt; qui permet de peupler un tableau associatif :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Les cl&#233;s du tableau sont les noms des tables SQL (exemple &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_articles&lt;/code&gt;)&lt;/li&gt;&lt;li&gt; &#224; chaque cl&#233; sont associ&#233;es un certain nombre de valeurs dans un tableau, selon la nomenclature ci-dessous, pr&#233;sent&#233;e par type d'information&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Base de donn&#233;e&lt;/h3&gt;
&lt;style&gt;
table.spip {width:100%;} table.spip th {width:115px;} dl.spip dt {line-height:2em;}
dl.spip dd {margin-left:50px;margin-bottom:1em;}
&lt;/style&gt;
&lt;dl class=&#039;spip&#039;&gt;
&lt;dt&gt;&lt;strong&gt;table_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idb671_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idb671_l0&#039;&gt;nom raccourci de la table&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idb671_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idb671_l1&#039;&gt;&lt;i&gt;articles&lt;/i&gt; pour &lt;i&gt;spip_articles&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idb671_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idb671_l2&#039;&gt;nom de la table sans spip_&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idb671_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idb671_l3&#039;&gt;&lt;i&gt;non d&#233;clar&#233;&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;table_objet_surnom&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide94b_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ide94b_l0&#039;&gt;synonymes de &lt;i&gt;table_objet&lt;/i&gt; pour les cas particuliers&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide94b_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ide94b_l1&#039;&gt;pas de surnom pour articles (mais exemple : groupe_mots pour spip_groupes_mots)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide94b_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ide94b_l2&#039;&gt;pas de surnom&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide94b_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ide94b_l3&#039;&gt;via declarer_tables_objets_surnoms&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id3e64_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id3e64_l0&#039;&gt;nom court de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id3e64_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id3e64_l1&#039;&gt;&lt;i&gt;article&lt;/i&gt; pour la table &lt;i&gt;spip_articles&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id3e64_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id3e64_l2&#039;&gt;cl&#233; primaire sans &lt;i&gt;id_&lt;/i&gt; au d&#233;but ni &lt;i&gt;s&lt;/i&gt; a la fin, ou &#224; d&#233;faut nom de la table sans &lt;i&gt;spip_&lt;/i&gt; au d&#233;but ni &lt;i&gt;s&lt;/i&gt; a la fin&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id3e64_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id3e64_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;type_surnoms&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id0c34_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id0c34_l0&#039;&gt;synonyme du &lt;i&gt;type&lt;/i&gt; pour les cas particuliers&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id0c34_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id0c34_l1&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id0c34_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id0c34_l2&#039;&gt;pas de surnom&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id0c34_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id0c34_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;field&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id47b7_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id47b7_l0&#039;&gt;D&#233;claration SQL des champs de la table&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id47b7_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id47b7_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt; &quot;id_article&quot;	=&gt; &quot;bigint(21) NOT NULL&quot;,&lt;br class=&#039;autobr&#039; /&gt; &quot;surtitre&quot;	=&gt; &quot;text DEFAULT '' NOT NULL&quot;,&lt;br class=&#039;autobr&#039; /&gt; &quot;titre&quot;	=&gt; &quot;text DEFAULT '' NOT NULL&quot;,&lt;br class=&#039;autobr&#039; /&gt; &quot;soustitre&quot;	=&gt; &quot;text DEFAULT '' NOT NULL&quot;,...)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id47b7_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id47b7_l2&#039;&gt;h&#233;rit&#233;e de la d&#233;claration $tables_principales ou $tables_auxiliaires si existante (compatibilit&#233;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id47b7_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id47b7_l3&#039;&gt;Remplace la d&#233;claration incluse dans le pipeline declarer_tables_principales, avec la m&#234;me syntaxe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;key&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idaae8_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idaae8_l0&#039;&gt;D&#233;claration SQL des cl&#233;s de la table&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idaae8_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idaae8_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt; &quot;PRIMARY KEY&quot; =&gt;&quot;id_article&quot;,&lt;br class=&#039;autobr&#039; /&gt; &quot;KEY id_rubrique&quot;	=&gt; &quot;id_rubrique&quot;,...)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idaae8_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idaae8_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_principales ou $tables_auxiliaires si existante (compatibilit&#233;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idaae8_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idaae8_l3&#039;&gt;Remplace la d&#233;claration incluse dans le pipeline declarer_tables_principales, avec la m&#234;me syntaxe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;join&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide1be_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ide1be_l0&#039;&gt;les champs d&#233;clar&#233;s explicitement pour les jointures. sinon les jointures se feront exclusivement sur la clef primaire. attention : les champs 'idx', 'maj', 'date' et 'statut' ne peuvent PAS &#234;tre d&#233;clar&#233;s comme champs de jointure possible.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide1be_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ide1be_l1&#039;&gt;array( &lt;br class=&#039;autobr&#039; /&gt;
&quot;id_article&quot;=&gt;&quot;id_article&quot;,&lt;br class=&#039;autobr&#039; /&gt;
&quot;id_rubrique&quot;=&gt;&quot;id_rubrique&quot;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide1be_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ide1be_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_principales ou $tables_auxiliaires si existante (compatibilit&#233;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide1be_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ide1be_l3&#039;&gt;Remplace la d&#233;claration incluse dans le pipeline declarer_tables_principales, avec la m&#234;me syntaxe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;tables_jointures&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id617f_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id617f_l0&#039;&gt;d&#233;claration de la table de liens et de son champ de jointure. on joindra ainsi (par exemple) id_article, articles &#224; id_auteur, auteurs en passant par la table auteurs_liens et ses lignes id_auteur, id_objet, objet (donc, ici : id_auteur, id_article, articles)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id617f_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id617f_l1&#039;&gt;array('id_auteur' =&gt; 'auteurs_liens')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id617f_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id617f_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_jointures si existante (compatibilit&#233;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id617f_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id617f_l3&#039;&gt;$declarer_tables_objets_sql['spip_articles']['tables_jointures'] reprend l'ancien contenu de &lt;br class=&#039;autobr&#039; /&gt;
$tables_jointures['spip_articles']&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;principale&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idd289_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idd289_l0&#039;&gt;Indique si la table est table principale ou auxiliaire ; prend les valeurs 'oui' ou 'non'&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idd289_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idd289_l1&#039;&gt;'oui'&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idd289_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idd289_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_principales si existante (compatibilit&#233;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idd289_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idd289_l3&#039;&gt;Remplace l'affectation des tableaux dans le pipeline declarer_tables_principales ou declarer_tables_auxiliaires&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;modeles&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id133d_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id133d_l0&#039;&gt;permet de d&#233;clarer les mod&#232;les associ&#233;s a cet objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id133d_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id133d_l1&#039;&gt;exemple pour spip_documents : array('document', 'doc', 'img', 'emb', 'image', 'video', 'text', 'audio', 'application')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id133d_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id133d_l2&#039;&gt;la valeur de &lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id133d_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id133d_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;h3 class=&quot;spip&quot;&gt;Le titre, la date et la gestion du statut&lt;/h3&gt;&lt;dl class=&#039;spip&#039;&gt;
&lt;dt&gt;&lt;strong&gt;titre&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idc1f3_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idc1f3_l0&#039;&gt;Repr&#233;sentation SQL qui permet de r&#233;cup&#233;rer le titre et la langue de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idc1f3_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idc1f3_l1&#039;&gt;&quot;titre, lang&quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idc1f3_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idc1f3_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_titre (compatibilit&#233;) ou vide sinon&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idc1f3_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idc1f3_l3&#039;&gt;Remplace la d&#233;claration du titre de l'objet dans le pipeline declarer_tables_interfaces :&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$interface[&#039;table_titre&#039;][&#039;articles&#039;] = &quot;titre, &#039;&#039; AS lang&quot;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;date&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id8a05_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id8a05_l0&#039;&gt;d&#233;clare le champ date de l'objet utilis&#233; pour le dater&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id8a05_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id8a05_l1&#039;&gt;date&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id8a05_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id8a05_l2&#039;&gt;h&#233;rit&#233; de la d&#233;claration $tables_date ou vide&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id8a05_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id8a05_l3&#039;&gt;Remplace la d&#233;claration de la date de l'objet dans declarer_tables_interfaces :&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$interface[&#039;table_date&#039;][&#039;articles&#039;] = &quot;date&quot;;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;statut&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id83e6_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id83e6_l0&#039;&gt;D&#233;claration du statut pour l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id83e6_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id83e6_l1&#039;&gt;array(array(&lt;br class=&#039;autobr&#039; /&gt; 'champ' =&gt; 'statut',&lt;br class=&#039;autobr&#039; /&gt; 'publie' =&gt; 'publie',&lt;br class=&#039;autobr&#039; /&gt; 'previsu' =&gt; 'publie,prop,prepa',&lt;br class=&#039;autobr&#039; /&gt; 'post_date' =&gt; 'date',&lt;br class=&#039;autobr&#039; /&gt; 'exception' =&gt; 'statut'))&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id83e6_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id83e6_l2&#039;&gt;vide&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id83e6_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id83e6_l3&#039;&gt;Remplace la surcharge des boucles avec conditions where pour gerer le statut. Ici la d&#233;claration est directement prise en compte dans les boucles g&#233;n&#233;riques&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;statut_titres&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide35d_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ide35d_l0&#039;&gt;Chaines de langue du titre de chaque statut. D&#233;finit par la m&#234;me la liste des statuts autoris&#233;s&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide35d_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ide35d_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt; 'prepa'=&gt;'info_article_redaction',&lt;br class=&#039;autobr&#039; /&gt; 'prop'=&gt;'info_article_propose',&lt;br class=&#039;autobr&#039; /&gt; 'publie'=&gt;'info_article_publie',&lt;br class=&#039;autobr&#039; /&gt; 'refuse'=&gt;'info_article_refuse',&lt;br class=&#039;autobr&#039; /&gt; 'poubelle'=&gt;'info_article_supprime')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide35d_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ide35d_l2&#039;&gt;null&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide35d_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ide35d_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;statut_images&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idcf57_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idcf57_l0&#039;&gt;definit les puces associ&#233;es &#224; chaque statut&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idcf57_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idcf57_l1&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idcf57_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idcf57_l2&#039;&gt;null&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idcf57_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idcf57_l3&#039;&gt;Pas d'&#233;quivalence&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;statut_textes_instituer&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id4c0c_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id4c0c_l0&#039;&gt;Chaines de langue du libell&#233; de chaque statut dans le bloc instituer de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id4c0c_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id4c0c_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt; 'prepa' =&gt; 'texte_statut_en_cours_redaction',&lt;br class=&#039;autobr&#039; /&gt; 'prop' =&gt; 'texte_statut_propose_evaluation',&lt;br class=&#039;autobr&#039; /&gt; 'publie' =&gt; 'texte_statut_publie',&lt;br class=&#039;autobr&#039; /&gt; 'refuse' =&gt; 'texte_statut_refuse',&lt;br class=&#039;autobr&#039; /&gt; 'poubelle' =&gt; 'texte_statut_poubelle')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id4c0c_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id4c0c_l2&#039;&gt;null&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id4c0c_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id4c0c_l3&#039;&gt;Pas d'&#233;quivalence&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;h3 class=&quot;spip&quot;&gt;L'&#233;dition, l'affichage et la recherche&lt;/h3&gt;&lt;dl class=&#039;spip&#039;&gt;
&lt;dt&gt;&lt;strong&gt;page&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id06ac_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id06ac_l0&#039;&gt;Le nom de la page publique de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id06ac_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id06ac_l1&#039;&gt;article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id06ac_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id06ac_l2&#039;&gt;type si principale='oui', rien sinon&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id06ac_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id06ac_l3&#039;&gt;Remplace la d&#233;claration de l'url de l'objet dans le pipeline declarer_url_objets()&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;url_voir&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id776e_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id776e_l0&#039;&gt;nom de l'exec priv&#233; pour voir l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id776e_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id776e_l1&#039;&gt;article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id776e_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id776e_l2&#039;&gt;type&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id776e_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id776e_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;url_edit&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id18a8_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id18a8_l0&#039;&gt;nom de l'exec priv&#233; pour &#233;diter l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id18a8_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id18a8_l1&#039;&gt;article_edit&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id18a8_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id18a8_l2&#039;&gt;type+_edit&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id18a8_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id18a8_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;editable&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idbe21_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idbe21_l0&#039;&gt;donner acces &#224; une page d'&#233;dition dans l'espace priv&#233;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idbe21_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idbe21_l1&#039;&gt;'oui' ou false&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idbe21_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idbe21_l2&#039;&gt;oui&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idbe21_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idbe21_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;champs_editables&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id3dc6_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id3dc6_l0&#039;&gt;Liste des champs de l'objet pouvant &#234;tre modifi&#233;s dans le formulaire d'&#233;dition&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id3dc6_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id3dc6_l1&#039;&gt;array('surtitre', 'titre', 'soustitre', 'descriptif','nom_site', 'url_site', 'chapo', 'texte', 'ps','virtuel')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id3dc6_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id3dc6_l2&#039;&gt;vide&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id3dc6_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id3dc6_l3&#039;&gt;list&#233;s explicitement dans la fonction &lt;i&gt;articles_set&lt;/i&gt; de &lt;i&gt;action/editer_article&lt;/i&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href=&#039;#nb2-2&#039; class=&#039;spip_note&#039; rel=&#039;footnote&#039; title=&#039;ce qui obligeait &#224; dupliquer tout le code pour un nouvel objet, &#224; ce d&#233;tail (...)&#039; id=&#039;nh2-2&#039;&gt;2&lt;/a&gt;]&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;icone_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id2d31_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id2d31_l0&#039;&gt;nom du fichier d'ic&#244;ne fourni en 16/24/32px&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id2d31_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id2d31_l1&#039;&gt;article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id2d31_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id2d31_l2&#039;&gt;type&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id2d31_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id2d31_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;champs_versionnes&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id68aa_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id68aa_l0&#039;&gt;Liste des champs de l'objet soumis au processus de r&#233;visions&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id68aa_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id68aa_l1&#039;&gt;array('id_rubrique', 'surtitre', 'titre', 'soustitre', 'jointure_auteurs', 'descriptif', 'nom_site', 'url_site', 'chapo', 'texte', 'ps')&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id68aa_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id68aa_l2&#039;&gt;array()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id68aa_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id68aa_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;rechercher_champs&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide362_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ide362_l0&#039;&gt;D&#233;claration des champs utilis&#233;s dans la recherche et de leur score respectif&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide362_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ide362_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt; 'surtitre' =&gt; 5, 'titre' =&gt; 8, 'soustitre' =&gt; 5, 'chapo' =&gt; 3,...)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ide362_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ide362_l2&#039;&gt;array()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ide362_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ide362_l3&#039;&gt;Remplace la d&#233;claration incluse dans le pipeline rechercher_liste_des_champs : m&#234;me syntaxe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;rechercher_jointures&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id5571_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id5571_l0&#039;&gt;D&#233;claration des champs et de leurs scores respectifs utilis&#233;s via une jointure lors de la recherche.&lt;br class=&#039;autobr&#039; /&gt;
Pr&#233;ciser la table de ces champs en premier &#233;l&#233;ment de l'array.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id5571_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id5571_l1&#039;&gt;array(&lt;br class=&#039;autobr&#039; /&gt;
'auteur' =&gt; array('nom' =&gt; 10)&lt;br class=&#039;autobr&#039; /&gt;
)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id5571_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id5571_l2&#039;&gt;array()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id5571_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id5571_l3&#039;&gt;Remplace la d&#233;claration incluse dans le pipeline rechercher_liste_des_jointures : m&#234;me syntaxe&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;h3 class=&quot;spip&quot;&gt;Les chaines de langue&lt;/h3&gt;
&lt;p&gt;On d&#233;clare dans ces items l&#224; sous forme de chaine de langue les textes standards utilis&#233;s dans l'espace priv&#233;, dans les pages g&#233;n&#233;r&#233;es automatiquement par SPIP.&lt;/p&gt;
&lt;dl class=&#039;spip&#039;&gt;
&lt;dt&gt;&lt;strong&gt;texte_ajouter&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ida16d_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ida16d_l0&#039;&gt;Chaine &quot;Ajouter un ...&quot;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ida16d_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ida16d_l1&#039;&gt;titre_ajouter_un_auteur&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ida16d_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ida16d_l2&#039;&gt;texte_ajouter_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ida16d_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ida16d_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_retour&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id75e1_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id75e1_l0&#039;&gt;Chaine de langue du bouton retour dans la page d'&#233;dition de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id75e1_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id75e1_l1&#039;&gt;icone_retour_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id75e1_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id75e1_l2&#039;&gt;icone_retour&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id75e1_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id75e1_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_modifier&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ida9d7_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;ida9d7_l0&#039;&gt;Chaine de langue du bouton modifier permettant d'ouvrir le formulaire d'&#233;dition de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ida9d7_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;ida9d7_l1&#039;&gt;icone_modifier_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;ida9d7_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;ida9d7_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:icone_modifier_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;ida9d7_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;ida9d7_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_creer&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id98ee_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id98ee_l0&#039;&gt;Chaine de langue du bouton de cr&#233;ation d'un nouvel objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id98ee_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id98ee_l1&#039;&gt;icone_ecrire_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id98ee_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id98ee_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:icone_creer_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id98ee_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id98ee_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_creer_associer&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id8eb2_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id8eb2_l0&#039;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id8eb2_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id8eb2_l1&#039;&gt;creer_et_associer_un_auteur&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id8eb2_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id8eb2_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:texte_creer_associer_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id8eb2_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id8eb2_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_signale_edition&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idd0cd_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idd0cd_l0&#039;&gt;Chaine de langue signalant que l'auteur x a travaill&#233; r&#233;cemment sur l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idd0cd_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idd0cd_l1&#039;&gt;texte_travail_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idd0cd_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idd0cd_l2&#039;&gt;info_qui_edite&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idd0cd_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idd0cd_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id6079_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id6079_l0&#039;&gt;Chaine de langue du singulier de l'objet. La valeur est cens&#233;e &#234;tre &#233;crite avec une lettre capitale&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id6079_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id6079_l1&#039;&gt;public:article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id6079_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id6079_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:titre_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id6079_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id6079_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_objets&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id9908_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id9908_l0&#039;&gt;Chaine de langue du pluriel de l'objet La valeur est cens&#233;e &#234;tre &#233;crite avec une lettre capitale&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id9908_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id9908_l1&#039;&gt;public:articles&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id9908_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id9908_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:titre_&lt;i&gt;table_objet&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id9908_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id9908_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;info_aucun_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idfb85_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;idfb85_l0&#039;&gt;Chaine de langue d&#233;signant 0 article utilis&#233;e dans la fonction objet_afficher_nb()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idfb85_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;idfb85_l1&#039;&gt;info_aucun_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;idfb85_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;idfb85_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:info_aucun_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;idfb85_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;idfb85_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;info_1_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id5ddb_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id5ddb_l0&#039;&gt;Chaine de langue d&#233;signant 1 article utilis&#233;e dans la fonction objet_afficher_nb()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id5ddb_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id5ddb_l1&#039;&gt;info_1_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id5ddb_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id5ddb_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:info_1_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id5ddb_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id5ddb_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;info_nb_objets&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id76e8_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id76e8_l0&#039;&gt;Chaine de langue d&#233;signant nb article utilis&#233;e dans la fonction objet_afficher_nb()&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id76e8_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id76e8_l1&#039;&gt;info_nb_articles&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id76e8_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id76e8_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:info_nb_&lt;i&gt;table_objets&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id76e8_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id76e8_l3&#039;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;texte_logo_objet&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;table class=&quot;spip&quot;&gt;
&lt;tbody&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id6e94_l0&#039;&gt;Explication&lt;/th&gt;
&lt;td headers=&#039;id6e94_l0&#039;&gt;Chaine de langue du titre de la boite d'affichage du logo dans la page priv&#233;e de l'objet&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id6e94_l1&#039;&gt;Exemple&lt;/th&gt;
&lt;td headers=&#039;id6e94_l1&#039;&gt;logo_article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_odd odd&#039;&gt;
&lt;th id=&#039;id6e94_l2&#039;&gt;Valeur par d&#233;faut&lt;/th&gt;
&lt;td headers=&#039;id6e94_l2&#039;&gt;&lt;i&gt;type&lt;/i&gt;:titre_logo_&lt;i&gt;type&lt;/i&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&#039;row_even even&#039;&gt;
&lt;th id=&#039;id6e94_l3&#039;&gt;dans SPIP 2.1&lt;/th&gt;
&lt;td headers=&#039;id6e94_l3&#039;&gt;Remplace l'utilisation de la globale &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;$GLOBALS[&#039;logo_libelles&#039;][&#039;id_objet&#039;]&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;h3 class=&quot;spip&quot;&gt;Exemple des br&#232;ves&lt;/h3&gt;
&lt;p&gt;Voici la d&#233;claration telle que r&#233;alis&#233;e par le plugin qui ajoute les br&#232;ves comme objet &#233;ditorial dans SPIP :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; breves_declarer_tables_objets_sql&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$tables&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tables&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;spip_breves&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_retour&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;icone_retour&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_objets&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:breves&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_objet&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_modifier&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:icone_modifier_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_creer&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:icone_nouvelle_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;info_aucun_objet&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:info_aucun_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;info_1_objet&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:info_1_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;info_nb_objets&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:info_nb_breves&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_logo_objet&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:logo_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_langue_objet&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:titre_langue_breve&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre, lang&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;date&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;date_heure&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;principale&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;oui&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;field&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_breve&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;bigint(21) NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;date_heure&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;datetime DEFAULT &#039;0000-00-00 00:00:00&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;titre&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;text DEFAULT &#039;&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;texte&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;longtext DEFAULT &#039;&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;lien_titre&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;text DEFAULT &#039;&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;lien_url&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;text DEFAULT &#039;&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;statut&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;varchar(6) DEFAULT &#039;0&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_rubrique&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;bigint(21) DEFAULT &#039;0&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;lang&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;VARCHAR(10) DEFAULT &#039;&#039; NOT NULL&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;langue_choisie&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;VARCHAR(3) DEFAULT &#039;non&#039;&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;maj&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;TIMESTAMP&quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;key&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;PRIMARY KEY&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_breve&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;KEY id_rubrique&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_rubrique&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;join&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_breve&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_breve&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_rubrique&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;id_rubrique&quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;champ&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publie&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publie&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;previsu&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publie,prop&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;exception&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut&#039;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte_changer_statut&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:entree_breve_publiee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;aide_changer_statut&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;brevesstatut&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut_titres&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;prop&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:titre_breve_proposee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publie&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:titre_breve_publiee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;refuse&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:titre_breve_refusee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;statut_textes_instituer&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;prop&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:item_breve_proposee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//_T(&#039;texte_statut_propose_evaluation&#039;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;publie&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:item_breve_validee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//_T(&#039;texte_statut_publie&#039;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;refuse&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;breves:item_breve_refusee&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//_T(&#039;texte_statut_refuse&#039;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;rechercher_champs&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;lien_titre&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;lien_url&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;rechercher_jointures&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;document&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;descriptif&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;champs_versionnes&#039;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;id_rubrique&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;titre&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;lien_titre&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;lien_url&#039;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&#039;texte&#039;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tables&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/10631e7d3d41be242656919869f0db41.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#039;nb2-1&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh2-1&#039; class=&#039;spip_note&#039; title=&#039;Notes 2-1&#039; rev=&#039;footnote&#039;&gt;1&lt;/a&gt;] &lt;/span&gt;qui regroupe notamment en une seule, plusieurs d&#233;clarations existantes auparavant&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#039;nb2-2&#039;&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href=&#039;#nh2-2&#039; class=&#039;spip_note&#039; title=&#039;Notes 2-2&#039; rev=&#039;footnote&#039;&gt;2&lt;/a&gt;] &lt;/span&gt;ce qui obligeait &#224; dupliquer tout le code pour un nouvel objet, &#224; ce d&#233;tail pr&#232;s. Cette d&#233;claration permet le support g&#233;n&#233;rique des objets dans action/editer_objet et ses fonctions objet_modifier/objet_inserer/objet_instituer&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Installation de SPIP3</title>
		<link>http://www.spip.net/fr_article5521.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5521.html</guid>
		<dc:date>2012-05-19T09:30:14Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>tofulm</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>&lt;p&gt;Tutoriel sur l'installation de SPIP 3&lt;/p&gt;

-
&lt;a href="http://www.spip.net/fr_rubrique151.html" rel="directory"&gt;Installation&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;i&gt;Ce tutoriel commence &#224; partir du moment ou vous avez &lt;a href=&quot;http://www.spip.net/fr_download&quot; class=&#039;spip_out&#039;&gt;t&#233;l&#233;charg&#233;&lt;/a&gt; le dossier compress&#233; de spip3 et que vous avez d&#233;compress&#233; le contenu &#224; la racine de votre serveur (le plus souvent un r&#233;pertoire nomm&#233; www ou htdocs).&lt;br class=&#039;autobr&#039; /&gt;
Dans ce tutoriel, j'ai renomm&#233; le r&#233;pertoire spip ainsi obtenu en spip3_test&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;a name=&quot;config_apache&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;1. Pr&#233;paratifs - Configuration du serveur Apache&lt;/h3&gt;
&lt;p&gt;Sur Linux, il est bon de modifier la configuration de base d'Apache. (En local, ce n'est pas indispensable, mais sur un serveur d&#233;di&#233; cela permettra d'utiliser .htaccess)&lt;br class=&#039;autobr&#039; /&gt;
Voici la proc&#233;dure (sous debian ou ubuntu) :&lt;br class=&#039;autobr&#039; /&gt;
1. Activation de la R&#233;-&#233;criture d'URL : module rewrite&lt;br class=&#039;manualbr&#039; /&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sudo a2enmod rewrite&lt;/code&gt;&lt;br class=&#039;manualbr&#039; /&gt;2. Modification de la directive AllowOverride dans le Vhost&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; editer le fichier default avec un &#233;diteur de texte (gedit, vim, ...) &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sudo gedit /etc/apache2/sites-available/default&lt;/code&gt;&lt;/li&gt;&lt;li&gt; modifier toutes les directives &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;AllowOverride None&lt;/code&gt; par &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;AllowOverride All&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;3. Relancer Apache&lt;br class=&#039;autobr&#039; /&gt;
&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;sudo service apache2 restart&lt;/code&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;2. Pr&#233;paratifs - Les droits d'acc&#232;s&lt;/h3&gt;
&lt;p&gt;&lt;span class=&#039;spip_document_2570 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH291/31-install_droits-acces-0659a.png&#039; width=&#039;500&#039; height=&#039;291&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;br class=&#039;autobr&#039; /&gt;
En local, si vous &#234;tes sur linux, vous allez devoir modifier les droits de 4 r&#233;pertoires :&lt;/p&gt; &lt;p&gt;Pour cela deux possibilit&#233;s :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; avec votre gestionnaire de fichier, cliquez sur le r&#233;pertoire en question et modifiez les droits.&lt;/li&gt;&lt;li&gt; En ligne de commande, placez vous dans votre r&#233;pertoires et tapez (il faut &#234;tre en root) : &lt;br class=&#039;manualbr&#039; /&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;chmod -R 777 local/ tmp/ config/ IMG/&lt;/code&gt;&lt;br class=&#039;manualbr&#039; /&gt;(En fait les droits 777 ne sont pas obligatoires. Il faut seulement que le serveur (Apache ou autre) puisse y ecrire. Cela d&#233;pend donc du groupe et de l'utilisateur du fichier. Si c'est le serveur qui est le propri&#233;taire de ces r&#233;pertoires, 755 devrait suffire. G&#233;n&#233;ralement apache correspond &#224; www-data)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Chez un h&#233;bergeur, utilisez votre client FTP (par ex. Filezilla) pour modifier les droits (clic bouton droit de la souris)&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;3. C'est parti ! &lt;/h3&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Ouvrir son navigateur web (ex. Firefox)&lt;/li&gt;&lt;li&gt; Entrer l'URL de votre r&#233;pertoire racine de votre serveur. Si vous travaillez en local, tapez : &lt;strong&gt;localhost&lt;/strong&gt;, autrement lisez la doc de votre h&#233;bergeur.
&lt;dl class=&#039;spip_document_2565 spip_documents spip_documents_center&#039;&gt;
&lt;dt&gt;&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L430xH206/11-install_localhost-e30e0.png&#039; width=&#039;430&#039; height=&#039;206&#039; alt=&#039;PNG - 21.1&#160;ko&#039; style=&#039;&#039; /&gt;&lt;/dt&gt;
&lt;dt class=&#039;crayon document-titre-2565 spip_doc_titre&#039; style=&#039;width:350px;&#039;&gt;&lt;strong&gt;11-install_localhost&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Il ne vous reste plus qu'a cliquer sur votre dossier, ici spip3_test/&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;4. A la d&#233;couverte de SPIP&lt;/h3&gt;
&lt;p&gt;Vous allez voir comme c'est tr&#232;s simple. A cette &#233;tape de l'installation il vous suffit de rajouter &#224; l'url : &lt;strong&gt;ecrire&lt;/strong&gt;. Vous devez obtenir : &lt;strong&gt;localhost/spip3_test/ecrire&lt;/strong&gt; (n'oubliez pas de valider)&lt;br class=&#039;autobr&#039; /&gt;
&lt;span class=&#039;spip_document_2571 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L497xH164/21-install_en-travaux-05a91.png&#039; width=&#039;497&#039; height=&#039;164&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;5. Installation &#8211; &#233;tape 1 : choix de la base de donn&#233;es.&lt;/h3&gt;
&lt;p&gt;Par d&#233;faut SPIP3 utilise sqlite3 comme base de donn&#233;es. Dans la tr&#232;s grande majorit&#233; des cas il est inutile de modifier ce choix. Si sqlite3 n'appara&#238;t pas, cela veut dire qu'elle n'est pas activ&#233;e. &lt;a href=&quot;#installation_sqlite&quot; class=&#039;spip_ancre&#039;&gt;Voici comment faire pour l'activer&lt;/a&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;span class=&#039;spip_document_2569 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH360/41-install-connexion-sqlite-fe6cd.png&#039; width=&#039;500&#039; height=&#039;360&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Petite explication de ce choix.&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; MySQL est un serveur de BDD, c'est &#224; dire qu'il n&#233;cessite une installation. Au contraire, Sqlite est un simple fichier que vous trouverez dans /config/bases. Si vous &#234;tes limit&#233;s en nombre de BDD, c'est parfait. Il faut simplement l'activer (si ce n'est d&#233;j&#224; fait)&lt;/li&gt;&lt;li&gt; Pour l'installation, Sqlite ne n&#233;cessite pas de code d'acc&#232;s &#224; la BDD. L'installation en est grandement simplifi&#233;e !&lt;/li&gt;&lt;li&gt; Pour administrer la BDD, une simple &lt;a href=&quot;https://addons.mozilla.org/fr/firefox/addon/sqlite-manager/&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;extension&lt;/a&gt; dans Firefox et le tour est jou&#233;. Il vous suffira de connecter une nouvelle base de donn&#233;es en choisissant le fichier dans le r&#233;pertoire bases/. Gros avantage, la portabilit&#233;, tout est dans le dossier racine (ici spip3_test)&lt;/li&gt;&lt;li&gt; L'acc&#232;s en lecture est au moins aussi rapide que pour les autres BDD. C'est ce que l'on demande &#224; une BDD pour un site internet, charger rapidement une page.&lt;/li&gt;&lt;li&gt; Pour les fonctionnalit&#233;s, on en a rien a faire, c'est SPIP qui se charge de tout (merci aux d&#233;veloppeurs), et pour l'utilisateur ou le webmestre c'est compl&#232;tement transparent.&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt; &lt;i&gt;Ne vous posez plus de questions, laissez le choix par defaut !&lt;/i&gt; &lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;6. Installation &#8211; &#233;tape 2 : param&#233;trage de la BDD&lt;/h3&gt;
&lt;p&gt;&lt;span class=&#039;spip_document_2568 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH603/51-install-connexion-nom-sqlite-99d98.png&#039; width=&#039;500&#039; height=&#039;603&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Vous pouvez, si vous le souhaitez changer le nom de la base de donn&#233;es. C'est le nom du fichier que vous retrouverez dans /config/bases/&lt;/li&gt;&lt;li&gt; Pour le pr&#233;fixe des tables, laiss&#233; l'option par d&#233;faut : spip&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;C'est tout, votre base de donn&#233;es est configur&#233;e, cliquez sur suivant.&lt;br class=&#039;autobr&#039; /&gt; Si toute fois, vous voulez installer SPIP sur une base mysql, &lt;a href=&quot;#param&#233;trage_mysql&quot; class=&#039;spip_ancre&#039;&gt;voici la d&#233;marche.&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;7. Installation &#8211; &#233;tape 3 : Informations personnelles&lt;/h3&gt;
&lt;p&gt;Attention, le login sera celui du super administrateur, celui qui peut tout faire y compris tout casser et bloquer le site. Ne le perdez pas.&lt;br class=&#039;autobr&#039; /&gt;
Bien entendu, vous pourrez le modifier par la suite.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;8. j'ai peur.&lt;/h3&gt;
&lt;p&gt;&lt;span class=&#039;spip_document_2566 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH230/71-install-htaccess-ca2a4.png&#039; width=&#039;500&#039; height=&#039;230&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;br class=&#039;autobr&#039; /&gt;
Cela vient du fait que vous n'avez pas r&#233;alis&#233; la &lt;a href=&quot;#config_apache&quot; class=&#039;spip_ancre&#039;&gt;Configuration du serveur apache&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;9. Installation &#8211; &#233;tape 4 : C'est termin&#233;.&lt;/h3&gt;
&lt;p&gt;Bravo ! Votre site SPIP est op&#233;rationnel mais vide.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;ANNEXES&lt;/h3&gt;
&lt;p&gt;&lt;a name=&quot;installation_sqlite&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Installation de sqlite&lt;/h3&gt;
&lt;p&gt;&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt; sur linux&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;apt-get install sqlite3&lt;br class=&#039;manualbr&#039; /&gt;apt-get install php5-sqlite&lt;br class=&#039;manualbr&#039; /&gt;Il ne vous reste plus qu'&#224; relancer apache &lt;br class=&#039;manualbr&#039; /&gt;service apache2 restart &lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt;Pour tous les autres systemes : Wampserver et EasyPhp pour windows, Mamp pour Mac, Xampp pour Linux&lt;/strong&gt;&lt;br class=&#039;manualbr&#039; /&gt;Normalement cela devrait fonctionner par d&#233;faut.&lt;/p&gt; &lt;p&gt;&lt;a name=&quot;param&#233;trage_mysql&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Parametrage de mysql&lt;/h3&gt;
&lt;p&gt;&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt;Etape1 - identification&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;span class=&#039;spip_document_2572 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH586/42-install-connexion-mysql-f86f9.png&#039; width=&#039;500&#039; height=&#039;586&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;br class=&#039;autobr&#039; /&gt;
Pour cela, ce n'est pas tr&#232;s compliqu&#233; non plus mais il faudra connaitre quelques informations suppl&#233;mentaires :&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt;Adresse de la base de donn&#233;es&lt;/strong&gt; : en local c'est localhost. Chez un h&#233;bergeur, c'est tr&#232;s souvent localhost.&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt;Le login de connexion&lt;/strong&gt; : en local, par d&#233;faut c'est root sinon vous devez le savoir. Chez un h&#233;bergeur, il a d&#251; vous le donner.&lt;br class=&#039;manualbr&#039; /&gt;&lt;strong&gt;Le mot de passe de connexion&lt;/strong&gt; : en local, par d&#233;faut il n'y en a pas, sinon vous devez le savoir. Chez un h&#233;bergeur, il a d&#251; vous le donner.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Etape2 - creation de la base&lt;/strong&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;span class=&#039;spip_document_2573 spip_documents spip_documents_center&#039;&gt;
&lt;img src=&#039;http://www.spip.net/local/cache-vignettes/L500xH615/52-install-connexion-nom-mysql-129df.png&#039; width=&#039;500&#039; height=&#039;615&#039; alt=&quot;&quot; style=&#039;&#039; /&gt;&lt;/span&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;strong&gt;Choisissez votre base :&lt;/strong&gt; soit vous utilisez une base existante (vous n'avez qu'&#224; la cocher), soit vous cr&#233;ez une nouvelle base (ici j'ai choisi de l'appeler spip_test, mais vous pouvez mettre ce que vous voulez)&lt;br class=&#039;autobr&#039; /&gt;
&lt;strong&gt;Pr&#233;fixe de tables : &lt;/strong&gt; laissez spip&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Exemples de BOUCLE(DATA) </title>
		<link>http://www.spip.net/fr_article5443.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5443.html</guid>
		<dc:date>2012-05-19T09:30:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Quelques exemples de boucles (DATA) permises par les it&#233;rateurs de SPIP.&lt;br class=&#039;autobr&#039; /&gt;
Lister les plugins actifs&lt;br class=&#039;autobr&#039; /&gt;
Le format plugins ne n&#233;cessite pas de pr&#233;ciser les donn&#233;es.&lt;br class=&#039;autobr&#039; /&gt;
Boucle : #VALEUR&lt;br class=&#039;autobr&#039; /&gt;
R&#233;sultat : crayons memoization icalendar&lt;br class=&#039;autobr&#039; /&gt; Afficher les &#171; versions &#187; de la configuration : crit&#232;re cle==...&lt;br class=&#039;autobr&#039; /&gt;
Cette boucle it&#232;re sur la balise #CONFIG, comportant tous les &#233;l&#233;ments de configuration d'un site (tels qu'ils sont enregistr&#233;s dans la table spip_meta).&lt;br class=&#039;autobr&#039; /&gt;
Comme la balise #CONFIG est un tableau de donn&#233;es, on va (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique702.html" rel="directory"&gt;Les it&#233;rateurs&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Quelques exemples de boucles &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; permises par &lt;a href=&quot;http://www.spip.net/fr_article5444.html&quot; class=&#039;spip_in&#039;&gt;les it&#233;rateurs de SPIP&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Lister les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;plugins&lt;/code&gt; actifs&lt;/h3&gt;
&lt;p&gt;Le format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;plugins&lt;/code&gt; ne n&#233;cessite pas de pr&#233;ciser les donn&#233;es.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_pl(DATA){source plugins}&gt;&lt;br /&gt; #VALEUR&lt;br /&gt; &lt;/BOUCLE_pl&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt; crayons memoization icalendar &lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt; Afficher les &#171; versions &#187; de la configuration : crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{cle==...}&lt;/code&gt; &lt;/h3&gt;
&lt;p&gt;Cette boucle it&#232;re sur la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG&lt;/code&gt;, comportant tous les &#233;l&#233;ments de configuration d'un site (tels qu'ils sont enregistr&#233;s dans la table &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;spip_meta&lt;/code&gt;).&lt;/p&gt; &lt;p&gt;Comme la balise &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#CONFIG&lt;/code&gt; est un tableau de donn&#233;es, on va employer le format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;table&lt;/code&gt;. Un crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{cle==version}&lt;/code&gt; filtre le tableau en ne retenant que les configurations dont la cl&#233; contient le mot &#171; version &#187;.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_cfg(DATA){source table, #CONFIG*}{cle==version}&gt;&lt;br /&gt; &lt;dt&gt;#CLE&lt;/dt&gt;&lt;br /&gt; &lt;dd&gt;#VALEUR&lt;/dd&gt;&lt;br /&gt; &lt;/BOUCLE_cfg&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;dl&gt;&lt;dt&gt;version_installee&lt;/dt&gt;&lt;dd&gt; 16428 &lt;/dd&gt; &lt;dt&gt;revisions_base_version&lt;/dt&gt;&lt;dd&gt; 1.1 &lt;/dd&gt; &lt;dt&gt;Indexation_base_version&lt;/dt&gt;&lt;dd&gt; 0.4 &lt;/dd&gt; &lt;/dl&gt; ... &lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt; Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{liste ...}&lt;/code&gt; &lt;/h3&gt;
&lt;p&gt;Pour simplifier l'&#233;criture de tableaux de donn&#233;es, lorsqu'il s'agit d'une simple liste d'&#233;l&#233;ments qu'on veut indiquer manuellement, la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; accepte le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{liste ...}&lt;/code&gt;, qui permet de constituer un tableau de donn&#233;es en s&#233;parant celles-ci par des virgules.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_i(DATA){liste 3,4,5}{&quot;&lt;br /&gt;&quot;}&gt;&lt;br /&gt; &lt;BOUCLE_j(DATA){liste 6,7,8}{&quot; &quot;}&gt;&lt;br /&gt; [(#VALEUR|mult{#_i:VALEUR})]&lt;br /&gt; &lt;/BOUCLE_j&gt;&lt;br /&gt; &lt;/BOUCLE_i&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt; 18 21 24 &lt;br /&gt; 24 28 32 &lt;br /&gt; 30 35 40 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;A noter :&lt;/i&gt; on a utilis&#233; &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;#_i:VALEUR&lt;/code&gt; pour r&#233;f&#233;rencer dans la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;j&lt;/code&gt; la valeur calcul&#233;e par la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;i&lt;/code&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Un fichier CSV&lt;/h3&gt;
&lt;p&gt;Nous allons cette fois lire un fichier au format CSV se trouvant sur notre disque dur. Le fichier &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;adresses.csv&lt;/code&gt; contient un carnet d'adresses :&lt;/p&gt; &lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;3&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;Fil,Philippe,fil@rezo.net,http://rezo.net/ Marcimat,Matthieu,marcimat@rezo.net,http://marcimat.magraine.net/&lt;/textarea&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_csv(DATA){source csv, adresses.csv}&lt;br /&gt; {par /3}&lt;br /&gt; {&quot;&lt;br /&gt;&quot;}&gt;&lt;br /&gt; #VALEUR{0} : #VALEUR{3}&lt;br /&gt; &lt;/BOUCLE_csv&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt; Marcimat: http://marcimat.magraine.net/&lt;br /&gt; Fil: http://rezo.net/ &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&#192; noter :&lt;/strong&gt; le crit&#232;re de tri &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{par /3}&lt;/code&gt; permet de trier sur la colonne n&#176; 3, contenant les adresses web. Le &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;/&lt;/code&gt; initial est obligatoire dans le cas d'un tri sur une cl&#233; num&#233;rique ou commen&#231;ant par un chiffre.&lt;/p&gt; &lt;p&gt;Dans la d&#233;mo de CSV livr&#233;e avec le plugin it&#233;rateurs, on trouvera un exemple beaucoup plus complet permettant de g&#233;rer proprement les cl&#233;s du fichier CSV, et m&#234;me de trier ou de fusionner sur ces cl&#233;s.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt; Lister le contenu d'un r&#233;pertoire &lt;/h3&gt;
&lt;p&gt;La fonction &lt;a href=&quot;http://php.net/glob&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;glob()&lt;/code&gt;&lt;/a&gt; de PHP permet de lister les fichiers correspondant &#224; un masque ; elle a &#233;t&#233; transpos&#233;e pour la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_ls2(DATA){source glob, IMG/jpg/*.jpg}&gt;&lt;br /&gt; [(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR&lt;br /&gt; &lt;/BOUCLE_ls2&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;pre&gt;2008-02-01 23:27:23 / IMG/jpg/arton2135.jpg 2008-08-21 11:12:58 / IMG/jpg/DSC03420.jpg 2008-08-21 11:13:11 / IMG/jpg/DSC03421.jpg 2009-08-27 11:20:11 / IMG/jpg/hash-1.jpg 2009-08-27 11:20:04 / IMG/jpg/hash.jpg&lt;/pre&gt; &lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt; Lister les &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;plugin.xml&lt;/code&gt; du site&lt;/h3&gt;
&lt;p&gt;La fonction &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;preg_files&lt;/code&gt; de SPIP permet de lister des fichiers selon une expression r&#233;guli&#232;re et de mani&#232;re arborescente. Plus versatile, mais plus lente que glob.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_xml(DATA){source pregfiles, #EVAL{_DIR_RACINE}, plugin.xml$, 5}&gt;&lt;br /&gt; #VALEUR[ - (#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})]&lt;br /&gt; &lt;/BOUCLE_xml&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;&lt;pre&gt; ../plugins/a2a/plugin.xml - 2011-04-16 20:47:02 ../extensions/simplog/plugin.xml - 2010-09-05 16:08:39 ../extensions/vertebres/plugin.xml - 2011-03-19 16:49:51 ../extensions/z-core/plugin.xml - 2010-09-05 16:08:47 &lt;/pre&gt;&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Un webservice au format YAML&lt;/h3&gt;
&lt;p&gt;Le site &lt;a href=&quot;http://per.sonn.es/&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://per.sonn.es/&lt;/a&gt; propose une API permettant de lire chaque profil au format YAML. On va donc interroger le site sur l'un de ces profils, et parcourir le r&#233;sultat pour afficher la liste des amis de la personne concern&#233;e.&lt;/p&gt; &lt;p&gt;Commen&#231;ons par analyser mon profil (&#224; l'adresse &lt;a href=&quot;http://per.sonn.es/Fil.yaml&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://per.sonn.es/Fil.yaml&lt;/a&gt;) :&lt;/p&gt; &lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;14&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;name: Fil sex: F birthday: &#039;1966-08-17&#039; job: Calorifugeur friends: - &#039;Maude Gu&#233;rin&#039; - &#039;Zohra Robin&#039; - &#039;Pierre-Yves Philippe&#039; - &#039;Lauriane Bertin&#039; - &#039;Jeannine Pichon&#039; - &#039;Vanessa Michel&#039; - &#039;Wendy Allard&#039; ... city: &#039;Mouxy (Rhone-Alpes)&#039;&lt;/textarea&gt;
&lt;p&gt;Si l'on charge cette adresse avec le format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;yaml&lt;/code&gt;, on obtient un tableau de donn&#233;es un peu plus complexe que dans l'exemple pr&#233;c&#233;dent. En effet, certains items sont des cha&#238;nes de caract&#232;res, d'autres, comme la liste d'amis, des listes de cha&#238;nes.&lt;/p&gt; &lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(name =&gt; Fil, sex =&gt; F, friends =&gt; ( Maude Gu&#233;rin, Zohra Robin, ...), ... )&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Parcourons ces donn&#233;es :&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_yaml(DATA){source yaml, http://per.sonn.es/Fil.yaml}&gt;&lt;br /&gt; &lt;dt&gt;#CLE&lt;/dt&gt;&lt;br /&gt; &lt;dd&gt;[(#VALEUR|print)]&lt;/dd&gt;&lt;br /&gt; &lt;/BOUCLE_yaml&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;dl&gt;&lt;dt&gt;name&lt;/dt&gt; &lt;dd&gt;Fil &lt;/dd&gt; &lt;dt&gt;sex&lt;/dt&gt; &lt;dd&gt;F &lt;/dd&gt; &lt;dt&gt;birthday&lt;/dt&gt; &lt;dd&gt;1966-08-17 &lt;/dd&gt; &lt;dt&gt;job&lt;/dt&gt; &lt;dd&gt;Calorifugeur &lt;/dd&gt; &lt;dt&gt;friends&lt;/dt&gt; &lt;dd&gt;Maude Gu&#233;rin, Zohra Robin, Pierre-Yves Philippe, Lauriane Bertin, Jeannine Pichon, Vanessa Michel, Wendy Allard, Sylvie Michaud, Gwena&#235;l Voisin, Paule Mary, Maia Ribeiro, Josianne Fran&#231;ois, Lucas Fernandes&lt;/dd&gt; &lt;/dl&gt; ... &lt;/blockquote&gt;
&lt;p&gt;Maintenant, nous voulons boucler sur les amis de Fil. Pour cela il y a deux possibilit&#233;s. La premi&#232;re consiste &#224; r&#233;cup&#233;rer les donn&#233;es avec notre boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; au format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;yaml&lt;/code&gt;, puis &#224; stocker le tableau d'amis dans une variable que nous allons parcourir avec une autre boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt;, cette fois au format &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;table&lt;/code&gt; :&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_yaml2(DATA){source yaml, http://per.sonn.es/Fil.yaml}{cle=friends}&gt;&lt;br /&gt; &lt;BOUCLE_friends(DATA){source table, #VALEUR}{&quot; - &quot;}&gt;&lt;br /&gt; #VALEUR&lt;br /&gt; &lt;/BOUCLE_friends&gt;&lt;br /&gt; &lt;/BOUCLE_yaml2&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt; Maude Gu&#233;rin - Zohra Robin - Pierre-Yves Philippe - Lauriane Bertin - Jeannine Pichon - Vanessa Michel - Wendy Allard - Sylvie Michaud - Gwena&#235;l Voisin - Paule Mary - Maia Ribeiro &lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{datapath ...}&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;On voit bien dans l'exemple ci-dessus que, plus le tableau de donn&#233;es est complexe, plus les boucles qu'il va falloir imbriquer seront p&#233;nibles &#224; coder. C'est l&#224; qu'intervient le crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;{datapath ...}&lt;/code&gt;, qui permet d'indiquer &#224; la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; le chemin (au sens de Xpath) vers le tableau de donn&#233;es qui nous int&#233;resse.&lt;/p&gt; &lt;p&gt;Avec cette balise notre liste d'amis s'&#233;crit en une seule boucle (et on en profite pour ajouter une pagination) :&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_yaml3(DATA)&lt;br /&gt; {source yaml, http://per.sonn.es/Fil.yaml}&lt;br /&gt; {datapath friends}&lt;br /&gt; {&quot; - &quot;}{pagination 10}&lt;br /&gt; &gt;&lt;br /&gt; #VALEUR&lt;br /&gt; &lt;/BOUCLE_yaml3&gt;&lt;br /&gt; #PAGINATION&lt;br /&gt; &lt;/B_yaml3&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt; Maude Gu&#233;rin - Zohra Robin - Pierre-Yves Philippe - Lauriane Bertin - Jeannine Pichon - Vanessa Michel - Wendy Allard - Sylvie Michaud - Gwena&#235;l Voisin - Paule Mary &lt;br /&gt;&lt;span class=&quot;on&quot;&gt;0&lt;/span&gt; | 10 | 20 | 30 | 40 | ... &lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Un fichier XML&lt;/h3&gt;
&lt;p&gt;Le plugin &#171; citations al&#233;atoires &#187; sur SPIP-Zone contient un fichier de citations, au format XML (&lt;a href=&quot;http://zone.spip.org/trac/spip-zone/browser/_plugins_/citation_aleatoire/citations/citations_fr.xml&quot; class=&#039;spip_url spip_out auto&#039; rel=&#039;nofollow external&#039;&gt;http://zone.spip.org/trac/spip-zone/browser/_plugins_/citation_aleatoire/citations/citations_fr.xml&lt;/a&gt;). La boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;(DATA)&lt;/code&gt; permet de l'exploiter directement :&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;&lt;BOUCLE_cite(DATA)&lt;br /&gt; {source xml, #CHEMIN{citations/citations_fr.xml}}&lt;br /&gt; {par hasard} {0,1} {datapath citation}&lt;br /&gt; &gt;&lt;br /&gt; &lt;dt&gt;#VALEUR{texte/0}&lt;/dt&gt; &lt;dd&gt;[((#VALEUR{auteur/0}))]&lt;/dd&gt;&lt;br /&gt; &lt;/BOUCLE_cite&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;dl&gt;&lt;dt&gt;L&#039;id&#233;al quand on veut &#234;tre admir&#233;, c&#039;est d&#039;&#234;tre mort.&lt;/dt&gt; &lt;dd&gt;(Michel Audiard)&lt;/dd&gt;&lt;/dl&gt; &lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Un calendrier au format iCalendar/ics&lt;/h3&gt;
&lt;p&gt;Il est aussi possible d'it&#233;rer sur les &#233;v&#233;nements d'un calendrier publi&#233; au format iCalendar/ics. L'article consacr&#233; au &lt;a href=&quot;http://www.spip.net/fr_article5446.html&quot; class=&#039;spip_in&#039;&gt;plugin icalendar&lt;/a&gt; donne un exemple complet.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Un document Google (spreadsheet)&lt;/h3&gt;
&lt;p&gt;Dans Google Documents il est possible de &#171; Partager &gt; Publier un document &#187;. Une fois cela fait, on peut r&#233;cup&#233;rer l'adresse du document au format CSV, et l'afficher sous forme de table HTML.&lt;/p&gt; &lt;p&gt;Boucle :&lt;/p&gt;
&lt;div style=&#039;text-align: left;&#039; class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;&lt;code&gt;#SET{key,0AolUP3c6K9JodGwxRjJzb2hyTGZLU29qRVItRXk1VXc}&lt;br /&gt; &lt;B_csv&gt;&lt;br /&gt; &lt;table border=&quot;1&quot;&gt;&lt;br /&gt; &lt;BOUCLE_csv(DATA){source csv, https://spreadsheets.google.com/pub?key=#GET{key}&amp;hl=en&amp;dsds&amp;output=csv}&lt;br /&gt; &gt;&lt;br /&gt; &lt;tr&gt;&lt;br /&gt; &lt;td&gt;#VALEUR{0}&lt;/td&gt;&lt;br /&gt; &lt;td&gt;#VALEUR{1}&lt;/td&gt;&lt;br /&gt; &lt;td&gt;#VALEUR{2}&lt;/td&gt;&lt;br /&gt; &lt;/tr&gt;&lt;br /&gt; &lt;/BOUCLE_csv&gt;&lt;br /&gt; &lt;/table&gt;&lt;br /&gt; &lt;/B_csv&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt; &lt;table border=&quot;1&quot;&gt; &lt;tr&gt; &lt;th&gt;Pays&lt;/th&gt; &lt;th&gt;PIB&lt;/th&gt; &lt;th&gt;Population&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;R&#233;mitanie&lt;/td&gt; &lt;td&gt;12&lt;/td&gt; &lt;td&gt;1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Baldoghistan&lt;/td&gt; &lt;td&gt;23&lt;/td&gt; &lt;td&gt;2&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;R&#233;publiques Unies&lt;/td&gt; &lt;td&gt;43&lt;/td&gt; &lt;td&gt;3&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Diloduristan&lt;/td&gt; &lt;td&gt;12&lt;/td&gt; &lt;td&gt;4&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Zarlatie&lt;/td&gt; &lt;td&gt;9&lt;/td&gt; &lt;td&gt;5&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/blockquote&gt;
&lt;p&gt;D'autres modes d'extraction sont possibles, notamment sous forme de liste, ou de cellules :&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;br class=&#039;autobr&#039; /&gt;
&lt;strong&gt;Liste :&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;R&#233;mitanie pib: 12, population: 1 Baldoghistan pib: 23, population: 2&lt;/pre&gt; ... &lt;p&gt;&lt;strong&gt;Cellules :&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;A2: R&#233;mitanie B2: 12 C2: 1 A3: Baldoghistan B3: 23 C3: 2&lt;/pre&gt; ... &lt;/blockquote&gt;
&lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;i&gt;Dans l'article suivant, nous verrons &lt;a href=&quot;http://zzz.rezo.net/Exemples-de-boucles-YQL.html&quot; class=&#039;spip_out&#039; rel=&#039;external&#039;&gt;des exemples de boucles chevelues &#224; partir du webservice YQL&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Deux it&#233;rateurs simples : les listes et les &#233;num&#233;rations</title>
		<link>http://www.spip.net/fr_article5509.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5509.html</guid>
		<dc:date>2012-05-19T09:30:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>JLuc</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Parmis les nombreux et puissants it&#233;rateurs int&#233;gr&#233;s dans SPIP 3, il y en a 2 qui se distinguent par leur simplicit&#233; : les listes et les &#233;num&#233;rations.&lt;br class=&#039;autobr&#039; /&gt;
It&#233;rateur de liste&lt;br class=&#039;autobr&#039; /&gt;
L'it&#233;rateur de liste permet de parcourir les &#233;l&#233;ments d'une liste. Les &#233;l&#233;ments peuvent &#234;tre des mots, des chiffres ou des petits morceaux de texte. Il s'appelle sous la forme d'un crit&#232;re liste de la boucle DATA auquel on passe la liste des &#233;l&#233;ments devant &#234;tre parcourus :&lt;br class=&#039;autobr&#039; /&gt;
Cette boucle pr&#233;sente une liste des premiers nombres premiers : (...)&lt;/p&gt;


-
&lt;a href="http://www.spip.net/fr_rubrique702.html" rel="directory"&gt;Les it&#233;rateurs&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Parmis les nombreux et puissants it&#233;rateurs int&#233;gr&#233;s dans SPIP 3, il y en a 2 qui se distinguent par leur simplicit&#233; : les listes et les &#233;num&#233;rations.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;It&#233;rateur de liste&lt;/h3&gt;
&lt;p&gt;L'it&#233;rateur de liste permet de parcourir les &#233;l&#233;ments d'une liste. Les &#233;l&#233;ments peuvent &#234;tre des mots, des chiffres ou des petits morceaux de texte. Il s'appelle sous la forme d'un crit&#232;re &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;liste&lt;/code&gt; de la boucle &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;DATA&lt;/code&gt; auquel on passe la liste des &#233;l&#233;ments devant &#234;tre parcourus :&lt;/p&gt; &lt;p&gt;Cette boucle pr&#233;sente une liste des premiers nombres premiers :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;ul&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_premiers&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{liste 2, 3, 5, 7, 11, 13}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;li&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/li&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_premiers&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/f0cba0871f73ac39725b8b405e38fc8d.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Il est possible d'utiliser tous les crit&#232;res communs &#224; toutes les boucles.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Sp&#233;cifier le s&#233;parateur :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_mois&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{liste janvier, f&#233;vrier, mars, avril}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot; ; &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt; (&lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;span style=&quot;color: #FF851D;&quot;&gt;|couper&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{3}&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;)&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_mois&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/406d5a2552e41d96b24a2c50e34dcd57.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Affichera : janvier (jan) ; f&#233;vrier (f&#233;v) ; mars (mar) ; avril (avr)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Inverser l'ordre de parcours de la boucle :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_mois&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{liste 1, 10, 100, 1000}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{inverse &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{envers}&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_mois&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/adb7237a10e748939b2f09be2cd115db.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Produira : &quot;1, 10, 100, 100&quot; ou &quot;1000, 100, 10, 1&quot; selon la valeur de 'envers' dans l'environnement.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Ne boucler que sur un sous-ensemble de la liste :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_mois&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{liste janvier, f&#233;vrier, mars, avril, mai, juin, juillet}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{3,2}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_mois&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/b838619754ec6119ad3a4dd311506f2c.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;sautera 3 mois et en pr&#233;sentera 2, soit : &quot;avril, mai&quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Les valeurs des bornes peuvent &#234;tre calcul&#233;es :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_couleurs&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{liste &lt;span style=&quot;color: #D05000;&quot;&gt;#GET&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{couleurpreferee}&lt;/span&gt;, &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{couleurchoisie}&lt;/span&gt;}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_couleurs&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/bf59359fc3111c9fd5e6a1f8531987a4.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;It&#233;rateur &#233;num&#233;ration&lt;/h3&gt;
&lt;p&gt;L'it&#233;rateur d'&#233;num&#233;ration est une boucle tr&#232;s simple.&lt;/p&gt; &lt;p&gt;Son utilisation la plus g&#233;n&#233;rale est de la forme&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enumere&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum val1, val2}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enumere&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/cbea7bfb3791fc596dc4c8aca95d014c.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enumere&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum val1, val2, pas}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enumere&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#039;cadre_download&#039; style=&#039;text-align: right;&#039;&gt; &lt;a href=&#039;http://www.spip.net/local/cache-code/5e5f701421d885a3d9402dac40218f8f.txt&#039; style=&#039;font-family: verdana, arial, sans; font-weight: bold; font-style: normal;&#039;&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;val1&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;val2&lt;/code&gt; sont 2 valeurs num&#233;riques, ou bien 2 caract&#232;res. Cette boucle va &#233;num&#233;rer les valeurs entre &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;val1&lt;/code&gt; et &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;val2&lt;/code&gt;. Dans la premi&#232;re forme, le pas n'est pas pr&#233;cis&#233; : il vaut 1 par d&#233;faut.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Entiers, pas de 1 :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enum&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum 10,15}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enum&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur les valeurs en commen&#231;ant &#224; 10 et en s'arr&#234;tant avant 15 et renvoie donc &quot;10, 11, 12, 13, 14&quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;D&#233;cimaux, pas de 1 :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enum&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum 15.5,10.3}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enum&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur les valeurs en commen&#231;ant &#224; 15 et en s'arr&#234;tant avant 10 et renvoie donc &quot;15.5, 14.5, 13.5, 12.5, 11.5, 10.5&quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Entiers, pas de 2 :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enum&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum 10, 15, 2}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enum&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur les valeurs de 10 &#224; 15, par pas de 2, et renvoie donc &quot;10, 12, 14&quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Lettres :&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;BOUCLE_enum&lt;/span&gt;&lt;span style=&quot;color: #527EE0;&quot;&gt;(DATA)&lt;/span&gt;&lt;span style=&quot;color: #984CFF;&quot;&gt;&lt;span style=&quot;&quot;&gt;{enum g,m}&lt;/span&gt;&lt;span style=&quot;&quot;&gt;{&quot;, &quot;}&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#VALEUR&lt;/span&gt;&lt;span style=&quot;color: #1DA3DD;&quot;&gt;&lt;/BOUCLE_enum&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur les caract&#232;res de &quot;g&quot; jusqu'&#224; &quot;m&quot; et renvoie donc &quot;g, h, i, j, k, l, m&quot;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>#PRODUIRE</title>
		<link>http://www.spip.net/fr_article5505.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5505.html</guid>
		<dc:date>2012-05-19T09:30:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>JLuc</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>&lt;p&gt;Produire le fichier statique r&#233;sultant de l'&#233;valuation d'un squelette de fichier CSS ou Javascript&lt;/p&gt;

-
&lt;a href="http://www.spip.net/fr_rubrique543.html" rel="directory"&gt;Balises&lt;/a&gt;

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La balise #PRODUIRE produit un fichier statique a partir d'un squelette dynamique de CSS (.css.html) ou de javascript (.js.html)&lt;/p&gt; &lt;p&gt;La syntaxe de la balise #PRODUIRE est la m&#234;me que celle de #INCLURE&lt;br class=&#039;autobr&#039; /&gt;
mais produit le r&#233;sultat dans un fichier statique dont elle renvoie le nom.&lt;br class=&#039;autobr&#039; /&gt;
Cela permet ensuite &#224; apache de servir ce fichier statique directement, sans passer par spip.php &#224; chaque hit.&lt;/p&gt; &lt;textarea readonly=&#039;readonly&#039; cols=&#039;40&#039; rows=&#039;3&#039; class=&#039;spip_cadre&#039; dir=&#039;ltr&#039;&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;#PRODUIRE{fond=css/macss.css,couleur=ffffff}&quot; /&gt;&lt;/textarea&gt;
&lt;p&gt;Le format du fichier est indiqu&#233; par la pr&#233;-extension du fichier : .css.html ou .js.html. Sinon, c'est html.&lt;/p&gt; &lt;p&gt;On peut forcer le format du fichier avec un argument suppl&#233;mentaire format=css ou format=js pass&#233; en argument.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>_LOG_FILELINE</title>
		<link>http://www.spip.net/fr_article5506.html</link>
		<guid isPermaLink="true">http://www.spip.net/fr_article5506.html</guid>
		<dc:date>2012-05-19T09:29:58Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>b_b</dc:creator>


		<dc:subject>SPIP 3.0</dc:subject>

		<description>
&lt;p&gt;Utile en p&#233;riode de debugage, define(&#039;_LOG_FILELINE&#039;,true); permet d'ajouter dans les logs le fichier, la ligne et le nom de la fonction d'o&#249; le log est g&#233;n&#233;r&#233;.&lt;/p&gt;


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

/ 
&lt;a href="http://www.spip.net/@spip30" rel="tag"&gt;SPIP 3.0&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Utile en p&#233;riode de debugage, &lt;code class=&#039;spip_code&#039; dir=&#039;ltr&#039;&gt;define(&#039;_LOG_FILELINE&#039;,true);&lt;/code&gt; permet d'ajouter dans les logs le fichier, la ligne et le nom de la fonction d'o&#249; le log est g&#233;n&#233;r&#233;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>

</channel>

</rss>

