<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.spip.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>SPIP</title>
	<link>https://www.spip.net/</link>
	<description>Syst&#232;me de Publication pour Internet</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.spip.net/spip.php?id_auteur=1&amp;page=backend" rel="self" type="application/rss+xml" />

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



<item xml:lang="fr">
		<title>|set</title>
		<link>https://www.spip.net/fr_article5694.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article5694.html</guid>
		<dc:date>2015-12-19T13:49:42Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil</dc:creator>


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

		<description>
&lt;p&gt;Le filtre |setnom affecte la valeur courante &#224; la variable nom. C'est une alternative, parfois plus commode &#224; &#233;crire, &#224; la balise #SETnom,valeur. Exemples[(#TEXTE|mb_strlen|setlongueur)] [(#GETlongueur) caract&#232;res] &lt;br class='autobr' /&gt;
est l'&#233;quivalent de [(#SETlongueur,[(#TEXTE|mb_strlen)])] [(#GETlongueur) caract&#232;res] &lt;br class='autobr' /&gt;
Le deuxi&#232;me argument du filtre |set, s'il est non nul, indique qu'il faut &#171; continuer &#187;, c'est-&#224;-dire passer la valeur dans la suite des filtres, ou l'afficher si on est en bout de cha&#238;ne : (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|set{nom}&lt;/code&gt; affecte la valeur courante &#224; la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nom&lt;/code&gt;. C'est une alternative, parfois plus commode &#224; &#233;crire, &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SET{nom,valeur}&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-2&#034; id=&#034;nav69feb8de5ee9a5.79798375&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Exemples&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Exemples&#034; class=&#034;spip_ancre&#034;&gt;Exemples&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Exemples&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Exemples'&gt;Exemples&lt;a class='sommaire-back sommaire-back-2' href='#s-Exemples' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TEXTE|mb_strlen|set{longueur})] [(#GET{longueur}) caract&#232;res] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;est l'&#233;quivalent de&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#SET{longueur,[(#TEXTE|mb_strlen)]})] [(#GET{longueur}) caract&#232;res] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Le deuxi&#232;me argument&lt;/strong&gt; du filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|set{}&lt;/code&gt;, s'il est non nul, indique qu'il faut &#171; continuer &#187;, c'est-&#224;-dire passer la valeur dans la suite des filtres, ou l'afficher si on est en bout de cha&#238;ne :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TEXTE*|set{brut,1}|propre|set{traite,1}|mb_strlen|set{longueur,1})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8230;stockera le texte brut dans la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;brut&lt;/code&gt;, le texte trait&#233; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;traite&lt;/code&gt;, le nombre de caract&#232;res dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;longueur&lt;/code&gt;, et affichera in fine la valeur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;longueur&lt;/code&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-2' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article3990.html' class=&#034;spip_in&#034;&gt;#SET et #GET&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article3984.html' class=&#034;spip_in&#034;&gt;#SESSION_SET&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article5840.html' class=&#034;spip_in&#034;&gt;|setenv&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>|debug</title>
		<link>https://www.spip.net/fr_article5695.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article5695.html</guid>
		<dc:date>2014-08-14T08:24:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil</dc:creator>


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

		<description>
&lt;p&gt;Le filtre |debug peut servir &#224; la mise au point d'un squelette ; il affiche directement &#224; l'&#233;cran (pour le webmestre seulement) la valeur courante qui lui est pass&#233;e. On la retrouve aussi dans le fichier de log debug.log. &lt;br class='autobr' /&gt;
L'&#233;ventuel argument qu'on lui passe permet de mieux se rep&#233;rer si on a plusieurs points de debogage sur la m&#234;me page. [(#ID_ARTICLE|debugid_article)] [(#ID_RUBRIQUE|debugid_rubrique)] &lt;br class='autobr' /&gt;
affichera : 'id_article' = 12 'id_rubrique' = 4 &lt;br class='autobr' /&gt; Attention : Ce filtre doit (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|debug&lt;/code&gt; peut servir &#224; la mise au point d'un squelette ; il affiche directement &#224; l'&#233;cran (pour le webmestre seulement) la valeur courante qui lui est pass&#233;e. On la retrouve aussi dans le fichier de log &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;debug.log&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L'&#233;ventuel argument qu'on lui passe permet de mieux se rep&#233;rer si on a plusieurs points de debogage sur la m&#234;me page.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#ID_ARTICLE|debug{id_article})] [(#ID_RUBRIQUE|debug{id_rubrique})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;affichera :&lt;/p&gt;
&lt;pre&gt;'id_article' = 12 'id_rubrique' = 4&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; Ce filtre doit &#234;tre retir&#233; une fois la mise au point effectu&#233;e.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les it&#233;rateurs de SPIP - la boucle (DATA)</title>
		<link>https://www.spip.net/fr_article5444.html</link>
		<guid isPermaLink="true">https://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>
		<dc:subject>BOUCLE(DATA)</dc:subject>

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


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP 3.0 a apport&#233; 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;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-5&#034; id=&#034;nav69feb8de62aed0.60198965&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Syntaxe-et-formats-de-la-boucle&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Syntaxe-et-formats-de-la-boucle&#034; class=&#034;spip_ancre&#034;&gt;Syntaxe et formats de la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Filtrage-tri-pagination-fusion&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Filtrage-tri-pagination-fusion&#034; class=&#034;spip_ancre&#034;&gt;Filtrage, tri, pagination, fusion&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Le-critere&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-critere&#034; class=&#034;spip_ancre&#034;&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{liste ...}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Le-critere-13aa&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-critere-13aa&#034; class=&#034;spip_ancre&#034;&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{enum ...}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Protection-des-donnees-manipulees-par-les-iterateurs&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Protection-des-donnees-manipulees-par-les-iterateurs&#034; class=&#034;spip_ancre&#034;&gt;Protection des donn&#233;es manipul&#233;es par les it&#233;rateurs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Les boucles (DATA) ne portent plus exclusivement sur des requ&#234;tes SQL&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Sans surprise, l'it&#233;rateur classique de SPIP s'appelle SQL : il ex&#233;cute la (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, mais elles peuvent tourner sur toutes sortes de listes de donn&#233;es.&lt;/p&gt;
&lt;p&gt;Par exemple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un tableau de donn&#233;es produit par une fonction quelconque (dont les it&#233;rateurs PHP)&lt;/li&gt;&lt;li&gt; le contenu d'un fichier local au format XML, CSV, JSON, YAML, etc.&lt;/li&gt;&lt;li&gt; une liste de fichiers dans un r&#233;pertoire du serveur&lt;/li&gt;&lt;li&gt; une requ&#234;te sur un webservice&lt;/li&gt;&lt;li&gt; une requ&#234;te SQL (telle que calcul&#233;e par SPIP, par ex.)&lt;/li&gt;&lt;li&gt; etc. (LDAP...).&lt;/li&gt;&lt;/ul&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Syntaxe-et-formats-de-la-boucle&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Syntaxe-et-formats-de-la-boucle'&gt;Syntaxe et formats de la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-5' href='#s-Syntaxe-et-formats-de-la-boucle' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_exemple(DATA){source format, donn&#233;es}&gt; #BALISES &lt;/BOUCLE_exemple&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;#ENV*&lt;/code&gt;
&lt;br /&gt;- le chemin d'un fichier sur le disque dur, ex : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sources/definitions.csv&lt;/code&gt;
&lt;br /&gt;- l'URL d'un fichier ou d'un webservice, ex : &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;&#034;select * from flickr.photos.search where text='spip'&#034;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&#8212; &lt;strong&gt;La partie &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;format&lt;/code&gt;&lt;/strong&gt; est &#224; prendre dans la liste ci-dessous :
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;table&lt;/code&gt; (alias &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;array&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tableau&lt;/code&gt;), pour un tableau d&#233;j&#224; cr&#233;&#233;
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;csv&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;json&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;yaml&lt;/code&gt; pour un fichier compos&#233; dans l'un de ces formats
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;file&lt;/code&gt; pour boucler sur les lignes d'un fichier
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;glob&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pregfiles&lt;/code&gt; pour boucler sur les fichiers d'un r&#233;pertoire (et plus...)
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rss&lt;/code&gt; (alias &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;atom&lt;/code&gt;) pour lire un flux de nouvelles
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins&lt;/code&gt; pour lister les plugins actifs sur le site
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;yql&lt;/code&gt; pour envoyer une requ&#234;te sur le webservice de Yahoo Query Language
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sql&lt;/code&gt; pour envoyer une requ&#234;te brute au serveur SQL . Attention dans ce cas : 1) la cha&#238;ne sp&#233;cifiant la requ&#234;te ne doit pas contenir de fins de lignes 2) utiliser la syntaxe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{source sql, connecteur:requete}&lt;/code&gt; pour envoyer la requ&#234;te sur une base externe &lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&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=&#034;http://contrib.spip.net/Plugin-iCalendar&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Plugin 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='spip_code spip_code_inline' dir='ltr'&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function inc_json_to_array_dist($u) { if (is_array($json = json_decode($u)) OR is_object($json)) return (array) $json; } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut d&#233;clarer une nouvelle boucle DATA dans un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;inc/ma_source_to_array.php&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function inc_ma_source_to_array_dist($data,$param1='',$param2='') { // $data contient le contenu du fichier (local | distant) ou bien la valeur de la variable pass&#233;e dans le crit&#232;re. // $param1, $param2... sont des param&#232;tres facultatifs ... } &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et l'afficher ensuite :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_exemple(DATA){source ma_source,test}&gt; #VALEUR &lt;/BOUCLE_exemple&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cache :&lt;/strong&gt; &lt;br /&gt;- Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{datacache 3600}&lt;/code&gt; permet de sp&#233;cifier la dur&#233;e pendant laquelle le r&#233;sultat d'une boucle DATA est enregistr&#233; en cache. On peut donc d&#233;sactiver tout cache avec le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{datacache 0}&lt;/code&gt;
&lt;br /&gt;- Voir &lt;a href=&#034;https://programmer.spip.net/1012&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plus d'infos sur les caches des boucles DATA&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Filtrage-tri-pagination-fusion&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Filtrage-tri-pagination-fusion'&gt; Filtrage, tri, pagination, fusion &lt;a class='sommaire-back sommaire-back-5' href='#s-Filtrage-tri-pagination-fusion' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Filtres.&lt;/strong&gt; Comme les boucles SQL, les boucles &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; peuvent &#234;tre filtr&#233;es par des crit&#232;res du type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{valeur=x}&lt;/code&gt; ; les op&#233;rateurs disponibles sont &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;=&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&gt;&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&gt;=&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;=&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;==&lt;/code&gt; (expression rationnelle) et &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;{par xx}&lt;/code&gt; sont &#233;galement possibles, avec leur variante &lt;code class='spip_code spip_code_inline' dir='ltr'&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 &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{offset,limite}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fusion.&lt;/strong&gt; Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;BOUCLE_csv(DATA){source csv, adresses.csv}{fusion /3}{par /0}{'&lt;br&gt;'}&gt; #VALEUR{0} : #VALEUR{3} &lt;/BOUCLE_csv&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La fusion se fait apr&#232;s le tri, et retient le premier &#233;l&#233;ment rencontr&#233;. De cette mani&#232;re, si un tableau est trie &lt;code class='spip_code spip_code_inline' dir='ltr'&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Le-critere&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Le-critere'&gt; Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{liste ...}&lt;/code&gt; &lt;a class='sommaire-back sommaire-back-5' href='#s-Le-critere' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; accepte le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_i(DATA){liste 3,4,5}{&#034;&lt;br&gt;&#034;}&gt; &lt;BOUCLE_j(DATA){liste 6,7,8}{&#034; &#034;}&gt; [(#VALEUR|mult{#_i:VALEUR})] &lt;/BOUCLE_j&gt; &lt;/BOUCLE_i&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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='spip_code spip_code_inline' dir='ltr'&gt;#_i:VALEUR&lt;/code&gt; pour r&#233;f&#233;rencer dans la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;j&lt;/code&gt; la valeur calcul&#233;e par la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;i&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Voir aussi &lt;a href='https://www.spip.net/fr_article5509.html' class=&#034;spip_in&#034;&gt;Deux it&#233;rateurs simples : les listes et les &#233;num&#233;rations&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Le-critere-13aa&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Le-critere-13aa'&gt; Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{enum ...}&lt;/code&gt; &lt;a class='sommaire-back sommaire-back-5' href='#s-Le-critere-13aa' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_enumere(DATA){enum 2,10,2}&gt; #VALEUR &lt;/BOUCLE_enumere&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt; 2 4 6 8 10 &lt;/p&gt;
&lt;/blockquote&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_enum(DATA){enum g,m}{&#034;, &#034;}&gt; #VALEUR &lt;/BOUCLE_enum&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt; g, h, i, j, k, l, m &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;val1&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;val2&lt;/code&gt; sont 2 valeurs num&#233;riques, ou bien 2 caract&#232;res. SPIP d&#233;terminant laquelle des 2 valeurs est la plus petite, cette boucle va &#233;num&#233;rer les valeurs entre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;val1&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&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;Voir aussi &lt;a href='https://www.spip.net/fr_article5509.html' class=&#034;spip_in&#034;&gt;Deux it&#233;rateurs simples : les listes et les &#233;num&#233;rations&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Protection-des-donnees-manipulees-par-les-iterateurs&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Protection-des-donnees-manipulees-par-les-iterateurs'&gt;Protection des donn&#233;es manipul&#233;es par les it&#233;rateurs&lt;a class='sommaire-back sommaire-back-5' href='#s-Protection-des-donnees-manipulees-par-les-iterateurs' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; prot&#232;ge automatiquement toutes les balises qui sont &#224; l'int&#233;rieur, car les donn&#233;es qu'on y manipule sont en g&#233;n&#233;ral de provenance inconnue et potentiellement dangereuse. Cela impacte aussi les balises des formulaires (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_xx&lt;/code&gt;) qu'il faut donc utiliser avec un * comme expliqu&#233; dans l'&lt;a href=&#034;https://www.spip.net/fr_article4376.html#Balises---toil--es&#034;&gt;article sur les balises &#233;toil&#233;es&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_foreach_protege(DATA){liste a,b,c,d,e}&gt; #FORMULAIRE_XXX*{#VALEUR} &lt;/BOUCLE_foreach_protege&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;i&gt;A noter : si vous utilisez le plugin &#034;Bonux&#034;, il suffira d'utiliser une boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(POUR)&lt;/code&gt;, qui elle n'a pas ce comportement.&lt;/i&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_Foreach_non_protege(POUR){liste a,b,c,d,e}&gt; #FORMULAIRE_XXX{#VALEUR} &lt;/BOUCLE_Foreach_protege&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lire la suite&lt;/strong&gt; : r&#233;galez-vous avec &lt;a href='https://www.spip.net/fr_article5443.html' class=&#034;spip_in&#034;&gt;des exemples de boucles &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt;&lt;/a&gt; !&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;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;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Exemples de `BOUCLE(DATA)`</title>
		<link>https://www.spip.net/fr_article5443.html</link>
		<guid isPermaLink="true">https://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>
		<dc:subject>BOUCLE(DATA)</dc:subject>

		<description>
&lt;p&gt;Quelques exemples de boucles (DATA) permises par les it&#233;rateurs de SPIP. &lt;br class='autobr' /&gt; Boucler sur un tableau On peut boucler arbitrairement sur un tableau tel que ceux renvoy&#233;s par les balises suivantes : #ARRAY, #GET, #SESSION, etc. &lt;br class='autobr' /&gt;
Boucle sur les donn&#233;es de la session de l'utilisateur connect&#233; : spip #CLE : #VALEUR &lt;br class='autobr' /&gt; Boucle sur un tableau contenant des mots d&#233;fini avec #SET / #GET : spip #VALEUR &lt;br class='autobr' /&gt;
Boucle sur un tableau quelconque contenant des couleurs : spip [(#VALEURcouleur)] est (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Quelques exemples de boucles &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; permises par &lt;a href='https://www.spip.net/fr_article5444.html' class=&#034;spip_in&#034;&gt;les it&#233;rateurs de SPIP&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-15&#034; id=&#034;nav69feb8de66a017.14025179&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Boucler-sur-un-tableau&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Boucler-sur-un-tableau&#034; class=&#034;spip_ancre&#034;&gt;Boucler sur un tableau&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Lister-les-actifs&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Lister-les-actifs&#034; class=&#034;spip_ancre&#034;&gt;Lister les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins&lt;/code&gt; actifs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Filtrer-les-donnees-avec&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Filtrer-les-donnees-avec&#034; class=&#034;spip_ancre&#034;&gt;Filtrer les donn&#233;es avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{cle==...}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Lister-le-contenu-d-un-repertoire&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Lister-le-contenu-d-un-repertoire&#034; class=&#034;spip_ancre&#034;&gt;Lister le contenu d'un r&#233;pertoire&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Lister-des-fichiers-correspondant-a-un-masque&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Lister-des-fichiers-correspondant-a-un-masque&#034; class=&#034;spip_ancre&#034;&gt;Lister des fichiers correspondant &#224; un masque&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Lire-un-fichier-CSV&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Lire-un-fichier-CSV&#034; class=&#034;spip_ancre&#034;&gt;Lire un fichier CSV&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-document-Google-spreadsheet&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-document-Google-spreadsheet&#034; class=&#034;spip_ancre&#034;&gt;Un document Google (spreadsheet)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Une-page-HTML&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Une-page-HTML&#034; class=&#034;spip_ancre&#034;&gt;Une page HTML&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-webservice-au-format-YAML&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-webservice-au-format-YAML&#034; class=&#034;spip_ancre&#034;&gt;Un webservice au format YAML&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Le-critere&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Le-critere&#034; class=&#034;spip_ancre&#034;&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{datapath ...}&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Une-API-en-json&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Une-API-en-json&#034; class=&#034;spip_ancre&#034;&gt;Une API en json&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-fichier-XML&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-fichier-XML&#034; class=&#034;spip_ancre&#034;&gt;Un fichier XML&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Utiliser-un-webservice-comme-YQL-Yahoo-Query-Language&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Utiliser-un-webservice-comme-YQL-Yahoo-Query-Language&#034; class=&#034;spip_ancre&#034;&gt;Utiliser un webservice comme YQL &#8212; Yahoo Query Language)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-Iterateurs-PHP&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-Iterateurs-PHP&#034; class=&#034;spip_ancre&#034;&gt;Les It&#233;rateurs PHP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-calendrier-au-format-iCalendar-ics&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-calendrier-au-format-iCalendar-ics&#034; class=&#034;spip_ancre&#034;&gt;Un calendrier au format iCalendar/ics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;&lt;a id=&#034;tableau&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Boucler-sur-un-tableau&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Boucler-sur-un-tableau'&gt;Boucler sur un tableau&lt;a class='sommaire-back sommaire-back-15' href='#s-Boucler-sur-un-tableau' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On peut boucler arbitrairement sur un tableau tel que ceux renvoy&#233;s par les balises suivantes : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ARRAY&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#GET&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SESSION&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;Boucle sur les donn&#233;es de la session de l'utilisateur connect&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_session(DATA){source table,#SESSION}&gt; #CLE: #VALEUR &lt;br&gt; &lt;/BOUCLE_session&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur un tableau contenant des mots d&#233;fini avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SET / #GET&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Voir : #SET et #GET&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_mot(DATA){source table,#GET{mots}}&gt; #VALEUR &lt;/BOUCLE_mot&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Boucle sur un tableau quelconque contenant des couleurs :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_couleurs(DATA) {source table,#ARRAY{0,#ARRAY{couleur,vert},1,#ARRAY{couleur,bleu}}} {&#034;&lt;br&gt;&#034;} &gt; [(#VALEUR{couleur})] est &#233;quivalent &#224; [(#COULEUR)] &lt;/BOUCLE_couleurs&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
vert est &#233;quivalent &#224; vert&lt;br class='autobr' /&gt;
bleu est &#233;quivalent &#224; bleu&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&#192; noter :&lt;/strong&gt; quand &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#VALEUR&lt;/code&gt; est un tableau, on peut acc&#233;der &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#VALEUR{ma_cle}&lt;/code&gt; qui est &#233;quivalent &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#MA_CLE&lt;/code&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Lister-les-actifs&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Lister-les-actifs'&gt;Lister les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins&lt;/code&gt; actifs&lt;a class='sommaire-back sommaire-back-15' href='#s-Lister-les-actifs' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le format de source &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins&lt;/code&gt; ne n&#233;cessite pas de jeu de donn&#233;es en entr&#233;e.&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_pl(DATA){source plugins}&gt; #VALEUR &lt;/BOUCLE_pl&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt; crayons memoization icalendar &lt;/p&gt;
&lt;/blockquote&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Filtrer-les-donnees-avec&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Filtrer-les-donnees-avec'&gt; Filtrer les donn&#233;es avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{cle==...}&lt;/code&gt; &lt;a class='sommaire-back sommaire-back-15' href='#s-Filtrer-les-donnees-avec' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It&#233;rons sur la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#CONFIG&lt;/code&gt; qui comporte tous les &#233;l&#233;ments de configuration du site enregistr&#233;s dans la table &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_meta&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Comme la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#CONFIG&lt;/code&gt; est un tableau de donn&#233;es, on va employer le format &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;table&lt;/code&gt;. Un crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{cle==version}&lt;/code&gt; filtre le tableau en ne retenant que les valeurs de configuration dont la cl&#233; contient le mot &#171; version &#187;.&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_cfg(DATA){source table, #CONFIG*}{cle==version}&gt; &lt;dt&gt;#CLE&lt;/dt&gt; &lt;dd&gt;#VALEUR&lt;/dd&gt; &lt;/BOUCLE_cfg&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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;p&gt;&lt;a id=&#034;ls&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Lister-le-contenu-d-un-repertoire&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Lister-le-contenu-d-un-repertoire'&gt; Lister le contenu d'un r&#233;pertoire &lt;a class='sommaire-back sommaire-back-15' href='#s-Lister-le-contenu-d-un-repertoire' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La fonction &lt;a href=&#034;http://php.net/glob&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Boucle qui liste par ordre alphab&#233;tique les sous-r&#233;pertoires de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;IMG&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_repertoires(DATA){source ls, #CHEMIN{IMG}/*/}{par basename}&gt; [(#VAL{Y-m-d H:i:s}|date{#MTIME})] - [(#FILE)] - [(#FILENAME)]&lt;br&gt; &lt;/BOUCLE_repertoires&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt; &lt;pre&gt;2018-02-28 17:33:25 - IMG/gif 2018-02-28 18:44:14 - IMG/jpg 2018-02-28 17:33:20 - IMG/png&lt;/pre&gt; &lt;/blockquote&gt;
&lt;p&gt;Boucle qui liste par date inverse les 3 fichiers les plus r&#233;cents de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;IMG/jpg&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_fichiers(DATA){source ls, #CHEMIN{IMG}/jpg/*.jpg} {!par mtime} {0,3} &gt; [(#VAL{Y-m-d H:i:s}|date{#MTIME})] - [(#FILE)] &lt;br&gt; &lt;/BOUCLE_fichiers&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt; &lt;pre&gt;2018-02-28 18:45:39 - IMG/jpg/IMG011.jpg 2018-02-23 12:22:15 - IMG/jpg/IMG003.jpg 2018-02-23 12:21:47 - IMG/jpg/IMG004.jpg &lt;/pre&gt; &lt;/blockquote&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Lister-des-fichiers-correspondant-a-un-masque&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Lister-des-fichiers-correspondant-a-un-masque'&gt;Lister des fichiers correspondant &#224; un masque&lt;a class='sommaire-back sommaire-back-15' href='#s-Lister-des-fichiers-correspondant-a-un-masque' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&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.&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Plus versatile, mais plus lente que glob.&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Exemple : les fichiers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin.xml&lt;/code&gt; du site.&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_xml(DATA){source pregfiles, #EVAL{_DIR_RACINE}, plugin.xml$, 5}&gt; #VALEUR[ - (#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] &lt;/BOUCLE_xml&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Lire-un-fichier-CSV&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Lire-un-fichier-CSV'&gt;Lire un fichier CSV&lt;a class='sommaire-back sommaire-back-15' href='#s-Lire-un-fichier-CSV' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nous allons cette fois afficher un fichier au format CSV se trouvant sur notre disque dur. Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;adresses.csv&lt;/code&gt; contient un carnet d'adresses :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Fil,Philippe,fil@rezo.net,http://rezo.net/ Marcimat,Matthieu,marcimat@rezo.net,http://marcimat.magraine.net/ &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_csv(DATA){source csv, adresses.csv} {par /3} {&#034;&lt;br&gt;&#034;}&gt; #VALEUR{0} : #VALEUR{3} &lt;/BOUCLE_csv&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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='spip_code spip_code_inline' dir='ltr'&gt;{par /3}&lt;/code&gt; permet de trier sur la colonne n&#176; 3, contenant les adresses web. Le &lt;code class='spip_code spip_code_inline' dir='ltr'&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-document-Google-spreadsheet&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-document-Google-spreadsheet'&gt;Un document Google (spreadsheet)&lt;a class='sommaire-back sommaire-back-15' href='#s-Un-document-Google-spreadsheet' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{key,0AolUP3c6K9JodGwxRjJzb2hyTGZLU29qRVItRXk1VXc} &lt;B_csv&gt; &lt;table border=&#034;1&#034;&gt; &lt;BOUCLE_csv(DATA){source csv, https://spreadsheets.google.com/pub?key=#GET{key}&amp;hl=en&amp;dsds&amp;output=csv} &gt; &lt;tr&gt; &lt;td&gt;#VALEUR{0}&lt;/td&gt; &lt;td&gt;#VALEUR{1}&lt;/td&gt; &lt;td&gt;#VALEUR{2}&lt;/td&gt; &lt;/tr&gt; &lt;/BOUCLE_csv&gt; &lt;/table&gt; &lt;/B_csv&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;&lt;table border=&#034;1&#034;&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=&#034;spip&#034;&gt;
&lt;p&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Une-page-HTML&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Une-page-HTML'&gt;Une page HTML&lt;a class='sommaire-back sommaire-back-15' href='#s-Une-page-HTML' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lire une page HTML, isoler une ligne avec un certain marquage et y s&#233;lectionner une valeur interressante pour l'afficher proprement ? C'est possible ! Ici nous allons afficher le nombre de &lt;i&gt;followers&lt;/i&gt; sur un compte twitter.&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{followers,'data-nav=&#034;followers&#034;'} &lt;BOUCLE_followers(DATA){source file, https://twitter.com/spip}{valeur == #GET{followers}}&gt; [&lt;span title=&#034;[(#VALEUR|match{title=&#034;(.*)&#034;,1}|strtolower)]&#034;&gt;(#VALEUR|match{title=&#034;(.*)&#034;,1}|replace{ abonn&#233;s}|trim|replace{ \d+$, k})&lt;/span&gt;] &lt;/BOUCLE_followers&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;br class='autobr' /&gt; &lt;span title=&#034;1&#8239;270 abonn&#233;s&#034;&gt;1&#8239;k&lt;/span&gt; &lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-webservice-au-format-YAML&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-webservice-au-format-YAML'&gt;Un webservice au format YAML&lt;a class='sommaire-back sommaire-back-15' href='#s-Un-webservice-au-format-YAML' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le site &lt;a href=&#034;http://per.sonn.es/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&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=&#034;http://per.sonn.es/Fil.yaml&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://per.sonn.es/Fil.yaml&lt;/a&gt;) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;name: Fil sex: F birthday: '1966-08-17' job: Calorifugeur friends: - 'Maude Gu&#233;rin' - 'Zohra Robin' - 'Pierre-Yves Philippe' - 'Lauriane Bertin' - 'Jeannine Pichon' - 'Vanessa Michel' - 'Wendy Allard' ... city: 'Mouxy (Rhone-Alpes)' &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si l'on charge cette adresse avec le format &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_yaml(DATA){source yaml, http://per.sonn.es/Fil.yaml}&gt; &lt;dt&gt;#CLE&lt;/dt&gt; &lt;dd&gt;[(#VALEUR|print)]&lt;/dd&gt; &lt;/BOUCLE_yaml&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; au format &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt;, cette fois au format &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;table&lt;/code&gt; :&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_yaml2(DATA){source yaml, http://per.sonn.es/Fil.yaml}{cle=friends}&gt; &lt;BOUCLE_friends(DATA){source table, #VALEUR}{&#034; - &#034;}&gt; #VALEUR &lt;/BOUCLE_friends&gt; &lt;/BOUCLE_yaml2&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Le-critere&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Le-critere'&gt;Le crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{datapath ...}&lt;/code&gt;&lt;a class='sommaire-back sommaire-back-15' href='#s-Le-critere' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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='spip_code spip_code_inline' dir='ltr'&gt;{datapath ...}&lt;/code&gt;, qui permet d'indiquer &#224; la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; le chemin (au sens de Xpath) vers le tableau de donn&#233;es qui nous int&#233;resse&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour vous aider &#224; d&#233;terminer le datapath, vous pouvez visualiser le tableau (&#8230;)&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;.&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_yaml3(DATA) {source yaml, http://per.sonn.es/Fil.yaml} {datapath friends} {&#034; - &#034;}{pagination 10} &gt; #VALEUR &lt;/BOUCLE_yaml3&gt; #PAGINATION &lt;/B_yaml3&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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=&#034;on&#034;&gt;0&lt;/span&gt; | 10 | 20 | 30 | 40 | ...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;json&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Une-API-en-json&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Une-API-en-json'&gt;Une API en json&lt;a class='sommaire-back sommaire-back-15' href='#s-Une-API-en-json' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour afficher des images d'&#233;cureuils issues d'Instagram (du temps o&#249; instagram proposait une API json, mais cette fonctionnalit&#233; a &#233;t&#233; retir&#233;e) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_instagram(DATA) {source json, https://www.instagram.com/explore/tags/squirrel/?__a=1} {datapath graphql/hashtag/edge_hashtag_to_media/edges} &gt; &lt;BOUCLE_images(DATA){source table,#VALEUR}{!par taken_at_timestamp}&gt; &lt;a href=&#034;#DISPLAY_URL&#034;&gt;[(#THUMBNAIL_SRC|balise_img)]&lt;/a&gt; &lt;/BOUCLE_images&gt; &lt;/BOUCLE_instagram&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;div class='spip_document_2870 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://www.spip.net/IMG/png/capture_d_e_cran_2018-02-27_16.01.02.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://www.spip.net/local/cache-vignettes/L500xH167/capture_d_e_cran_2018-02-27_16.01.02-ba884.png?1616124917' width='500' height='167' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-fichier-XML&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-fichier-XML'&gt;Un fichier XML&lt;a class='sommaire-back sommaire-back-15' href='#s-Un-fichier-XML' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le plugin &#171; citations al&#233;atoires &#187; contient un fichier de citations, au format XML Ce plugin non maintenu n'est pas migr&#233; sur la forge GIT mais on peut le trouver sur cette archive (&lt;a href=&#034;https://github.com/Cerdic/spip-zone-plugins/blob/master/citation_aleatoire/trunk/citations/citations_fr.xml&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/Cerdic/spip-zone-plugins/blob/master/citation_aleatoire/trunk/citations/citations_fr.xml&lt;/a&gt;). La boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; permet de l'exploiter directement :&lt;/p&gt;
&lt;p&gt;Boucle :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#REM) R&#233;cup&#233;rer le fichier au format txt de la zone - mieux vaut l'enregistrer localement sur le serveur] [(#SET{c,https://github.com/Cerdic/spip-zone-plugins/blob/master/citation_aleatoire/trunk/citations/citations_fr.xml?format=txt})] &lt;dl&gt; &lt;BOUCLE_cite(DATA) {source xml, #GET{c}} {par hasard}{0,1} &gt; [&lt;dt&gt;(#VALEUR{0/auteur/0})&lt;/dt&gt;] [&lt;dd&gt;(#VALEUR{0/texte/0})&lt;/dd&gt;] &lt;/BOUCLE_cite&gt; &lt;/dl&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat (au hasard donc) :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt; &lt;dl&gt;&lt;dt&gt;L'id&#233;al quand on veut &#234;tre admir&#233;, c'est d'&#234;tre mort.&lt;/dt&gt; &lt;dd&gt;(Michel Audiard)&lt;/dd&gt;&lt;/dl&gt; &lt;/blockquote&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Utiliser-un-webservice-comme-YQL-Yahoo-Query-Language&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Utiliser-un-webservice-comme-YQL-Yahoo-Query-Language'&gt;Utiliser un webservice comme YQL &#8212; Yahoo Query Language)&lt;a class='sommaire-back sommaire-back-15' href='#s-Utiliser-un-webservice-comme-YQL-Yahoo-Query-Language' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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='spip_code spip_code_inline' dir='ltr'&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=&#034;http://zzz.rezo.net/Exemples-de-boucles-YQL.html&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zzz.rezo.net/Exemples-de-bou...&lt;/a&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Les-Iterateurs-PHP&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Les-Iterateurs-PHP'&gt;Les It&#233;rateurs PHP&lt;a class='sommaire-back sommaire-back-15' href='#s-Les-Iterateurs-PHP' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&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='spip_code spip_code_inline' dir='ltr'&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 class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;pre&gt; &lt;BOUCLE_ls(php:DirectoryIterator){args IMG/jpg/} {pagination 10} {valeur!==^\.}{valeur==\.jpg$} &gt;[(#VAL{Y-m-d H:i:s}|date{#GETMTIME})] / #VALEUR &lt;/BOUCLE_ls&gt; &lt;/pre&gt; #PAGINATION &lt;/B_ls&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R&#233;sultat :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&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='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&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=&#034;http://php.net/manual/fr/class.directoryiterator.php&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://php.net/manual/fr/class.directoryiterator.php&lt;/a&gt;) sont disponibles sous forme de balises (ici, &lt;code class='spip_code spip_code_inline' dir='ltr'&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='spip_code spip_code_inline' dir='ltr'&gt;glob&lt;/code&gt; de la boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(DATA)&lt;/code&gt; est sans doute plus facile &#224; utiliser que cet it&#233;rateur PHP.&lt;br class='manualbr' /&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_ls(DATA){source ls, IMG/jpg/*.jpg} {!par mtime}&gt; ...&lt;/code&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-calendrier-au-format-iCalendar-ics&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-calendrier-au-format-iCalendar-ics'&gt;Un calendrier au format iCalendar/ics&lt;a class='sommaire-back sommaire-back-15' href='#s-Un-calendrier-au-format-iCalendar-ics' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cette fonctionnalit&#233; n&#233;cessite l'activation du &lt;a href=&#034;http://contrib.spip.net/Plugin-iCalendar&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugin iCalendar&lt;/a&gt;. Il est alors possible d'it&#233;rer sur les &#233;v&#233;nements d'un calendrier publi&#233; au format iCalendar/ics. L'article consacr&#233; sur SPIP-Contrib au &lt;a href=&#034;http://contrib.spip.net/Plugin-iCalendar&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;plugin icalendar&lt;/a&gt; donne un exemple complet.&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Voir : &lt;a href='https://www.spip.net/fr_article3990.html' class=&#034;spip_in&#034;&gt;#SET et #GET&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Plus versatile, mais plus lente que glob.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Pour vous aider &#224; d&#233;terminer le datapath, vous pouvez visualiser le tableau des r&#233;sultats en ins&#233;rant le code &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[&lt;pre&gt;(#VALEUR|print_r{1})&lt;/pre&gt;]&lt;/code&gt; dans votre boucle data/&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>#DOUBLONS</title>
		<link>https://www.spip.net/fr_article4123.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article4123.html</guid>
		<dc:date>2010-07-08T22:28:27Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cam.lafit, denisb, Fil</dc:creator>


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

		<description>
&lt;p&gt;#DOUBLONSmots donne l'&#233;tat des doublons (MOTS) &#224; cet endroit, sous forme de tableau d'id_mot array(1,2,3,...) &lt;br class='autobr' /&gt;
#DOUBLONS tout seul donne la liste brute de tous les doublons &lt;br class='autobr' /&gt;
#DOUBLONS*mots donne la cha&#238;ne brute &#034;,1,2,3,...&#034;
&lt;br class='autobr' /&gt;
(changera si la gestion des doublons &#233;volue) &lt;br class='autobr' /&gt;
Pour des doublons &#171; nomm&#233;s &#187; (exemple : &lt;BOUCLE_b(ARTICLES)id_article&gt;100doublons A&gt;) on utilisera : &lt;br class='autobr' /&gt;
#DOUBLONSarticles, A pour avoir le tableau des id_articles. &lt;br class='autobr' /&gt;
Pour passer le ou les tableaux de doublons &#224; un (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#DOUBLONS{mots}&lt;/code&gt; donne l'&#233;tat des doublons &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(MOTS)&lt;/code&gt; &#224; cet endroit, sous forme de tableau d'id_mot &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;array(1,2,3,...)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#DOUBLONS&lt;/code&gt; tout seul donne la liste brute de tous les doublons&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#DOUBLONS*{mots}&lt;/code&gt; donne la cha&#238;ne brute &#034;,1,2,3,...&#034;&lt;br class='autobr' /&gt;
(changera si la gestion des doublons &#233;volue)&lt;/p&gt;
&lt;p&gt;Pour des doublons &#171; &lt;i&gt;nomm&#233;s&lt;/i&gt; &#187; (exemple : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_b(ARTICLES){id_article&gt;100}{doublons A}&gt;&lt;/code&gt;) on utilisera : &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#DOUBLONS{articles, A}&lt;/code&gt; pour avoir le tableau des id_articles.&lt;/p&gt;
&lt;p&gt;Pour passer le ou les tableaux de doublons &#224; un INCLURE, on notera :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#INCLURE{fond=noisette, env, doublons=#DOUBLONS{articles, A}} &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;pour un tableau nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{doublons A}&lt;/code&gt; d'une BOUCLE(ARTICLES)&lt;br class='autobr' /&gt;
et&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#INCLURE{fond=noisette, env, doublons} &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;pour tous les tableaux de doublons d&#233;clar&#233;s dans le squelette appelant (avant l'appel de l'INCLURE).&lt;/p&gt;
&lt;p&gt;Pour r&#233;cup&#233;rer un tableau de doublons &lt;strong&gt;depuis&lt;/strong&gt; un INCLURE, il conviendra de ne faire retourner par cet INCLURE que &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#DOUBLONS*{articles, B}&lt;/code&gt; et, dans le squelette appelant, d'utiliser&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{ret, #INCLURE{fond=noisette, env, doublons}|explode{','}}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#GET{ret}&lt;/code&gt; r&#233;sultant pouvant alors &#234;tre utilis&#233; dans un crit&#232;re de boucle (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{id_article IN #GET{ret}}&lt;/code&gt;).&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>&#201;cran de s&#233;curit&#233;</title>
		<link>https://www.spip.net/fr_article4200.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article4200.html</guid>
		<dc:date>2009-08-05T20:13:17Z</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;L'&#233;cran de s&#233;curit&#233; est un fichier php unique, qui prot&#232;ge vos sites en bloquant certaines attaques li&#233;es &#224; des trous de s&#233;curit&#233;. Ce syst&#232;me permet de r&#233;agir tr&#232;s rapidement lorsqu'un probl&#232;me est d&#233;couvert, en colmatant le trou sans pour autant devoir mettre &#224; niveau tout son site ni appliquer un &#171; patch &#187; complexe. &lt;br class='autobr' /&gt;
Version courante : &lt;br class='autobr' /&gt;
Philosophie &lt;br class='autobr' /&gt;
Lorsqu'elle d&#233;couvre ou qu'on lui signale un &#171; trou &#187; de s&#233;curit&#233;, l'&#233;quipe de d&#233;veloppement de SPIP s'efforce de corriger le probl&#232;me au (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;L'&#233;cran de s&#233;curit&#233; est un fichier php unique, qui prot&#232;ge vos sites en bloquant certaines attaques li&#233;es &#224; des trous de s&#233;curit&#233;. Ce syst&#232;me permet de r&#233;agir tr&#232;s rapidement lorsqu'un probl&#232;me est d&#233;couvert, en colmatant le trou sans pour autant devoir mettre &#224; niveau tout son site ni appliquer un &#171; patch &#187; complexe.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Version courante : 1.6.7&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-6&#034; id=&#034;nav69feb8de6b5de9.61667086&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Philosophie&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Philosophie&#034; class=&#034;spip_ancre&#034;&gt;Philosophie&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Telechargement&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Telechargement&#034; class=&#034;spip_ancre&#034;&gt;T&#233;l&#233;chargement&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Installation&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Installation&#034; class=&#034;spip_ancre&#034;&gt;Installation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Configuration&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Configuration&#034; class=&#034;spip_ancre&#034;&gt;Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Fonctionnement-de-l-ecran&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Fonctionnement-de-l-ecran&#034; class=&#034;spip_ancre&#034;&gt;Fonctionnement de l'&#233;cran&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Verification-et-test&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Verification-et-test&#034; class=&#034;spip_ancre&#034;&gt;V&#233;rification et test&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;div style=&#034;text-align:center&#034;&gt;&lt;a href=&#034;https://git.spip.net/spip-contrib-outils/securite/-/raw/master/ecran_securite.php&#034; class=&#034;&#034;&gt;&lt;span class=&#034;download__span&#034;&gt;T&#233;l&#233;charger&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Philosophie&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Philosophie'&gt;Philosophie&lt;a class='sommaire-back sommaire-back-6' href='#s-Philosophie' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lorsqu'elle d&#233;couvre ou qu'on lui signale un &#171; trou &#187; de s&#233;curit&#233;, l'&#233;quipe de d&#233;veloppement de SPIP s'efforce de corriger le probl&#232;me au plus vite dans sa version de d&#233;veloppement et dans ses versions stables, afin de ne plus diffuser de code fautif.&lt;/p&gt;
&lt;p&gt;Cependant, la majorit&#233; des utilisateurs n'a pas toujours le temps ou la possibilit&#233; de faire la mise &#224; jour, et a tendance &#224; peser le pour et le contre face au risque d'avoir, lors d'une mise &#224; jour m&#234;me minime, des incompatibilit&#233;s ou des d&#233;calages avec le code test&#233; et valid&#233; qu'elle a mis en ligne.&lt;/p&gt;
&lt;p&gt;Pour un h&#233;bergeur, l'information concernant un probl&#232;me de s&#233;curit&#233; est &#233;galement &#224; double tranchant : d'un c&#244;t&#233; il ne souhaite pas laisser de &#171; trou &#187; sur un de ses sites h&#233;berg&#233;s, de l'autre il n'a pas toujours l'autorisation de modifier les sites. Et les mettre hors-ligne n'est bien souvent pas envisageable, sauf chez les h&#233;bergeurs &lt;i&gt;cheap&lt;/i&gt; ou paranos.&lt;/p&gt;
&lt;p&gt;L'&#233;cran de s&#233;curit&#233; est l&#224; pour r&#233;pondre &#224; cette probl&#233;matique. Il s'agit d'un fichier php unique et s&#233;par&#233; de SPIP, que l'on peut mettre &#224; jour ind&#233;pendamment du reste du code, et qui est compatible avec toutes les versions de SPIP, m&#234;me les plus anciennes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ce fichier ne se substitue pas a une v&#233;ritable mise &#224; niveau de votre version de SPIP, mais il peut permettre de bloquer certaines attaques en attendant une migration propre.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De fait, cet &#233;cran peut &#234;tre activ&#233; au niveau du serveur sur l'ensemble des scripts php (SPIP ou pas), et garantit, s'il est &#224; jour, que toutes les failles connues de quelque version de SPIP que ce soit sont impossibles &#224; exploiter. D'o&#249; son nom d'&#171; &#233;cran &#187; : il se place entre le visiteur et SPIP, et v&#233;rifie que le visiteur n'est pas en train d'essayer d'exploiter une attaque connue.&lt;/p&gt;
&lt;p&gt;Lorsqu'une nouvelle faille est d&#233;couverte, il suffit donc de mettre &#224; jour cet &#233;cran pour parer toute attaque via ladite faille ; &#231;a laisse le temps de mettre &#224; jour les scripts SPIP &#224; t&#234;te repos&#233;e au moment idoine.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Telechargement&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Telechargement'&gt;T&#233;l&#233;chargement&lt;a class='sommaire-back sommaire-back-6' href='#s-Telechargement' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;T&#233;l&#233;charger l'&#233;cran de s&#233;curit&#233;&lt;/strong&gt; :&lt;br class='autobr' /&gt;
&lt;a href=&#034;https://git.spip.net/spip-contrib-outils/securite/-/raw/master/ecran_securite.php&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git.spip.net/spip-contrib-o...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le code de cet &#233;cran est consultable &#224; l'adresse suivante :&lt;br class='autobr' /&gt;
&lt;a href=&#034;https://git.spip.net/spip-contrib-outils/securite&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://git.spip.net/spip-contrib-o...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On peut aussi le r&#233;cup&#233;rer et le synchroniser avec GIT :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git clone https://git.spip.net/spip-contrib-outils/securite.git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Le fichier est nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecran_securite.php&lt;/code&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Installation&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Installation'&gt;Installation&lt;a class='sommaire-back sommaire-back-6' href='#s-Installation' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il y a plusieurs m&#233;thodes pour installer cet &#233;cran :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Au niveau d'un site SPIP donn&#233; :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il suffit de d&#233;poser le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecran_securite.php&lt;/code&gt; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/&lt;/code&gt; du site pour qu'il soit pris en compte automatiquement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Au niveau du serveur :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;D&#233;poser ce fichier dans un r&#233;pertoire lisible par tous les sites (par exemple &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/share/php/ecran_securite/&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Modifier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;php.ini&lt;/code&gt;, en ajoutant les lignes suivantes :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php' &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou bien, modifier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;httpd.conf&lt;/code&gt;, en ajoutant :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;php_admin_value auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php' &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans ces deux cas, l'&#233;cran est inclus &#224; chaque &#171; hit &#187; php avant le lancement du script normal. Il peut donc bloquer tout appel &#171; malfaisant &#187;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Configuration&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Configuration'&gt;Configuration&lt;a class='sommaire-back sommaire-back-6' href='#s-Configuration' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Outre la s&#233;curit&#233;, l'&#233;cran a la capacit&#233; de moduler les acc&#232;s des robots d'indexation aux scripts php, de mani&#232;re &#224; leur dire de &#171; revenir plus tard &#187; lorsque le serveur est satur&#233;.&lt;/p&gt;
&lt;p&gt;Pour les versions r&#233;centes, ce comportement est configurable, en indiquant dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/ecran_securite_options.php&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php define('_ECRAN_SECURITE_LOAD', X); &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce r&#233;glage active la protection anti-robots quand la charge du serveur (load) exc&#232;de la valeur X. La valeur par d&#233;faut est 4 ; pour d&#233;sactiver, mettre 0.&lt;br class='autobr' /&gt;
&lt;strong&gt;NB :&lt;/strong&gt; &#224; partir de SPIP 5.0, la valeur par d&#233;faut sera de 0.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt;&lt;br class='autobr' /&gt;
Il ne faut pas confondre un &lt;i&gt;load de 4&lt;/i&gt; et une &lt;i&gt;charge CPU de 400%&lt;/i&gt; : il n'y a pas de correspondance directe.&lt;br class='autobr' /&gt;
En particulier le load refl&#232;te les processus en attente, ce qui n'est pas forc&#233;ment d&#251; &#224; la CPU (parfois ce sont les I/O &#8212;notamment d'un NFS&#8212;. cf &lt;a href=&#034;https://en.wikipedia.org/wiki/Load_%28computing%29&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Load_average&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Aussi la valeur de &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;_ECRAN_SECURITE_LOAD&lt;/code&gt;&lt;/strong&gt; ne doit pas s'&#233;valuer uniquement &#224; l'aune du nombre de processeurs de la machine.&lt;br class='autobr' /&gt;
D'autant plus que le m&#233;canisme d'all&#232;gement de l'&#233;cran de s&#233;curit&#233; s'active progressivement au fur et &#224; mesure que le load d&#233;passe la valeur seuil : &#224; 4.01 de load il n'y aura quasiment aucune 503 d'envoy&#233;e.&lt;/p&gt;
&lt;p&gt;4 repr&#233;sente une bonne valeur : elle permet de garder une performance serveur satisfaisante ; elle &#233;vite de faire attendre le visiteur.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Fonctionnement-de-l-ecran&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Fonctionnement-de-l-ecran'&gt;Fonctionnement de l'&#233;cran&lt;a class='sommaire-back sommaire-back-6' href='#s-Fonctionnement-de-l-ecran' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;L'&#233;cran intervient le moins possible, il ne fait que bloquer des variables dont on sait qu'elles ont &#233;t&#233;, &#224; un moment donn&#233; de l'histoire de SPIP, mal contr&#244;l&#233;es, et qu'elles pouvaient par cons&#233;quent donner lieu &#224; une attaque. Il est donc compatible avec toutes les versions de SPIP.&lt;/p&gt;
&lt;p&gt;Toutefois, l'&#233;cran verrouille syst&#233;matiquement certaines variables. Ainsi, par exemple, les variables nomm&#233;es &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;id_xxx&lt;/code&gt; sont toutes contr&#244;l&#233;es comme &#233;tant obligatoirement des valeurs num&#233;riques enti&#232;res, afin d'&#233;viter toute injection de code SQL via ce genre de variable tr&#232;s courante.&lt;/p&gt;
&lt;p&gt;Par ailleurs il bloque l'acc&#232;s, pour les robots seulement, aux pages comportant plusieurs paginations simultan&#233;ment (car la combinatoire issue de plusieurs paginations peut entra&#238;ner un trop grand nombre de requ&#234;tes).&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Verification-et-test&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Verification-et-test'&gt;V&#233;rification et test&lt;a class='sommaire-back sommaire-back-6' href='#s-Verification-et-test' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour v&#233;rifier la bonne ex&#233;cution du script, appeler le site public en ajoutant &#224; l'url soit &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?test_ecran_securite=1&lt;/code&gt;, soit &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&amp;test_ecran_securite=1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;l'affichage r&#233;sultant devrait &#234;tre :&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;
&lt;strong&gt;Error 403&lt;/strong&gt;&lt;br class='autobr' /&gt;
You are not authorized to view this page (test 1.6.7)&lt;/p&gt;
&lt;/blockquote&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>#AUTORISER</title>
		<link>https://www.spip.net/fr_article3896.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3896.html</guid>
		<dc:date>2009-05-25T20:24:59Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>cam.lafit, Fil</dc:creator>


		<dc:subject>Balises calcul&#233;es</dc:subject>
		<dc:subject>SPIP 2.0</dc:subject>
		<dc:subject>#AUTORISER</dc:subject>

		<description>
&lt;p&gt;Une balise #AUTORISER permet de demander des autorisations dans un squelette. &lt;br class='autobr' /&gt; Elle renvoie un espace si l'autorisation est donn&#233;e, et une cha&#238;ne vide dans le cas contraire. On met autant d'arguments (et les m&#234;mes) qu'on en mettrait dans la fonction autoriser(). &lt;br class='autobr' /&gt;
Par exemple, pour savoir si le visiteur courant peut acc&#233;der aux statistiques de l'article : spip [(#AUTORISERvoirstats,article,#ID_ARTICLE) voir les stats ] &lt;br class='autobr' /&gt;
Comme pour la fonction autoriser(), on peut passer un #ID_AUTEUR (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://www.spip.net/@multifrbalisescalculeesesbalizascalculadasencalculatedtagsmulti" rel="tag"&gt;Balises calcul&#233;es&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@spip20" rel="tag"&gt;SPIP 2.0&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@autoriser" rel="tag"&gt;#AUTORISER&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Une balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#AUTORISER&lt;/code&gt; permet de demander des autorisations dans un squelette.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-1&#034; id=&#034;nav69feb8de6dd796.53470471&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Elle renvoie un espace si l'autorisation est donn&#233;e, et une cha&#238;ne vide dans le cas contraire. On met autant d'arguments (et les m&#234;mes) qu'on en mettrait dans la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;autoriser()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par exemple, pour savoir si le visiteur courant peut acc&#233;der aux statistiques de l'article :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#AUTORISER{voirstats,article,#ID_ARTICLE}) &lt;a href='ecrire/?exec=....'&gt;voir les stats&lt;/a&gt; ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme pour la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;autoriser()&lt;/code&gt;, on peut passer un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ID_AUTEUR&lt;/code&gt; en argument pour demander si l'auteur en question est autoris&#233; &#224; .... .&lt;/p&gt;
&lt;p&gt;Par exemple pour signaler d'une &#233;toile les administrateurs et r&#233;dacteurs dans une liste d'auteurs :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_a(AUTEURS){tous}&gt; #NOM [(#AUTORISER{ecrire,'','',#ID_AUTEUR}) *] &lt;/BOUCLE_a&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un autre exemple, ci dessous, si le visiteur a des droits de modifications sur l'article, afficher un formulaire pour l'&#233;diter, qui, une fois valid&#233;, retourne sur la page de l'article en question :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#AUTORISER{modifier, article, #ID_ARTICLE}) #FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #URL_ARTICLE} ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rappel : les arguments de autoriser sont, dans l'ordre, (faire, quoi, id, qui, options).&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-1' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article5528.html' class=&#034;spip_in&#034;&gt;API &#171; autoriser &#187; [ redirection ]&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://programmer.spip.net/-Gestion-d-autorisations-&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;La gestion des autorisation sur Programmer.spip.net&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Utiliser les mod&#232;les</title>
		<link>https://www.spip.net/fr_article3454.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3454.html</guid>
		<dc:date>2006-08-29T23:04:16Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil</dc:creator>


		<dc:subject>#MODELE</dc:subject>

		<description>
&lt;p&gt;Un mod&#232;le est un petit squelette SPIP qui d&#233;crit un fragment de HTML facile &#224; ins&#233;rer dans un autre squelette ou &#8212; et c'est l&#224; le principal int&#233;r&#234;t &#8212; dans le texte d'un article. &lt;br class='autobr' /&gt; Inspir&#233; des mod&#232;les de Wikip&#233;dia, le syst&#232;me des mod&#232;les offre de nouvelles capacit&#233;s aux webmestres et aux r&#233;dacteurs. &lt;br class='autobr' /&gt;
Les mod&#232;les sont une extension des classiques raccourcis et. Ceux-ci correspondent d&#233;sormais aux mod&#232;les /plugins-dist/medias/modeles/img.html et /plugins-dist/medias/modeles/doc.html. &lt;br class='autobr' /&gt;
Leur (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un &lt;i&gt;mod&#232;le&lt;/i&gt; est un petit squelette SPIP qui d&#233;crit un fragment de HTML facile &#224; ins&#233;rer dans un autre squelette ou &#8212; et c'est l&#224; le principal int&#233;r&#234;t &#8212; dans le texte d'un article.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69feb8de71e7f0.75888885&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Des-usages-multiples&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Des-usages-multiples&#034; class=&#034;spip_ancre&#034;&gt;Des usages multiples&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-En-pratique&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#En-pratique&#034; class=&#034;spip_ancre&#034;&gt;En pratique&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Des-parametres-a-foison&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Des-parametres-a-foison&#034; class=&#034;spip_ancre&#034;&gt;Des param&#232;tres &#224; foison&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Un-emploi-possible-dans-les-squelettes&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Un-emploi-possible-dans-les-squelettes&#034; class=&#034;spip_ancre&#034;&gt;Un emploi possible dans les squelettes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Les-modeles-par-defaut&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Les-modeles-par-defaut&#034; class=&#034;spip_ancre&#034;&gt;Les mod&#232;les par d&#233;faut&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Quelques-conseils-pour-ecrire-un-modele&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Quelques-conseils-pour-ecrire-un-modele&#034; class=&#034;spip_ancre&#034;&gt;Quelques conseils pour &#233;crire un mod&#232;le&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Voir-aussi&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Voir-aussi&#034; class=&#034;spip_ancre&#034;&gt;Voir aussi&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Inspir&#233; des &lt;a href=&#034;http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Mod%C3%A8les&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;mod&#232;les de Wikip&#233;dia&lt;/a&gt;, le syst&#232;me des &lt;i&gt;mod&#232;les&lt;/i&gt; offre de nouvelles capacit&#233;s aux webmestres et aux r&#233;dacteurs.&lt;/p&gt;
&lt;p&gt;Les mod&#232;les sont une extension des classiques raccourcis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1&gt;&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;doc1&gt;&lt;/code&gt;. Ceux-ci correspondent d&#233;sormais aux mod&#232;les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/plugins-dist/medias/modeles/img.html&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/plugins-dist/medias/modeles/doc.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Leur syntaxe a &#233;t&#233; &#233;tendue, et il est possible de sp&#233;cifier, outre l'alignement (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1|left&gt;&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1|right&gt;&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1|center&gt;&lt;/code&gt;), une classe plus g&#233;n&#233;rique, qui soit correspond &#224; un squelette pr&#233;cis, s'il existe, soit &#224; une classe CSS (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img1|classe&gt;&lt;/code&gt; ira chercher le modele &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/img_classe.html&lt;/code&gt;, si ce fichier existe, sinon utilisera le mod&#232;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/img.html&lt;/code&gt;, mais avec un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class=&#034;classe&#034;&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Mais les mod&#232;les ne se limitent pas aux images et documents ; il est ainsi possible de cr&#233;er de nouveaux raccourcis de la forme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele1&gt;&lt;/code&gt;, simplement en ajoutant un squelette dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/&lt;/code&gt; de son dossier de squelettes !&lt;br class='autobr' /&gt;
On prendra soin de nommer son fichier en &lt;strong&gt;lettres minuscules&lt;/strong&gt; (&#171; bas de casse &#187;). Pour &#233;viter les diff&#233;renciations sur certains syst&#232;mes serveur entre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;le_fichier01.html&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Le_Fichier01.html&lt;/code&gt;, SPIP ne recherchera &lt;strong&gt;que&lt;/strong&gt; des fichiers nomm&#233;s en minuscules.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;En l'absence de tout mod&#232;le correspondant au raccourci indiqu&#233; (par exemple, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;breve1&gt;&lt;/code&gt;), le gestionnaire de mod&#232;le de SPIP regarde s'il conna&#238;t l'objet demand&#233; (ici, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;breve&lt;/code&gt;), et si ce dernier a une URL.&lt;/p&gt;
&lt;p&gt;&lt;tt&gt;&lt;breve1&gt;&lt;/tt&gt; Dans ce cas (v&#233;rifi&#233; ici, car les br&#232;ves sont connues du syst&#232;me et disposent d'une fonction d'URL), SPIP remplace le raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;breve1&gt;&lt;/code&gt; par un petit encadr&#233; flottant, avec un lien vers la br&#232;ve, et l'affichage de son titre, comme si l'on avait indiqu&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[-&gt;breve1]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si l'objet n'est pas connu, SPIP laisse le raccourci intact, pour qu'il soit &#233;ventuellement trait&#233; par la suite (par un plugin ou un filtre suppl&#233;mentaire), ou tout simplement ignor&#233;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il est par ailleurs possible de passer des param&#232;tres suppl&#233;mentaires aux mod&#232;les. La syntaxe en est g&#233;n&#233;ralis&#233;e et accepte m&#234;me du HTML, comme dans l'exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;son19|couleur=#ff0000 |legende=Le grand &lt;i&gt;Count Basie&lt;/i&gt; |photo=12&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;qui pourrait appeler un mod&#232;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/son.html&lt;/code&gt;, lequel exploiterait les param&#232;tres pour afficher la photo num&#233;ro 12, dans un cadre de couleur #ff0000, avec une l&#233;gende comportant des mots en italique.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Des-usages-multiples&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Des-usages-multiples'&gt;Des usages multiples&lt;a class='sommaire-back sommaire-back-7' href='#s-Des-usages-multiples' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;- &lt;strong&gt;Changer l'aspect des raccourcis de documents.&lt;/strong&gt; Il suffit de recopier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugins-dist/medias/modeles/img.html&lt;/code&gt; dans un sous-r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/&lt;/code&gt; de son r&#233;pertoire de squelettes, et de modifier ce fichier. Idem pour les raccourcis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;doc1&gt;&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;emb1&gt;&lt;/code&gt;, bien que ce dernier soit d'une complexit&#233; qui peut rebuter...&lt;br class='autobr' /&gt;
&lt;i&gt;Attention : &lt;/i&gt; ne vous lancez pas dans la modification des mod&#232;les pour des modifications mineures du rendu de ces raccourcis &#8212; il est souvent plus facile de modifier les styles spip_documents_xx &#224; partir des fichiers CSS de votre site.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Afficher un tableau CSV (Excel)&lt;/strong&gt;. Il suffit de charger le fichier, puis de l'appeler avec ainsi &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;emb12&gt;&lt;/code&gt; pour afficher les donn&#233;es du fichier CSV sous forme de tableau HTML !&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Associer un site &#224; un article.&lt;/strong&gt; En ajoutant dans ses squelettes un mod&#232;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/site_box.html&lt;/code&gt;, on cr&#233;e imm&#233;diatement un nouveau raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;site1|box&gt;&lt;/code&gt;. On &#233;crit alors le mod&#232;le (avec des boucles classiques) de mani&#232;re &#224; lui faire afficher le nom du site, suivi de liens vers les 3 derniers articles syndiqu&#233;s, dans une bo&#238;te flottant sur la droite, et voici une infobox facile &#224; placer dans un article. Un param&#232;tre pourrait indiquer le nombre d'articles &#224; afficher, la pr&#233;sence ou non de r&#233;sum&#233;s, etc.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Afficher une image timbr&#233;e.&lt;/strong&gt; Une fois qu'on sait faire un squelette qui affiche une photo sous forme de timbre-poste (voir &lt;a href=&#034;https://www.paris-beyrouth.org/Un-site-dument-timbre&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Un site d&#251;ment timbr&#233;&lt;/a&gt;), il suffit de le nommer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/timbre.html&lt;/code&gt; pour cr&#233;er le raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;timbre12&gt;&lt;/code&gt;. Avec, pourquoi pas, des param&#232;tres de taille, de couleur, de choix du tampon, etc&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Si l'on pr&#233;f&#232;re que le raccourci s'appelle , on nommera le mod&#232;le .&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Bien entendu on peut imaginer de la m&#234;me fa&#231;on des mod&#232;les affichant les images en s&#233;pia, en version r&#233;duite, etc. Gageons que tout cela sera rapidement disponible sous forme de plugins.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Cr&#233;er un article composite.&lt;/strong&gt; Supposons qu'on ait besoin d'un article compos&#233; du &#171; chapo &#187; de l'article 1 et du texte de l'article 2. Rien de plus simple : on cr&#233;e deux mod&#232;les, qui renvoient tout simplement, pour l'un, le chapo de l'article demand&#233;, pour l'autre son texte, et dans notre article composite on indique, dans le champ chapo : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|chapo&gt;&lt;/code&gt;, et dans le champ texte : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article2|texte&gt;&lt;/code&gt;. On peut y ajouter filtres, balises et bidouilles &#224; volont&#233;...&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Installer un article dans plusieurs rubriques.&lt;/strong&gt; En programmant des mod&#232;les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|chapo&gt;&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|texte&gt;&lt;/code&gt; etc, il devient envisageable de mettre une copie d'un article dans un autre article, sans dupliquer les donn&#233;es. On obtient ainsi un article &#171; fant&#244;me &#187; qu'on peut installer dans une nouvelle rubrique (avec, en plus, la possibilit&#233; de le titrer diff&#233;rement ou de lui ajouter des &#233;l&#233;ments).&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Faire un sondage.&lt;/strong&gt; Le plugin &lt;a href=&#034;https://contrib.spip.net/Formidable-le-generateur-de-formulaires&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Formidable&lt;/a&gt;, qui permet de cr&#233;er des formulaires et de les exploiter dans des articles avec le raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;formulaire|formidable|id=34&gt;&lt;/code&gt;, a &#233;t&#233; r&#233;&#233;crit &#224; partir des mod&#232;les.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Afficher une citation al&#233;atoire.&lt;/strong&gt; Si on a mis des citations dans ses br&#232;ves, un raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;citation|aleatoire&gt;&lt;/code&gt; peut en extraire une au hasard (crit&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{par hasard}{0,1}&lt;/code&gt; sur une boucle de br&#232;ves), et l'afficher dans un encadr&#233; flottant &#224; c&#244;t&#233; du paragraphe courant.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Ins&#233;rer un document dans une autre langue&lt;/strong&gt; que la langue de l'article. Les mod&#232;les fonctionnant comme des inclusions, le param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lang=xx&lt;/code&gt; y est toujours disponible. Si l'un de vos documents est bilingue (par exemple avec un &#171; bloc multi &#187; dans le descriptif), vous pouvez afficher le descriptif en esp&#233;ranto, dans un article en japonais, en appelant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;doc1|left|lang=eo&gt;&lt;/code&gt;. Si le squelette du mod&#232;le contient des cha&#238;nes de langue, elles seront interpr&#233;t&#233;es, le cas &#233;ch&#233;ant, dans la langue pass&#233;e en param&#232;tre.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Afficher un graphique.&lt;/strong&gt; On passe une table de donn&#233;es au mod&#232;le, qui se d&#233;brouille ensuite pour cr&#233;er le graphique et l'ins&#233;rer dans le flux de texte.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;Un intertitre sous forme d'image.&lt;/strong&gt; Pourquoi ne pas envisager un raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;imagetypo|texte=Mon intertitre&gt;&lt;/code&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;simple&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;En-pratique&#034;&gt;&lt;h2 class=&#034;h2&#034; id='En-pratique'&gt;En pratique&lt;a class='sommaire-back sommaire-back-7' href='#s-En-pratique' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pour &#233;viter toute collision avec les balises HTML, &lt;strong&gt;un mod&#232;le ne peut pas &#234;tre appel&#233; par&lt;/strong&gt; un raccourci comme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele&gt;&lt;/code&gt; !&lt;/p&gt;
&lt;p&gt;Pour appeler un mod&#232;le simple sans param&#232;tre il faut n&#233;cessairement :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit lui affecter un &lt;strong&gt;identifiant num&#233;rique&lt;/strong&gt; : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;le_modele&lt;/code&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&gt;&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; soit faire suivre son nom d'un &lt;strong&gt;pipe&lt;/strong&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|&lt;/code&gt; : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;le_modele&lt;/code&gt;&lt;strong&gt;|&lt;/strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&gt;&lt;/code&gt;)&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Dans le premier cas, l'identifiant pass&#233; sera r&#233;cup&#233;rable &#224; l'int&#233;rieur du squelette &lt;i&gt;le_modele.html&lt;/i&gt; avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id}&lt;/code&gt; ou encore &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id_le_modele}&lt;/code&gt; (qui vaudront donc &#171; 1 &#187; dans notre exemple) ;&lt;/p&gt;
&lt;p&gt;Dans le second cas &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id}&lt;/code&gt; comme &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id_le_modele}&lt;/code&gt; vaudront respectivement &#171; 0 &#187; (z&#233;ro).&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Des-parametres-a-foison&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Des-parametres-a-foison'&gt;Des param&#232;tres &#224; foison&lt;a class='sommaire-back sommaire-back-7' href='#s-Des-parametres-a-foison' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La syntaxe des raccourcis de mod&#232;les est de la forme&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele12&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele|parametre1=valeur|parametre2=valeur&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;modele12|&lt;/code&gt;&lt;i&gt;filtre&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|parametre1=valeur&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les param&#232;tres peuvent &#234;tre compos&#233;s de HTML et de raccourcis SPIP (&#224; condition, bien s&#251;r, que les mod&#232;les appel&#233;s aient pr&#233;vu de les traiter).&lt;/p&gt;
&lt;p&gt;Les param&#232;tres peuvent s'&#233;tendre sur plusieurs lignes, ce qui permet l'&#233;criture relativement a&#233;r&#233;e :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;modele 10 |pays=Allemagne |population=82000000 |superficie=357027 |classement=63 |hymne=&lt;i&gt;Das Lied der Deutschen&lt;/i&gt; |url=http://fr.wikipedia.org/wiki/Allemagne &gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le squelette r&#233;cup&#232;re tous ces param&#232;tres dans la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt;, ainsi &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{population}&lt;/code&gt; vaut 82000000. Cette balise &#233;tant s&#233;curis&#233;e contre toute injection de javascript, si on veut permettre du HTML dans un param&#232;tre, il convient d'utiliser la notation &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV*{hymne}&lt;/code&gt; ; si l'on veut en plus appliquer la typographie de SPIP, on peut employer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#ENV*{hymne}|typo)]&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#ENV*{hymne}|propre)]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le param&#232;tre principal (ici, 10), est pass&#233; sous deux formes : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id}=10&lt;/code&gt;, et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id_modele}=10&lt;/code&gt;. Ce qui permet d'acc&#233;der, pour un mod&#232;le appel&#233; par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article3|chapo&gt;&lt;/code&gt;, au chapo de l'article 3 en faisant :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_a(ARTICLES){id_article}&gt;#CHAPO&lt;/BOUCLE_a&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou bien aux br&#232;ves li&#233;es au mot-cl&#233; num&#233;ro 3, par ;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_b(BREVES){id_mot=#ENV{id}}&gt;#TITRE&lt;/BOUCLE_b&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme on le voit, chaque mod&#232;le devra avoir sa propre documentation, car le raccourci n'indique rien en lui-m&#234;me sur l'exploitation faite des &#233;l&#233;ments pass&#233;s par le raccourci.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;squelettes&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Un-emploi-possible-dans-les-squelettes&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Un-emploi-possible-dans-les-squelettes'&gt;Un emploi possible dans les squelettes&lt;a class='sommaire-back sommaire-back-7' href='#s-Un-emploi-possible-dans-les-squelettes' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Les mod&#232;les ne sont pas limit&#233;s &#224; des raccourcis dans les articles. Il est possible de les appeler depuis un squelette, en utilisant la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#MODELE{modele}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#MODELE{modele, p1=truc, p2=chose, p3=etc}|filtre...)] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note : c'est &#233;quivalent &#224; une inclusion (statique) de squelette &#233;galement permise par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#INCLURE&lt;/code&gt;. Cet inclusion &#233;tant statique (= stock&#233;e en cache) on veillera &#224; ne pas mettre d'&#233;l&#233;ments dynamiques dans un mod&#232;le, en particulier pas de balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#FORMULAIRE_XYZ&lt;/code&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Les-modeles-par-defaut&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Les-modeles-par-defaut'&gt;Les mod&#232;les par d&#233;faut&lt;a class='sommaire-back sommaire-back-7' href='#s-Les-modeles-par-defaut' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SPIP est livr&#233; avec les mod&#232;les suivants :&lt;/p&gt;
&lt;p&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;img&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;doc&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;emb&lt;/code&gt;,&lt;/p&gt;
&lt;p&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;article_mots&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;article_traductions&lt;/code&gt;, qui donnent respectivement la liste des mots-cl&#233;s associ&#233;s &#224; un article, et de ses traductions (raccourcis : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|mots&gt;&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|traductions&gt;&lt;/code&gt;, mais ces mod&#232;les sont aussi appel&#233;s par le squelette par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dist/article.html&lt;/code&gt;) ;&lt;/p&gt;
&lt;p&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lesauteurs&lt;/code&gt;, qui d&#233;finit le produit de la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#LESAUTEURS&lt;/code&gt;, mais ne peut pas &#234;tre appel&#233; comme un raccourci ;&lt;/p&gt;
&lt;p&gt;- et une s&#233;rie de mod&#232;les de pagination (voir &lt;a href='https://www.spip.net/fr_article3367.html' class=&#034;spip_in&#034;&gt;Le syst&#232;me de pagination&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les formulaires&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il est &#233;galement possible d'appeler les formulaires en tant que mod&#232;les ins&#233;r&#233;s dans un contenu &#233;ditorial.&lt;/p&gt;
&lt;p&gt;Exemple :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;formulaire|login&gt;&lt;/code&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Quelques-conseils-pour-ecrire-un-modele&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Quelques-conseils-pour-ecrire-un-modele'&gt;Quelques conseils pour &#233;crire un mod&#232;le&lt;a class='sommaire-back sommaire-back-7' href='#s-Quelques-conseils-pour-ecrire-un-modele' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Il est conseill&#233; de commencer par r&#233;fl&#233;chir &#224; la syntaxe que l'on veut adopter : ce mod&#232;le est-il li&#233; &#224; un article pr&#233;cis ? Si oui, on partira sur un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|xxx&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Une fois cette syntaxe &#233;tablie, on cr&#233;e le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/article_xxx.html&lt;/code&gt;, et on y entre simplement la balise suivante : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt;. Puis, dans un article de test, on tape notre raccourci &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|xxx|param=x...&gt;&lt;/code&gt; ; on voit alors (sous une forme un peu cryptique, il s'agit d'un tableau s&#233;rialis&#233;) l'environnement tel qu'il est pass&#233; au mod&#232;le. On peut par exemple y distinguer notre identifiant d'article (sous le nom &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id}&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{id_article}&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Ensuite on peut commencer &#224; entrer le squelette de notre fragment de page :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_x(ARTICLES){id_article}&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;BOUCLE_x(ARTICLES){id_article=#ENV{id}}&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;. Et c'est parti...&lt;/p&gt;
&lt;p&gt;Pour que notre mod&#232;le soit complet, il faut essayer les syntaxes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;article1|xxx|left&gt;&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[&lt;article1|xxx&gt;-&gt;www.spip.net]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans le premier cas, c'est le param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;align=left&lt;/code&gt; qui est pass&#233; au mod&#232;le (et il est souhaitable que le mod&#232;le s'aligne alors du c&#244;t&#233; demand&#233;).&lt;/p&gt;
&lt;p&gt;Dans le second cas, le lien est pass&#233; dans un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lien=http://www.spip.net&lt;/code&gt;, et la classe du lien dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lien_class=spip_out&lt;/code&gt;. Il est recommand&#233; de prendre en compte l'url demand&#233;e, en la transformant en lien, quelque part dans le mod&#232;le (par exemple sur le titre ou l'icone) ; dans ce cas, il &lt;i&gt;faut&lt;/i&gt; ajouter dans la premi&#232;re balise HTML du mod&#232;le une &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;class=&#034;spip_lien_ok&#034;&lt;/code&gt;, qui signalera au gestionnaire de mod&#232;le que le lien a &#233;t&#233; pris en compte (faute de quoi le gestionnaire ajoutera un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a href=...&gt;...&lt;/a&gt;&lt;/code&gt; autour du mod&#232;le produit.&lt;/p&gt;
&lt;p&gt;En ce qui concerne les param&#232;tres, la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{x}&lt;/code&gt; a &#233;t&#233; con&#231;ue de mani&#232;re &#224; &#233;viter toute injection de HTML ou de javascript non d&#233;sir&#233;e. Dans un mod&#232;le, on peut souhaiter autoriser le HTML dans les param&#232;tres : il faut alors utiliser &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV*{x}&lt;/code&gt; pour r&#233;cup&#233;rer les donn&#233;es, et &#233;ventuellement les filtrer par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|propre&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|typo&lt;/code&gt;, selon le type de donn&#233;es (texte pouvant comporter plusieurs paragraphes, ou simple ligne de texte).&lt;/p&gt;
&lt;p&gt;Sur le plan de la programmation, il est recommand&#233; de concevoir ses mod&#232;les tout en boucles, sans aucun code php ni balise dynamique. A noter toutefois : dans un mod&#232;le comportant du php, c'est le r&#233;sultat du calcul qui est mis en cache, et non le script lui-m&#234;me (comme c'est le cas avec les squelettes).&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Voir-aussi&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Voir-aussi'&gt;Voir aussi&lt;a class='sommaire-back sommaire-back-7' href='#s-Voir-aussi' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article1828.html' class=&#034;spip_in&#034;&gt;&lt;INCLURE&gt; d'autres squelettes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; La balise &lt;a href='https://www.spip.net/fr_article4014.html' class=&#034;spip_in&#034;&gt;#ENV&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Lors du d&#233;ploiement de SPIP 4.0, un gros travail a &#233;t&#233; fait sur les documents et logos. Retrouver les explications d&#233;taill&#233;es des changements ici :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.spip.net/fr_article6428.html#documents' class=&#034;spip_in&#034;&gt;la refonte des documents dans l'annonce de la release de SPIP 4.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://git.spip.net/spip/medias/-/commit/fa13018a9ef63c633e78da253106867d6bac8a78&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le commit PHP qui introduit et documente cette refonte des mod&#232;les de document&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Si l'on pr&#233;f&#232;re que le raccourci s'appelle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img12|timbre&gt;&lt;/code&gt;, on nommera le mod&#232;le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/img_timbre.html&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

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


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

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


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

/ 
&lt;a href="https://www.spip.net/@debut_" rel="tag"&gt;debut_...&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@self" rel="tag"&gt;#SELF&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@total_boucle" rel="tag"&gt;#TOTAL_BOUCLE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@pagination" rel="tag"&gt;#PAGINATION&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@pagination" rel="tag"&gt;pagination&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@grand_total" rel="tag"&gt;#GRAND_TOTAL&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@ancre_pagination" rel="tag"&gt;#ANCRE_PAGINATION&lt;/a&gt;

		</description>


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


		

	</item>
<item xml:lang="fr">
		<title>La syndication de contenus</title>
		<link>https://www.spip.net/fr_article3376.html</link>
		<guid isPermaLink="true">https://www.spip.net/fr_article3376.html</guid>
		<dc:date>2006-07-01T01:48:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Fil</dc:creator>


		<dc:subject>#SOURCE</dc:subject>
		<dc:subject>#URL_SOURCE</dc:subject>
		<dc:subject>#TAGS</dc:subject>
		<dc:subject>afficher_tags</dc:subject>
		<dc:subject>afficher_enclosures</dc:subject>
		<dc:subject>extraire_balise</dc:subject>
		<dc:subject>tags2dcsubject</dc:subject>
		<dc:subject>microformat2enclosure</dc:subject>
		<dc:subject>enclosure2microformat</dc:subject>
		<dc:subject>safehtml</dc:subject>
		<dc:subject>extraire_attribut</dc:subject>
		<dc:subject>$GLOBALS['controler_dates_rss']</dc:subject>

		<description>
&lt;p&gt;Le syst&#232;me de syndication (voir l'article &#171; Les fichiers backend &#187;) s'enrichit : il est d&#233;sormais possible d'&#233;changer l'adresse des documents joints aux articles (podcasting), de transporter d'un site &#224; l'autre les mots-cl&#233;s (tags) associ&#233;s aux articles ainsi que leur rubrique (ou cat&#233;gorie). On peut aussi, si on le d&#233;sire, syndiquer le contenu int&#233;gral des articles. &lt;br class='autobr' /&gt; Dans tout ce qui suit, on consid&#232;re que le flux de syndication offert par le site source est suffisamment riche pour avoir (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://www.spip.net/@source" rel="tag"&gt;#SOURCE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@url_source" rel="tag"&gt;#URL_SOURCE&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@tags" rel="tag"&gt;#TAGS&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@afficher_tags" rel="tag"&gt;afficher_tags&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@afficher_enclosures" rel="tag"&gt;afficher_enclosures&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@extraire_balise" rel="tag"&gt;extraire_balise&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@tags2dcsubject" rel="tag"&gt;tags2dcsubject&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@microformat2enclosure" rel="tag"&gt;microformat2enclosure&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@enclosure2microformat" rel="tag"&gt;enclosure2microformat&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@safehtml" rel="tag"&gt;safehtml&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@extraire_attribut" rel="tag"&gt;extraire_attribut&lt;/a&gt;, 
&lt;a href="https://www.spip.net/@globalscontroler_dates_rss" rel="tag"&gt;$GLOBALS['controler_dates_rss']&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le syst&#232;me de syndication (voir l'article &#171; &lt;a href='https://www.spip.net/fr_article2389.html' class=&#034;spip_in&#034;&gt;Les fichiers backend&lt;/a&gt; &#187;) s'enrichit : il est d&#233;sormais possible d'&#233;changer l'adresse des documents joints aux articles (&lt;i&gt;podcasting&lt;/i&gt;), de transporter d'un site &#224; l'autre les mots-cl&#233;s (&lt;i&gt;tags&lt;/i&gt;) associ&#233;s aux articles ainsi que leur rubrique (ou &lt;i&gt;cat&#233;gorie&lt;/i&gt;). On peut aussi, si on le d&#233;sire, syndiquer le &lt;i&gt;contenu int&#233;gral&lt;/i&gt; des articles.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-6&#034; id=&#034;nav69feb8de7a4df4.27370018&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Referencement-rapide-du-site&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Referencement-rapide-du-site&#034; class=&#034;spip_ancre&#034;&gt;R&#233;f&#233;rencement rapide du site&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Decider-ce-que-l-on-veut-emettre&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Decider-ce-que-l-on-veut-emettre&#034; class=&#034;spip_ancre&#034;&gt;D&#233;cider ce que l'on veut &#233;mettre&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Decider-ce-que-l-on-veut-recuperer&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Decider-ce-que-l-on-veut-recuperer&#034; class=&#034;spip_ancre&#034;&gt;D&#233;cider ce que l'on veut r&#233;cup&#233;rer&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Decider-ce-que-l-on-veut-afficher&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Decider-ce-que-l-on-veut-afficher&#034; class=&#034;spip_ancre&#034;&gt;D&#233;cider ce que l'on veut afficher&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Manipuler-le-contenu-HTML-des-articles-syndiques&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Manipuler-le-contenu-HTML-des-articles-syndiques&#034; class=&#034;spip_ancre&#034;&gt;Manipuler le contenu HTML des articles syndiqu&#233;s&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-References&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#References&#034; class=&#034;spip_ancre&#034;&gt;R&#233;f&#233;rences&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Dans tout ce qui suit, on consid&#232;re que le flux de syndication offert par le site source est suffisamment riche pour avoir pr&#233;vu toutes les possibilit&#233;s qu'offre notamment le squelette &lt;i&gt;dist/backend.html&lt;/i&gt; de SPIP.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Referencement-rapide-du-site&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Referencement-rapide-du-site'&gt;R&#233;f&#233;rencement rapide du site&lt;a class='sommaire-back sommaire-back-6' href='#s-Referencement-rapide-du-site' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On rep&#232;re d'abord sur le site source l'URL de son flux de syndication au format &lt;abbr title=&#034;Really Simple Syndication&#034; lang=&#034;en&#034;&gt;RSS&lt;/abbr&gt; (ou Atom). Selon les cas, cette adresse est indiqu&#233;e directement sur la page, et/ou est &#171; d&#233;couverte &#187; automatiquement par le navigateur, qui affiche alors une ic&#244;ne caract&#233;ristique. Si les squelettes du site source le pr&#233;voient, SPIP peut aussi d&#233;couvrir cette adresse de syndication, et il suffit d'indiquer l'adresse du site pour se voir proposer de le syndiquer.&lt;/p&gt;
&lt;p&gt;Une fois la syndication activ&#233;e, les articles pr&#233;sents dans le flux de syndication du site source sont repris sur le site r&#233;cepteur.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Decider-ce-que-l-on-veut-emettre&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Decider-ce-que-l-on-veut-emettre'&gt;D&#233;cider ce que l'on veut &#233;mettre&lt;a class='sommaire-back sommaire-back-6' href='#s-Decider-ce-que-l-on-veut-emettre' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Le webmestre du site source peut d&#233;cider de ce qu'il met dans son flux RSS : ce choix peut bien &#233;videmment se faire en modifiant le squelette &lt;i&gt;dist/backend.html&lt;/i&gt;, ou en s'en inspirant pour cr&#233;er un nouveau flux.&lt;/p&gt;
&lt;p&gt;Mais la page de configuration dans l'espace priv&#233; propose une option tr&#232;s importante pour la syndication : elle permet de d&#233;cider si le flux RSS du site comportera l'int&#233;gralit&#233; du contenu des articles, au format HTML, ou seulement un petit r&#233;sum&#233; (au format texte). Dans le premier cas (qui est la configuration par d&#233;faut du syst&#232;me), les articles r&#233;cents du site sont enti&#232;rement lisibles avec un lecteur RSS : ils sont aussi enti&#232;rement &#171; recopiables &#187; d'un site &#224; l'autre. Cela permet par exemple de r&#233;aliser automatiquement des sites miroirs, ou des sites compos&#233;s d'un contenu produit sur d'autres sites.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Decider-ce-que-l-on-veut-recuperer&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Decider-ce-que-l-on-veut-recuperer'&gt;D&#233;cider ce que l'on veut r&#233;cup&#233;rer&lt;a class='sommaire-back sommaire-back-6' href='#s-Decider-ce-que-l-on-veut-recuperer' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Si le site source ne diffuse pas son contenu int&#233;gral, il est bien &#233;vident que la syndication ne pourra pas en r&#233;cup&#233;rer plus. Mais dans le cas d'une diffusion int&#233;grale, SPIP peut r&#233;cup&#233;rer ce contenu HTML et l'afficher, images comprises.&lt;/p&gt;
&lt;p&gt;Site par site, on peut choisir ce que l'on veut r&#233;cup&#233;rer par la syndication : le contenu HTML des articles (issu de l'entr&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;content&gt;&lt;/code&gt; du flux RSS, si elle y est pr&#233;sente) ou un simple r&#233;sum&#233; au format texte (trouv&#233; dans l'entr&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;description&gt;&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;summary&gt;&lt;/code&gt; du flux rss).&lt;/p&gt;
&lt;p&gt;On peut &#233;galement d&#233;cider de ce que l'on fait des articles qui disparaissent des flux (qui sont en g&#233;n&#233;ral limit&#233;s aux 15 articles les plus r&#233;cents du site) : on peut d&#233;cider que SPIP les &#233;limine de la base de donn&#233;es (apr&#232;s une p&#233;riode de deux mois), et/ou les passe imm&#233;diatement en mode &#171; refus&#233; &#187;. Ces derni&#232;res options permettent par exemple de g&#233;rer un portail sur des flux tr&#232;s rapides (agences de presse, tags tr&#232;s populaires de sites de photographie, etc) ; ou encore de maintenir un miroir fid&#232;le d'un site (en &#233;liminant les articles qui seraient d&#233;publi&#233;s).&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;controler_dates_rss&#034;&gt;&lt;/a&gt;SPIP consid&#232;re que si la date d'un &#233;l&#233;ment de flux RSS est &#171; tr&#232;s vieux &#187; (plus d'un an) ou trop loin dans le futur (plus de 48 heures), c'est qu'il s'agit probablement d'une erreur. Il inscrit donc la date du jour &#224; la place de celle qu'il a trouv&#233;. On pourrait avoir besoin, cependant, de syndiquer des informations qui, &#224; dessein, fournissent une date situ&#233;e &#224; plus de 2 jours dans le futur. Par exemple, on peut se servir de fils RSS pour annoncer des &#233;v&#232;nements qui auront lieu dans le futur.&lt;/p&gt;
&lt;p&gt;Pour syndiquer ses rendez-vous via le flux RSS d&#233;di&#233;, une variable de personnalisation nomm&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$controler_dates_rss&lt;/code&gt;, qui vaut vrai par d&#233;faut.&lt;/p&gt;
&lt;p&gt;Pour cela, dans votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config/mes_options.php&lt;/code&gt;, ajouter la ligne&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;php&#034; class='spip_code spip_code_block language-php' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$GLOBALS['controler_dates_rss'] = false; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;le test n'est plus effectu&#233; et les dates du futur, ou du &#171; lointain &#187; pass&#233;, seront bien prises en compte.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Decider-ce-que-l-on-veut-afficher&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Decider-ce-que-l-on-veut-afficher'&gt;D&#233;cider ce que l'on veut afficher&lt;a class='sommaire-back sommaire-back-6' href='#s-Decider-ce-que-l-on-veut-afficher' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;La &lt;a href='https://www.spip.net/fr_article910.html' class=&#034;spip_in&#034;&gt;boucle SITES&lt;/a&gt; permet de parcourir les sites syndiqu&#233;s, tandis que la &lt;a href='https://www.spip.net/fr_article911.html' class=&#034;spip_in&#034;&gt;boucle SYNDIC_ARTICLES&lt;/a&gt; permet de r&#233;cup&#233;rer les champs descriptifs des articles fournis par l'un des sites syndiqu&#233;s&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;la &lt;i&gt;source&lt;/i&gt; : &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;De mani&#232;re habituelle, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#NOM_SITE&lt;/code&gt; repr&#233;sente le nom du site syndiqu&#233;, qui est donc la &#171; source &#187; de l'article. Cependant avec le d&#233;veloppement des agr&#233;gateurs de contenu (les portails par exemple), la v&#233;ritable source de l'article peut &#234;tre un autre site. Le format RSS a pr&#233;vu ce cas en d&#233;finissant un champ &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;source&gt;&lt;/code&gt; indiquant la v&#233;ritable source de l'article. Le moteur de syndication de SPIP r&#233;cup&#232;re ces donn&#233;es quand elles sont pr&#233;sentes, et les balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#SOURCE&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#URL_SOURCE&lt;/code&gt; permettent d'afficher respectivement le nom et l'adresse de la source.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;les &lt;i&gt;tags&lt;/i&gt; : &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si les mots-cl&#233;s affect&#233;s aux articles sont correctement renseign&#233;s dans le flux RSS, ils sont r&#233;cup&#233;r&#233;s par le site r&#233;cepteur ; ils n'arrivent pas individuellement dans la table des mots-cl&#233;s, mais sont stock&#233;s en vrac dans le champ &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tags&lt;/code&gt; de la table &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_syndic_articles&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si le flux de syndication utilise la notation standard &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;dc:subject&gt;Tag&lt;/dc:subject&gt;&lt;/code&gt;, le tag est not&#233; tel quel. SPIP pousse cette notion un peu plus loin en transmettant aussi l'adresse de la page du mot-cl&#233;, gr&#226;ce aux microformats. Le tag est alors r&#233;cup&#233;r&#233; avec son lien, sous la forme :&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a rel=&#034;tag&#034; href=&#034;adresse de la page du mot-cl&#233;&#034;&gt;Mot-cl&#233;&lt;/a&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sur le site destinataire, ces tags sont affich&#233;s dans l'espace priv&#233; sous le descriptif de l'article, et sont affichables sur le site public gr&#226;ce &#224; la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TAGS&lt;/code&gt; (on verra plus loin comment la filtrer pour faire un affichage s&#233;lectif des tags).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Note :&lt;/i&gt; SPIP pr&#233;voit une gestion sp&#233;cifique des tags en provenance du site &lt;a href=&#034;https://www.flickr.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;flickr&lt;/a&gt; (photographie) de mani&#232;re &#224; pouvoir leur attribuer un URL qui n'est pas pr&#233;vu dans son flux RSS.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;la rubrique :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans de nombreuses applications (syst&#232;mes de blogs, r&#233;pertoire de liens...) la cat&#233;gorie (ou encore &lt;i&gt;directory&lt;/i&gt;) d'un article est l'&#233;quivalent de ce que SPIP appelle la &lt;i&gt;rubrique&lt;/i&gt;. Il &#233;tait donc naturel d'utiliser la notion RSS standard de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;category&gt;...&lt;/category&gt;&lt;/code&gt; pour faire conna&#238;tre l'appartenance de notre article &#224; telle ou telle rubrique.&lt;/p&gt;
&lt;p&gt;De m&#234;me qu'avec les tags, SPIP r&#233;cup&#232;re cette information et l'affiche via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TAGS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;- &lt;strong&gt;les documents joints :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les documents qui, dans l'espace priv&#233;, figurent en bas de la page de visualisation d'un article, soit dans la section &#171; Documents &#187; soit, pour les images, dans la section &#171; Portfolio &#187;, sont eux aussi transmis dans le flux RSS, en utilisant la notion &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;enclosure ... /&gt;&lt;/code&gt;. C'est ce qu'on appelle le &lt;i&gt;podcasting&lt;/i&gt;, d&#233;sormais une fonction standard de SPIP&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Attention les fichiers eux-m&#234;mes ne sont pas recopi&#233;s : seules leur URL et (&#8230;)&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;L'information sur les &lt;i&gt;enclosures&lt;/i&gt; est elle aussi r&#233;cup&#233;r&#233;e dans la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TAGS&lt;/code&gt;, mais elle est affich&#233;e de fa&#231;on diff&#233;renci&#233;e dans l'espace priv&#233;e, sous forme d'un petit trombone pour chaque fichier.&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;TAGS&#034;&gt;&lt;/a&gt;&lt;strong&gt;Utiliser la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TAGS&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comme on l'a vu ci-dessus, la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#TAGS&lt;/code&gt; affiche en vrac les liens vers les mots-cl&#233;s, la rubrique et les documents joints. Mais par la gr&#226;ce des microformats, les liens vers chacun de ces concepts sont &#171; marqu&#233;s &#187; de la fa&#231;on suivante :
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a rel=&#034;tag&#034; ...&gt;&lt;/code&gt; pour les tags/mots-cl&#233;s
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a rel=&#034;directory&#034; ...&gt;&lt;/code&gt; pour la rubrique/cat&#233;gorie
&lt;br /&gt;- &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;a rel=&#034;enclosure&#034; ...&gt;&lt;/code&gt; pour les documents joints/podcast&lt;/p&gt;
&lt;p&gt;Si l'on veut n'afficher que l'un de ces types de tags, on utilisera le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;afficher_tags&lt;/code&gt; en pr&#233;cisant le type souhait&#233; en argument :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TAGS|afficher_tags{directory})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TAGS|afficher_tags{tag})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TAGS|afficher_tags{enclosure})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par d&#233;faut &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TAGS|afficher_tags)]&lt;/code&gt; est &#233;quivalent &#224; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TAGS|afficher_tags{'tag,directory'})]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour les documents joints, le filtre sp&#233;cifique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;afficher_enclosures&lt;/code&gt; permet d'afficher les trombones plut&#244;t que des liens classiques :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#TAGS|afficher_enclosures)] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;Manipuler-le-contenu-HTML-des-articles-syndiques&#034;&gt;&lt;h2 class=&#034;h2&#034; id='Manipuler-le-contenu-HTML-des-articles-syndiques'&gt;Manipuler le contenu HTML des articles syndiqu&#233;s&lt;a class='sommaire-back sommaire-back-6' href='#s-Manipuler-le-contenu-HTML-des-articles-syndiques' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cas pratique : notre site syndique un photoblog, qui diffuse syst&#233;matiquement un petit commentaire suivi de la photographie. Cette derni&#232;re se pr&#233;sente sous la forme d'une balise HTML &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img .../&gt;&lt;/code&gt;. Une fois ce photoblog syndiqu&#233; en version HTML compl&#232;te dans notre site, nous pouvons d&#233;cider de n'afficher que la photo, sans le commentaire. Il nous faut alors extraire la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img /&gt;&lt;/code&gt; ; cela peut se r&#233;aliser gr&#226;ce au filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;extraire_balise{xxx}&lt;/code&gt;, qui r&#233;cup&#232;re la premi&#232;re balise HTML &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;xxx /&gt;&lt;/code&gt; d'un contenu.&lt;/p&gt;
&lt;p&gt;A partir de l&#224; tout est possible :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#DESCRIPTIF|extraire_balise{img})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8230;affiche la photo ;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#DESCRIPTIF|extraire_balise{img}|extraire_attribut{src})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8230;son URL ;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#DESCRIPTIF|extraire_balise{img}|extraire_attribut{width})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#8230;sa largeur ;&lt;/p&gt;
&lt;p&gt;On peut m&#234;me en modifier le style avec, par exemple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;spip&#034; class='spip_code spip_code_block language-spip' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#DESCRIPTIF|extraire_balise{img}|inserer_attribut{style,'border: double red 4px;'})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;Remarque : les contenus HTML provenant d'un site ext&#233;rieur sont par d&#233;finition consid&#233;r&#233;s comme &#171; non contr&#244;l&#233;s &#187;, et donc potentiellement probl&#233;matiques s'ils contiennent des balises mal ferm&#233;es, ou du javascript ; SPIP leur applique donc syst&#233;matiquement le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;safehtml&lt;/code&gt; avant affichage.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a id=&#034;AutresFiltres&#034;&gt;&lt;/a&gt;&lt;strong&gt;Autres filtres li&#233;s &#224; la syndication&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ces filtres permettent de convertir les tags de syndication d'un format &#224; un autre, afin de pouvoir par exemple remettre au format RSS des &#171; tags &#187; r&#233;cup&#233;r&#233;s par syndication, et enregistr&#233;s dans notre base de donn&#233;es sous forme de microformats : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tags2dcsubject&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;enclosure2microformat&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;microformat2enclosure&lt;/code&gt;.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h2&#034; aria-labelledby=&#034;References&#034;&gt;&lt;h2 class=&#034;h2&#034; id='References'&gt;R&#233;f&#233;rences&lt;a class='sommaire-back sommaire-back-6' href='#s-References' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;- &lt;a href=&#034;http://microformats.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;microformats&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;http://microformats.org/wiki/rel-tag&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;rel=tag&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;http://microformats.org/wiki/rel-enclosure&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;rel=enclosure&lt;/a&gt;
&lt;br /&gt;- &lt;a href=&#034;http://microformats.org/wiki/rel-directory&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;rel=directory&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb4-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Attention les fichiers eux-m&#234;mes ne sont pas recopi&#233;s : seules leur URL et les donn&#233;es associ&#233;es (titre, taille, format) sont r&#233;cup&#233;r&#233;es. Par ailleurs il faut signaler, pour les puristes, qu'on prend ici quelque libert&#233; avec la norme RSS, qui interdit normalement d'avoir plusieurs &lt;i&gt;enclosures&lt;/i&gt; dans un m&#234;me article.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
