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

<channel xml:lang="fr">
	<title>La Taverne &#224; Tonton</title>
	<link>http://blog.smellup.net/</link>
	<description>&#171; Nagu&#232;re encore, au caf&#233; du Commerce, on ne jurait que par le progr&#232;s. Qu'il y ait ou n'y ait pas progr&#232;s, le progr&#232;s en tant qu'id&#233;al a un sens, et un sens louable : faire toujours mieux. Aujourd'hui l'id&#233;al du progr&#232;s est remplac&#233; par l'id&#233;al de l'innovation : il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau, m&#234;me si c'est pire qu'avant, et cela de toute &#233;vidence. Cet id&#233;al est poursuivi dans les plus petites choses comme dans les plus grandes ; il est absurde, mais le public n'a pas conscience de cette absurdit&#233;, ou, s'il en a conscience, se tait et serre les fesses, car l'innovation, en tant qu'Id&#233;e-B&#234;te, est une divinit&#233;, et comme telle effrayante. Adorez-la, ou gare ! &#187; Henry de Montherlant, Va jouer avec cette poussi&#232;re, Carnets 1958-1964</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="http://blog.smellup.net/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Evolution du site Plugins SPIP</title>
		<link>http://blog.smellup.net/spip.php?article71</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article71</guid>
		<dc:date>2013-05-24T09:37:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>Non commenc&#233;e</dc:subject>
		<dc:subject>ToDo</dc:subject>

		<description>&lt;p&gt;Liste des actions pour am&#233;liorer le site r&#233;nov&#233; des Plugins de SPIP en y rajoutant l'interface multilingue, les tickets...&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique28" rel="directory"&gt;Les todos&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot6" rel="tag"&gt;Non commenc&#233;e&lt;/a&gt;, 
&lt;a href="http://blog.smellup.net/spip.php?mot3" rel="tag"&gt;ToDo&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class='ajaxbloc' aria-live='polite' aria-atomic='true' data-ajax-env='mQXJJ1YJ6sEFqv/4caFaZTkXOxFNl9/YQqg7jDte4nURui+2uTf7OTcSAK0wnoJarFJ7AZvDgMyoSD8GVyEMxfDtEi2RQ0ii2OBVCUJV9AKGo1JjO4EMrRuNEeZFcpmR1661e0mXkQ6459s7YhVRz+QGgG6f0LQZO8/nGpcb6TQqo8VdUh3ppo5FM4Obzq1Dsr68uBaOuSWrl/lmQPH3fcw1KAW3CzGnJAuDNAo3agqVIRFncy9xQLJ1bHFwMgnoNxs6wJxUn9J2lx4sK4e3g1WH7UVWwyk1NsJ+6CFLPCPRwZf7YWn9kpcpyRKhJ/+GMBXG4xX8Q00RXsVvsnFQJwfHNkF0C+S47ERPUX7SdMatChMQJUzZRa7LnftctJJ70lODzJSCpJxSk14PWOtea9bwxq48Pqt2l6sT2VJG147K/7SrsTYN7FkWxeA1TANVyPa7H9tiF/64TbBpDZXjaQCO4oke3G7V0QeJVKNE+w==' data-origin=&quot;spip.php?page=backend&quot;&gt;&lt;table class=&quot;todolist&quot;&gt; &lt;thead&gt; &lt;tr class=&quot;row_first&quot;&gt; &lt;th class=&quot;statut&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=statut&quot; title=&quot;Trier par statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-statut-16-71df5.png&quot; alt=&quot;Statut&quot; width='16' height='16' /&gt; &lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;titre&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=titre&quot; title=&quot;Trier par titre&quot;&gt;Titre&lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;rang&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=cle&quot; title=&quot;Remettre dans l'ordre&quot;&gt;#&lt;/a&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Utiliser Tickets pour remonter les probl&#232;me du site, les actions &#224; r&#233;aliser voire les erreurs sur la pr&#233;sentation des plugins &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #1 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_even even&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Ajouter un menu des langues disponibles &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #2 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; V&#233;rifier la gestion correcte des langues dans les pages &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #3 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_even even&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Mettre en place la gestion des tags en plus des cat&#233;gories &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #4 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Revoir la pr&#233;sentation du formulaire de s&#233;lection des plugins en vedette &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #5 &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--ajaxbloc--&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mise &#224; jour des Plugins pour SPIP 3.0</title>
		<link>http://blog.smellup.net/spip.php?article70</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article70</guid>
		<dc:date>2013-05-22T13:25:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>ToDo</dc:subject>
		<dc:subject>Non commenc&#233;e</dc:subject>

		<description>&lt;p&gt;Liste des actions &#224; r&#233;aliser pour passer les plugins en SPIP 3.0 et am&#233;liorer leur fonctionnement.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique28" rel="directory"&gt;Les todos&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot3" rel="tag"&gt;ToDo&lt;/a&gt;, 
&lt;a href="http://blog.smellup.net/spip.php?mot6" rel="tag"&gt;Non commenc&#233;e&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Boussole&lt;/h3&gt;&lt;div class='ajaxbloc' aria-live='polite' aria-atomic='true' data-ajax-env='mQXJB04J6sEF451+oIQObAeH2GFxyXigtO6afr0NmtDC5Rq8jjMzk3uvxdMHJFo4yuK33pzS8OYX9pQjsUyX3DVzD3P6L9G3wzfXOTtSKFJ++CYsHWpu0EKhmPoLyQNYVKsChnny5h6IIejL9jLLOJ6eEmWjggDh1FEeUyy0i2l5yyVXKintraYVZ+Y9kof+q9vkSGcARRwwTamBK4FKNFWCUAGefacPIz5kyPiE4wnHPR9nC2FbFmQqa1rdhnpvc50FN8yl3JXlHw1AOTy3fGxccxcd9WcBqx9AxOhY4SVtRjAYxtmFw8RdTox5vN/z+YTrYalWcvsrsGsUq3kDr5I+NrBDNba6UwELrHeXJiTGO8AEmfvFqhxd4kIoSGv4WAGQ5O530jrx1ktbfjgG5xG7ytEIOiwWACGpIwe8m4Jk6sNeyZ0E8eWdN4Agq+t7f+U1U53oZbPaiUoKbJB5nBe3lnp5SmlZ3EfkamI/Fcd1SkTopU66YJ8ngd5gwf2gAZVhg7wUx7dv6/tlBqdjbFmeqSqNZ0lfuOfNCue+FYLI' data-origin=&quot;spip.php?page=backend&quot;&gt;&lt;table class=&quot;todolist&quot;&gt; &lt;thead&gt; &lt;tr class=&quot;row_first&quot;&gt; &lt;th class=&quot;statut&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=statut&quot; title=&quot;Trier par statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-statut-16-71df5.png&quot; alt=&quot;Statut&quot; width='16' height='16' /&gt; &lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;titre&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=titre&quot; title=&quot;Trier par titre&quot;&gt;Titre&lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;rang&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=cle&quot; title=&quot;Remettre dans l'ordre&quot;&gt;#&lt;/a&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Ecrire l'article &lt;a href=&quot;http://contrib.spip.net/ecrire/?exec=article&amp;id_article=4347&quot; class='spip_out' rel='external'&gt;Boussole V2, usages avanc&#233;s&lt;/a&gt; sur Contrib &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #1 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_even even&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Finir l'article &lt;a href=&quot;http://blog.smellup.net/spip.php?article68&quot; class='spip_in'&gt;R&#233;alisation de la version v2 du plugin Boussole&lt;/a&gt; &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #2 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Mise au point des erreurs retourn&#233;es par le serveur &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #3 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_even even&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; D&#233;ploiement de la version V2 du plugin Boussole sur tous les sites de la Galaxie &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #4 &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--ajaxbloc--&gt;&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;PlugOnet&lt;/h3&gt;&lt;div class='ajaxbloc' aria-live='polite' aria-atomic='true' data-ajax-env='mQZJBxZ59oCaVA1mgJ4XS69rfspGugtlDfEvDVOHi5lh56QRvd0SNw8OdrJA4TXe543/CG4rg7GkByccBe3Wo+WxXmtwzIyvDsCYb/91lIsplhywRqWycvTZXqXKTGRliRw/GDzYDZK35i/1DSDQ3rsVNTqMjb0nMHGIpnL4OgwhORoCMqOBzNxdGmSsfz+J/CH3i9JZOkstlS8Wlvswu091cmCl8Op8xTZOJRQzHciUbofvd/F3LfI2fJ+4ur3BFuE4G+0JNMwXUYBexMRKKQfUeqOBbo4pUaceqnKiBsiGR26AX1l3YkWQtJaodKfeT76tMBSY367oyP18GOmD5iyoxvB1+UOir4rXjkjAzTMM1QOOeIizxRmM1E3aFitI/g8BICIhWc5tjnU0izq8BF+TMrZ8IuFPiiLY1NO+VCpYYo9daDs=' data-origin=&quot;spip.php?page=backend&quot;&gt;&lt;table class=&quot;todolist&quot;&gt; &lt;thead&gt; &lt;tr class=&quot;row_first&quot;&gt; &lt;th class=&quot;statut&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=statut&quot; title=&quot;Trier par statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-statut-16-71df5.png&quot; alt=&quot;Statut&quot; width='16' height='16' /&gt; &lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;titre&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=titre&quot; title=&quot;Trier par titre&quot;&gt;Titre&lt;/a&gt; &lt;/th&gt; &lt;th class=&quot;rang&quot;&gt; &lt;a class=&quot;ajax&quot; href=&quot;http://blog.smellup.net/spip.php?page=backend&amp;tri_todo=cle&quot; title=&quot;Remettre dans l'ordre&quot;&gt;#&lt;/a&gt; &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Supprimer l'aide sur les balises de paquet.xml qui ne fonctionne plus et le remplacer par des items de langue ou autres &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #1 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_even even&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Modifier les onglets en les pr&#233;sentant comme LangOnet &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #2 &lt;/td&gt; &lt;/tr&gt;&lt;tr class=&quot;afaire row_odd odd&quot;&gt; &lt;td class=&quot;statut&quot;&gt; &lt;img src=&quot;http://blog.smellup.net/local/cache-vignettes/L16xH16/todo-afaire-16-25dba.png&quot; alt=&quot;&quot; title=&quot;&#192; faire&quot; width='16' height='16' /&gt; &lt;/td&gt; &lt;td class=&quot;titre&quot;&gt; Revenir sur la d&#233;sactivation de la g&#233;n&#233;ration du paquet.xml si celui-ci existe d&#233;j&#224; &lt;/td&gt; &lt;td class=&quot;rang&quot;&gt; #3 &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;!--ajaxbloc--&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#233;alisation de la version v2 du plugin Boussole</title>
		<link>http://blog.smellup.net/spip.php?article68</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article68</guid>
		<dc:date>2013-02-24T17:14:51Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>Sp&#233;cifications</dc:subject>

		<description>&lt;p&gt;Cet article d&#233;crit les principes du d&#233;veloppement de la version v2 du plugin Boussole permettant de simplifier les mises &#224; jour par les sites client.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique5" rel="directory"&gt;Boussole&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot2" rel="tag"&gt;Sp&#233;cifications&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Cr&#233;ation d'un plugin &#171; Boussole SPIP &#187;&lt;/h3&gt;
&lt;p&gt;Il suffit d'extraire du plugin Boussole v1 actuel les &#233;l&#233;ments suivants :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; les logos contenus dans le dossier &lt;code class='spip_code' dir='ltr'&gt;images/boussole/&lt;/code&gt; dans une organisation identique,&lt;/li&gt;&lt;li&gt; les items de langue d&#233;di&#233;es &#224; la boussole SPIP, &#224; savoir, le titre de la boussole et les noms, slogans et descriptions de tous les sites et groupes de sites. Ces items sont inclus dans un fichier de langue nomm&#233; &lt;code class='spip_code' dir='ltr'&gt;boussole-spip_xx.php&lt;/code&gt; et de fa&#231;on g&#233;n&#233;rale &lt;code class='spip_code' dir='ltr'&gt;boussole-${alias_boussole}_xx.php&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;En outre, il faut rapatrier le fichier XML &lt;code class='spip_code' dir='ltr'&gt;boussole_spip.xml&lt;/code&gt; inclus dans le squelette boussole.spip.org &#224; la racine du plugin Boussole SPIP en le renommant &lt;code class='spip_code' dir='ltr'&gt;boussole-spip.xml&lt;/code&gt; et de fa&#231;on g&#233;n&#233;rale &lt;code class='spip_code' dir='ltr'&gt;boussole-${alias_boussole}.xml&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Cot&#233; &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt; il parait plus appropri&#233; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; de conserver le slogan du plugin Boussole v1 pour cette boussole&lt;/li&gt;&lt;li&gt; de fixer la version du plugin &#224; celle de la boussole et donc de la supprimer dans le fichier XML&lt;/li&gt;&lt;li&gt; prendre un nouveau pr&#233;fixe afin de laisser le pr&#233;fixe boussole au plugin de gestion. Le pr&#233;fixe adopt&#233; est &#171; bouspip &#187;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il n'y a pas d'int&#233;r&#234;t &#224; n&#233;cessiter le plugin Boussole.&lt;/p&gt; &lt;p&gt;Enfin, on d&#233;clare la boussole comme pr&#234;te &#224; &#234;tre diffus&#233;e via le pipeline &lt;code class='spip_code' dir='ltr'&gt;declarer_boussoles&lt;/code&gt;. Pour chaque boussole d&#233;clar&#233;e dans le tableau, l'index correspond &#224; l'alias de la boussole et la valeur &#224; un tableau associatif compos&#233; pour l'instant uniquement du pr&#233;fixe du plugin (ou &#224; la chaine vide sinon).&lt;br class='manualbr' /&gt;Par exemple, la boussole SPIP d&#233;clare :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; bouspip_declarer_boussoles&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$flux&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$flux&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'spip'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'prefixe'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'bouspip'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$flux&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/e13c3e78368389af30eade3214e28cd7.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Ajout d'une fonction serveur au plugin Boussole&lt;/h3&gt;
&lt;p&gt;C'est une des &#233;volutions majeures de la version v2. Plut&#244;t que d'installer les informations de la boussole SPIP -ou d'une boussole personnalis&#233;e- sur chaque site utilisateur la v2 permet de cr&#233;er un serveur qui fournira les informations de la boussole souhait&#233;e &#224; tous les sites utilisateurs sur demande.&lt;/p&gt; &lt;p&gt;Le mode serveur n'est pas actif par d&#233;faut. Pour l'activer il faut d&#233;finir la constante &lt;code class='spip_code' dir='ltr'&gt;_BOUSSOLE_ALIAS_SERVEUR&lt;/code&gt; qui d&#233;signe le nom du serveur. A partir de ce moment, le CRON serveur journalier s'active. Ce CRON scanne une fois par jour les boussoles d&#233;clar&#233;es - soit par le pipeline &lt;code class='spip_code' dir='ltr'&gt;declarer_boussole&lt;/code&gt; pour un plugin, soit par ajout manuel dans la globale &lt;code class='spip_code' dir='ltr'&gt;$serveur_boussoles_disponibles&lt;/code&gt; - et cr&#233;e les fichiers XML complets de chacune d'entre elles ainsi que la liste des boussoles h&#233;berg&#233;es.&lt;/p&gt; &lt;p&gt;Le fichier XML complet est issu du fichier XML de base d'une boussole en plugin (identique aux version pr&#233;c&#233;dentes) auquel on ajoute les traductions sous format multilingues et les adresses des logos. Pour une boussole manuelle, seul les logos sont &#224; calculer, les traductions &#233;tant d&#233;j&#224; incluses dans le fichier XML de base.&lt;/p&gt; &lt;p&gt;Pour fournir les informations compl&#232;tes sur une boussole, le serveur poss&#232;de une action &lt;code class='spip_code' dir='ltr'&gt;serveur_informer_boussole&lt;/code&gt; qui renvoie le fichier XML complet de la boussole demand&#233;e ou une erreur.&lt;/p&gt; &lt;p&gt;Pour fournir la liste des boussoles, le serveur poss&#232;de cette fois une action &lt;code class='spip_code' dir='ltr'&gt;serveur_lister_boussoles&lt;/code&gt; qui renvoie le fichier XML des boussoles h&#233;berg&#233;es.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Modifications de la fonction client du plugin Boussole&lt;/h3&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="http://blog.smellup.net/IMG/pdf/discussion-boussole.pdf" length="24735" type="application/pdf" />
		

	</item>
<item xml:lang="fr">
		<title>Evolution v2 du plugin Boussole</title>
		<link>http://blog.smellup.net/spip.php?article67</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article67</guid>
		<dc:date>2013-02-02T11:41:05Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>R&#233;flexions</dc:subject>

		<description>&lt;p&gt;Cet article d&#233;crit les probl&#232;mes pos&#233;s par la version v1 actuelle du plugin Boussole et les am&#233;liorations recherch&#233;es dans une prochaine version v2.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique5" rel="directory"&gt;Boussole&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot1" rel="tag"&gt;R&#233;flexions&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Rappel du fonctionnement de la version v1 actuelle&lt;/h3&gt;
&lt;p&gt;Le plugin Boussole v1 est bas&#233; sur les principes suivants :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; une boussole est d&#233;finie par un fichier XML, la liste des logos et les items de langue des noms, slogans et descriptions des sites et groupes concern&#233;s ;&lt;/li&gt;&lt;li&gt; le fichier XML est lu une fois par jour par le plugin et ses informations sont mises &#224; jour dans la base de donn&#233;es &#224; l'exception des traductions et des logos bien entendu ;&lt;/li&gt;&lt;li&gt; le fichier XML de la boussole SPIP est charg&#233; automatiquement &#224; l'activation du plugin Boussole. Ce fichier fait partie du squelette &lt;a href=&quot;http://boussole.spip.org/&quot; class='spip_out' rel='external'&gt;boussole.spip.org&lt;/a&gt; de la galaxie SPIP ;&lt;/li&gt;&lt;li&gt; les items de langue de la boussole SPIP ainsi que ses logos font partie du plugin Boussole ;&lt;/li&gt;&lt;li&gt; les sites d'une boussole sont regroup&#233;s selon cinq groupes d&#233;finis une fois pour toute pour toutes les boussoles mais dont l'utilisation est optionnelle et personnalisable ;&lt;/li&gt;&lt;li&gt; tout site souhaitant afficher la boussole SPIP doit activer le plugin Boussole.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;On note d'embl&#233;e qu'il y a, dans le plugin Boussole v1, un m&#233;lange entre fonctions de service g&#233;n&#233;ralistes et contenu de la boussole SPIP &#224; l'origine des probl&#232;mes discut&#233;s ci-apr&#232;s.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Probl&#232;mes pos&#233;s par la version v1 actuelle&lt;/h3&gt;
&lt;p&gt;Les probl&#232;mes de cette version v1 sont principalement visibles lors des mises &#224; jour des boussoles, et particuli&#232;rement, de leurs items de langue et de leurs logos.&lt;/p&gt; &lt;p&gt;En effet, &#233;tudions un par un les diff&#233;rents cas de mise &#224; jour d'une boussole -par exemple, la boussole SPIP-, &#224; savoir :&lt;/p&gt;
&lt;ol class=&quot;spip&quot;&gt;&lt;li&gt; modification de l'url ou du statut d'activit&#233; d'un site de la boussole,&lt;/li&gt;&lt;li&gt; ajout d'un site dans la boussole,&lt;/li&gt;&lt;li&gt; modification d'une information traduite ou du logo d'un site d&#233;j&#224; pr&#233;sent dans la boussole,&lt;/li&gt;&lt;li&gt; et suppression d'un site de la boussole.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;1- Modification d'une URL ou de l'activit&#233; d'un site&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ces deux informations sont contenues exclusivement dans le fichier XML de description de la boussole. Lors de la mise &#224; jour quotidienne de la boussole via le CRON SPIP, ces informations sont relues et mises &#224; jour en bdd.&lt;/p&gt; &lt;p&gt;En outre, comme le fichier XML n'est pas inclus dans le &#171; plugin &#187; Boussole mais disponible dans le &#171; squelette &#187; &lt;a href=&quot;http://boussole.spip.org/&quot; class='spip_out' rel='external'&gt;boussole.spip.org&lt;/a&gt;, chaque site utilisant la boussole SPIP sera mis &#224; jour sans souci d&#233;s l'instant o&#249; le site &lt;a href=&quot;http://boussole.spip.org/&quot; class='spip_out' rel='external'&gt;boussole.spip.org&lt;/a&gt; est mis &#224; jour. Ce fonctionnement est donc optimal car il ne n&#233;cessite la mise &#224; jour que d'un seul site.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2- Ajout d'un site&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;L'ajout d'un site demande en premier lieu de modifier le fichier XML de la boussole pour y int&#233;grer une balise &lt;code class='spip_code' dir='ltr'&gt;&lt;site alias=&quot;xxx&quot; src=&quot;http://xxx&quot; actif=&quot;oui&quot; /&gt;&lt;/code&gt;. Comme pour le cas 1, tous les sites utilisant la boussole SPIP vont voir leur base de donn&#233;es mise &#224; jour avec ce site.&lt;/p&gt; &lt;p&gt;Pour autant, si on s'arr&#234;te l&#224;, le site n'a ni logo ni aucune traduction disponible. Il faut donc ajouter les logos dans le plugin Boussole (emplacement &lt;code class='spip_code' dir='ltr'&gt;images/boussole/&lt;/code&gt;) et les traductions comme des items de langue dans les modules &lt;code class='spip_code' dir='ltr'&gt;lang/boussole_xx.php&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Mais &#224; partir de ce moment, il faut que tous les sites utilisant la boussole SPIP mettent &#224; jour le plugin lui-m&#234;me afin de r&#233;cup&#233;rer les traductions et le logo. Ce fonctionnement est p&#233;nible et l'on risque de voir longtemps des boussoles avec un nom ou un slogan r&#233;duit &#224; celui de l'item de langue associ&#233;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3- Modification d'une information traduite ou du logo&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Cette modification est similaire au cas 2 pour ce qui est des traductions et du logo. Il faudra donc mettre &#224; jour le plugin Boussole sur tous les sites utilisateur.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4- Suppression d'un site&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Que ce soit en passant le site en inactif dans le fichier XML de la boussole ou en supprimant compl&#232;tement la balise, cette modification sera prise en compte par tous les sites utilisateur lors de la mise &#224; jour quotidienne pour autant que le site &lt;a href=&quot;http://boussole.spip.org/&quot; class='spip_out' rel='external'&gt;boussole.spip.org&lt;/a&gt; ait &#233;t&#233; upgrad&#233;. Comme la base de donn&#233;es ne fera plus r&#233;f&#233;rence &#224; ce site, les affichages seront donc corrects sans autre intervention.&lt;/p&gt; &lt;p&gt;N&#233;anmoins pour &#234;tre complet lors d'une suppression, les traductions et le logo devraient aussi &#234;tre supprim&#233;es du plugin Boussole. Ce cas est un peu bancal car les sites fonctionneront correctement avec des versions du plugin Boussole obsol&#232;tes.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Nouvelles exigences pour une v2&lt;/h3&gt;
&lt;p&gt;L'objectif de cette version v2 est donc de simplifier les mises &#224; jour d'une boussole pour les sites utilisateur en ne les obligeant plus &#224; upgrader leur plugin Boussole.&lt;/p&gt; &lt;p&gt;On peut exprimer cet objectif en plusieurs exigences plus techniques :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;EX1&lt;/strong&gt; : il faut s&#233;parer les composants d'une boussole -XML, logo et traductions- du plugin affichant la dite boussole.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX2&lt;/strong&gt; : il faut un m&#233;canisme de mise &#224; jour d'une boussole sur chaque site utilisateur qui permette de r&#233;cup&#233;rer toutes les informations -y compris les traductions et les logos- d'une fa&#231;on automatique sans avoir &#224; mettre &#224; jour le plugin Boussole.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX3&lt;/strong&gt; : il faut donc un &#171; serveur &#187; qui fournisse sur demande les informations compl&#232;tes sur une boussole.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX4&lt;/strong&gt; : il faut conserver la possibilit&#233; pour une boussole d'avoir ses noms, slogans et descriptions traduits via le site &lt;a href=&quot;http://trad.spip.net/&quot; class='spip_out' rel='external'&gt;Traduire SPIP&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX5&lt;/strong&gt; : il faut limiter les &#233;changes entre le &#171; serveur &#187; et les sites utilisateur.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX6&lt;/strong&gt; : il faut assurer une compatibilit&#233; ascendante en faisant en sorte que les sites utilisateur n'aient qu'une mise &#224; jour de leur plugin Boussole &#224; faire et rien d'autre.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;EX7&lt;/strong&gt; : il faut &#233;tendre l'utilisation des groupes en permettant de d&#233;finir leur liste, leur alias.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Solutions possibles pour r&#233;pondre aux exigences v2&lt;/h3&gt;
&lt;p&gt;Les exigences EX1 et EX4 conduisent &#224; scinder le plugin en deux :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; d'un cot&#233; les fonctionnalit&#233;s de gestion des boussoles dans un plugin,&lt;/li&gt;&lt;li&gt; et de l'autre les composants -XML, logos, traductions- de la boussole SPIP proprement dite dans un format qui autoriserait les traductions.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;L'exigence EX3 induit la cr&#233;ation d'une fonction serveur qui permet de mettre &#224; disposition des sites client les informations d'une boussole (sites, groupes, traductions) ainsi que ses logos. Cette fonction pourrait &#234;tre &#224; la base d'un nouveau plugin serveur de boussoles.&lt;/p&gt; &lt;p&gt;N&#233;anmoins, le meilleur compromis semble &#234;tre de regrouper les fonctions serveur et client dans un m&#234;me plugin d&#233;riv&#233; du plugin Boussole actuel et de sortir dans un plugin Boussole SPIP les composants de cette boussole, ce qui r&#233;pondrait aux exigences EX6 et EX4.&lt;/p&gt; &lt;p&gt;Cependant, il peut &#234;tre int&#233;ressant pour d'autres boussoles personnalis&#233;es, d'autoriser une diffusion simple sans passer par un plugin.&lt;/p&gt; &lt;p&gt;Pour r&#233;pondre &#224; l'exigence EX2, le plugin Boussole actuel doit &#233;voluer pour permettre la mise &#224; jour des boussoles non plus par la lecture d'un XML mais pas la r&#233;ception des informations via une requ&#234;te adress&#233;e &#224; un serveur (r&#233;ponse JSON ou XML). En revanche, les logos doivent &#234;tre accessibles sur ce m&#234;me serveur dans un espace ouvert &#224; leur lecture &#224; l'instar de SVP et des logos de plugins.&lt;/p&gt; &lt;p&gt;N&#233;anmoins, comme requis par l'exigence EX5, il sera n&#233;cessaire de limiter au strict minimum les requ&#234;tes au serveur &#233;tant donn&#233; que le nombre de sites client peut &#234;tre important. Un m&#233;canisme type md5 devra &#234;tre ajout&#233; soit &#224; la fonction d'upgrade client actuelle soit &#224; la fonction de r&#233;ponse du serveur.&lt;/p&gt; &lt;p&gt;Pour l'exigence EX7, il faut pouvoir g&#233;rer les alias de groupes quels qu'ils soient.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Rainette v2, mise en &#339;uvre du multi-services</title>
		<link>http://blog.smellup.net/spip.php?article65</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article65</guid>
		<dc:date>2012-12-25T17:08:07Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>Sp&#233;cifications</dc:subject>

		<description>&lt;p&gt;Cet article d&#233;crit la mise en &#339;uvre des fonctionnalit&#233;s multi-services dans Rainette.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique23" rel="directory"&gt;Rainette&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot2" rel="tag"&gt;Sp&#233;cifications&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Les mod&#232;les standard&lt;/h3&gt;
&lt;p&gt;Dans la version v1 de Rainette, l'insertion de donn&#233;es m&#233;t&#233;orologiques dans un squelette se fait toujours via un mod&#232;le standard :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;rainette_conditions&lt;/code&gt;, pour les conditions temps r&#233;el,&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;rainette_previsions&lt;/code&gt;, pour les pr&#233;visions &#224; n jours,&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;rainette_infos&lt;/code&gt;, pour les informations sur la ville,&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;qui fait uniquement appel &#224; un filtre dont le nom est tir&#233; de celui du mod&#232;le. Pour le mod&#232;le &lt;code class='spip_code' dir='ltr'&gt;rainette_conditions&lt;/code&gt;, par exemple, le code de la version v1 de Rainette est le suivant :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{code}&lt;/span&gt;&lt;span style=&quot;color: #FF851D;&quot;&gt;|rainette_coasse_conditions&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;{sous_modele,conditions_tempsreel}}&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/454fdd9f31926263f1f7be27d2157a04.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;On s'aper&#231;oit que deux arguments sont toujours pass&#233;s &#224; ces mod&#232;les - et donc aux filtres - &#224; savoir :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le code du lieu&lt;/li&gt;&lt;li&gt; et le sous-mod&#232;le qui d&#233;finit la structure exact de l'affichage.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Afin de conserver dans la version v2 de Rainette une compatibilit&#233; ascendante avec ces appels, la premi&#232;re &#233;volution consiste &#224; ajouter en dernier param&#232;tre des filtres le service utilis&#233;, qui par d&#233;faut prendra la valeur du service Weather.com(r). Cela correspond dans les mod&#232;les standard &#224; un param&#232;tre &#171; service &#187;. Ce param&#232;tre prend les valeurs &#171; weather &#187;, &#171; wwo &#187;, &#171; wunderground &#187; et &#171; yahoo &#187;.&lt;/p&gt; &lt;p&gt;Le code du mod&#232;le &lt;code class='spip_code' dir='ltr'&gt;rainette_conditions&lt;/code&gt; est donc modifi&#233; comme suit :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_spip2 cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip2&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{code}&lt;/span&gt;&lt;span style=&quot;color: #FF851D;&quot;&gt;|rainette_coasse_conditions&lt;/span&gt;&lt;span style=&quot;color: #74B900;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;{sous_modele,conditions_tempsreel},&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #74B900;&quot;&gt; &lt;span style=&quot;color: #D05000;&quot;&gt;#ENV&lt;/span&gt;{service, weather}}&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #D05000;&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/21d1917814c450a0f075b87234b6709f.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Le chargement des donn&#233;es m&#233;t&#233;orologiques&lt;/h3&gt;
&lt;p&gt;Le chargement des donn&#233;es m&#233;t&#233;orologiques est confi&#233; &#224; une fonction unique &lt;code class='spip_code' dir='ltr'&gt;charger_meteo()&lt;/code&gt; qui est appel&#233; par les filtres &lt;code class='spip_code' dir='ltr'&gt;rainette_coasse_xxxx()&lt;/code&gt;. Cette fonction a aussi &#233;volu&#233; en v2 pour, d'une part, int&#233;grer l'argument service et d'autre part, rev&#234;tir une forme standard pour les conditions, pr&#233;visions et infos.&lt;/p&gt; &lt;p&gt;Cette fonction, suivant qu'elle lit le cache ou qu'elle le recr&#233;e en interrogeant le service distant concern&#233;, appelle une liste de fonctions standardis&#233;es pour chaque service et renvoie le fichier cache correspondant &#224; la demande. Le code est le suivant :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; inc_charger_meteo_dist&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$lieu&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'previsions'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$service&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'weather'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Traitement des cas ou les arguments sont vides&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'previsions'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$service&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$service&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'weather'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// En fonction du service, on inclut le fichier des fonctions&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Le principe est que chaque service propose la m&#234;me liste de fonctions d'interface dans un fichier unique&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;services/&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Construire le nom du fichier cache&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$cacher&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_service2cache&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$cacher&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$lieu&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// D&#233;terminer la p&#233;riode de renouv&#232;lement du cache&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$reloader&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_service2reload_time&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$reload_time&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'previsions'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; ? &lt;span style=&quot;color: #000088;&quot;&gt;$reloader&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'previsions'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$reloader&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'conditions'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/file_exists&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;file_exists&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; OR &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'infos'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; AND &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/filemtime&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;filemtime&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; OR &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/time&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;time&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;a href=&quot;http://www.php.net/filemtime&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;filemtime&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$reload_time&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Construire l'url de la requ&#234;te&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$urler&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_service2url&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$url&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$urler&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$lieu&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Acqu&#233;rir le flux XML ou JSON dans un tableau&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$acquerir&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_url2flux&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$flux&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$acquerir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$url&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Convertir le flux en tableau standard pour la mise en cache&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'infos'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$convertir&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_flux2infos&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$convertir&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'previsions'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; ? &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_flux2previsions&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_flux2conditions&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tableau&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$convertir&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$flux&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$lieu&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Ajout du cr&#233;dit affich&#233; en regard de chaque mod&#232;le&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$crediter&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;${service}&lt;/span&gt;_service2credits&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tableau&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'credits'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$crediter&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Pipeline de fin de chargement des donn&#233;es m&#233;t&#233;o. Peut-&#234;tre utilis&#233; :&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// -- pour effectuer des traitements annexes &#224; partir des donn&#233;es m&#233;t&#233;o (archivage, par exemple)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// -- pour ajouter ou modifier des donn&#233;es au tableau (la modification n'est pas conseill&#233;e cependant)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tableau&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; pipeline&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'post_chargement_meteo'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'args'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'lieu'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$lieu&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'mode'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$mode&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'service'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$service&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'data'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$tableau&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Cr&#233;ation du nouveau cache&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; ecrire_fichier&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/serialize&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;serialize&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$tableau&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$cache&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/aaefec1c2e1978a3c0c5d836812207d1.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class=&quot;spip&quot;&gt;Le codage d'un service&lt;/h3&gt;
&lt;p&gt;La structure de codage d'un service est la suivante :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; chaque service est cod&#233; dans un fichier PHP portant le nom du service - &lt;code class='spip_code' dir='ltr'&gt;weather.php&lt;/code&gt; par exemple,&lt;/li&gt;&lt;li&gt; et inclut une liste de fonctions standard appel&#233;es par la fonction de chargement des donn&#233;es pr&#233;cit&#233;e ainsi que toutes les sous-fonctions et constantes propres.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les fonctions standardis&#233;es &#224; coder pour chaque service sont :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_service2cache&lt;/code&gt;, qui renvoie le nom du fichier de cache calcul&#233;.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_service2url&lt;/code&gt;, qui renvoie l'url compl&#232;te de la requ&#234;te correspondant &#224; la demande.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_service2reload_time&lt;/code&gt;, qui renvoie la p&#233;riode de renouv&#232;lement des donn&#233;es en fonction du type.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_url2flux&lt;/code&gt;, qui renvoie la chaine correspondant au flux XML fourni par le service concern&#233; et correspondant &#224; la demande.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2conditions&lt;/code&gt;, &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2previsions&lt;/code&gt; et &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2infos&lt;/code&gt;, qui renvoient le tableau des donn&#233;es collect&#233;es dans le format standardis&#233; par Rainette pr&#234;t &#224; &#234;tre mis en cache.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${service}_service2credits&lt;/code&gt;, qui renvoie le code HTML des cr&#233;dits affich&#233;s dans chaque mod&#232;le conform&#233;ment aux termes d'utilisation du service.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_service2cache&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction calcule pour chaque service le nom du fichier cache en fonction du lieu et du type de donn&#233;es requis. De fa&#231;on g&#233;n&#233;rale, ce fichier &lt;code class='spip_code' dir='ltr'&gt;.txt&lt;/code&gt; est stock&#233; dans un sous-dossier du cache SPIP nomm&#233; &lt;code class='spip_code' dir='ltr'&gt;rainette/${service}/&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;La structure du nom du fichier est :&lt;code class='spip_code' dir='ltr'&gt;${lieu}_${typedonnees}&lt;/code&gt; o&#249; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${lieu}&lt;/code&gt; est le nom du lieu en majuscule pour lequel les caract&#232;res tels que les points, virgules, slash, plus... sont remplac&#233;s par un underscore.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;${typedonnees}&lt;/code&gt; est le type de donn&#233;es, &#171; infos &#187;, &#171; conditions &#187; ou &#171; previsions &#187;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour le service Wunderground uniquement et dans le cas o&#249; l'on utilise les libell&#233;s m&#233;t&#233;orologiques traduits de ce service, le nom est suffix&#233; par le code de la langue &lt;code class='spip_code' dir='ltr'&gt;${lieu}_${typedonnees}-${langue}&lt;/code&gt; .&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_service2url&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction construit l'url de la requ&#234;te adress&#233;e au service distant en fonction de la demande qui lui est faite. Quand l'API du service l'autorise la fonction &#233;labore la requ&#234;te la plus optimis&#233;e par rapport &#224; la demande : les conditions, les pr&#233;visions et les infos font l'objet de requ&#234;te diff&#233;rente. C'est le cas de tous les services &#224; l'exception de Yahoo Weather.&lt;/p&gt; &lt;p&gt;Suivant le service il est possible ou pas de pr&#233;ciser le syst&#232;me d'unit&#233;s utilis&#233; pour les valeurs num&#233;riques et bien entendu la cl&#233; d'inscription. Pour Wunderground, il est aussi possible de pr&#233;ciser la langue des textes.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_service2reload_time&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction renvoie pour chaque service la valeur de la p&#233;riode de renouv&#232;lement des donn&#233;es m&#233;t&#233;o en fonction de la demande, conditions ou pr&#233;visions. Chaque service d&#233;fini un tableau associatif statique dont les index sont les type de donn&#233;es.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_url2flux&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction r&#233;cup&#232;re le flux en r&#233;ponse &#224; la requ&#234;te formul&#233;e et renvoie un tableau brut apr&#232;s phrasage du XML ou du JSON.&lt;/p&gt; &lt;p&gt;Cette fonction aurait pu &#234;tre g&#233;n&#233;ralis&#233;e &#224; l'ensemble des services si le format de retour &#233;tait toujours le m&#234;me, en l'occurrence du XML. Mais il existe des services ne supportant que le format de r&#233;ponse JSON. Pour garder cette possibilit&#233; dans le futur, on conserve cette fonction dans l'API de chaque service mais on fournit des sous-fonctions standard dans &lt;code class='spip_code' dir='ltr'&gt;inc/phraser.php&lt;/code&gt; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;url2flux_xml()&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code' dir='ltr'&gt;url2flux_json()&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2infos&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction convertit le tableau brut phras&#233; &#224; partir du flux XML ou JSON par la fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_url2flux&lt;/code&gt; en tableau standardis&#233; pour l'affichage dans les mod&#232;les des informations g&#233;ographiques sur le lieu.&lt;/p&gt; &lt;p&gt;Le tableau associatif r&#233;sultant est compos&#233; des index :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idfa49_c0'&gt; Index &lt;/th&gt;&lt;th id='idfa49_c1'&gt; Description &lt;/th&gt;&lt;th id='idfa49_c2'&gt; Format &lt;/th&gt;&lt;th id='idfa49_c3'&gt; Disponibilit&#233; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idfa49_c0'&gt;&#8220;ville&#8221;&lt;/td&gt;
&lt;td headers='idfa49_c1'&gt;nom complet du lieu souvent compl&#233;t&#233; du pays&lt;/td&gt;
&lt;td headers='idfa49_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idfa49_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idfa49_c0'&gt;&#8220;r&#233;gion&#8221;&lt;/td&gt;
&lt;td headers='idfa49_c1'&gt;nom de la r&#233;gion&lt;/td&gt;
&lt;td headers='idfa49_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idfa49_c3'&gt;wwo, yahoo&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idfa49_c0'&gt;&#8220;longitude&#8221;&lt;/td&gt;
&lt;td headers='idfa49_c1'&gt;longitude du lieu&lt;/td&gt;
&lt;td headers='idfa49_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='idfa49_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idfa49_c0'&gt;&#8220;latitude&#8221;&lt;/td&gt;
&lt;td headers='idfa49_c1'&gt;latitude du lieu&lt;/td&gt;
&lt;td headers='idfa49_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='idfa49_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idfa49_c0'&gt;&#8220;population&#8221;&lt;/td&gt;
&lt;td headers='idfa49_c1'&gt;d&#233;compte de la population du lieu&lt;/td&gt;
&lt;td headers='idfa49_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idfa49_c3'&gt;wwo&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Quand l'information n'est pas disponible la valeur de l'index concern&#233; est positionn&#233;e &#224; chaine vide.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2conditions&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction convertit le tableau brut phras&#233; &#224; partir du flux XML ou JSON par la fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_url2flux&lt;/code&gt; en tableau standardis&#233; pour l'affichage dans les mod&#232;les des conditions m&#233;t&#233;orologiques temps r&#233;el sur le lieu.&lt;/p&gt; &lt;p&gt;Le tableau associatif r&#233;sultant est compos&#233; des index :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idd827_c0'&gt; Index &lt;/th&gt;&lt;th id='idd827_c1'&gt; Description &lt;/th&gt;&lt;th id='idd827_c2'&gt; Format &lt;/th&gt;&lt;th id='idd827_c3'&gt; Disponibilit&#233; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Donn&#233;es d'observation &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;derniere_maj&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;date de l'observation&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;station&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;station m&#233;t&#233;o origine de l'observation&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;weather, wunderground&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Temp&#233;ratures &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;temperature_reelle&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;temp&#233;rature mesur&#233;e&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;temperature_ressentie&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;temp&#233;rature ressentie en tenant compte du refroidissement &#233;olien. Si la donn&#233;e n'est pas fournie par le service elle est calcul&#233;e&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Donn&#233;es an&#233;mom&#233;triques &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;vitesse_vent&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;vitesse du vent&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;angle_vent&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;direction angulaire du vent&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;direction_vent&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;direction textuelle abr&#233;g&#233;e selon une rose des vents &#224; 16 points en anglais (E,ESE, WNW...). Si la donn&#233;e n'est pas fournie par le service elle est calcul&#233;e&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Donn&#233;es atmosph&#233;riques &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;humidite&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;pourcentage d'humidit&#233;&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;point_rosee&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;temp&#233;rature du point de ros&#233;e&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;weather, wunderground&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;pression&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;pression barom&#233;trique&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;tendance_pression&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;tendance barom&#233;trique (stable, &#224; la hausse ou &#224; la baisse). Pour les services autres que weather, elle est transcod&#233;e dans le r&#233;f&#233;rentiel weather (steady, rising, falling)&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;weather, wunderground, yahoo&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;visibilite&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;distance de visibilit&#233; des objets&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Etats m&#233;t&#233;orologiques natifs (non utilis&#233;s dans les mod&#232;les) &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;code_meteo&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;code d&#233;signant l'&#233;tat m&#233;t&#233;orologique. Suivant le service ce code est un entier ou une chaine (wunderground)&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier / chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;icon_meteo&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;url de l'ic&#244;ne repr&#233;sentant l'&#233;tat m&#233;t&#233;orologique&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;wwo, wunderground&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;desc_meteo&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;description litt&#233;rale de l'&#233;tat m&#233;t&#233;orologique. Seul wunderground fournit une description traduite&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='idd827_c0'&gt;&#8212; Etats m&#233;t&#233;orologiques calcul&#233;s &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;resume&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;r&#233;sum&#233; de l'&#233;tat m&#233;t&#233;orologique. Voir ci-apr&#232;s pour en savoir plus&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;divers&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;icone&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;ic&#244;ne illustrant l'&#233;tat m&#233;t&#233;orologique. Voir ci-apr&#232;s pour en savoir plus&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier / tableau&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idd827_c0'&gt;&#8220;periode&#8221;&lt;/td&gt;
&lt;td headers='idd827_c1'&gt;0 pour le jour, 1 pour la nuit&lt;/td&gt;
&lt;td headers='idd827_c2'&gt;entier&lt;/td&gt;
&lt;td headers='idd827_c3'&gt;wwo, wunderground&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Quand l'information n'est pas disponible la valeur de l'index concern&#233; est positionn&#233;e &#224; chaine vide.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_flux2previsions&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction convertit le tableau brut phras&#233; &#224; partir du flux XML ou JSON par la fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_url2flux&lt;/code&gt; en tableau standardis&#233; pour l'affichage dans les mod&#232;les de pr&#233;visions m&#233;t&#233;orologiques sur le lieu.&lt;/p&gt; &lt;p&gt;Le tableau associatif r&#233;sultant est compos&#233; des index :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id60a8_c0'&gt; Index &lt;/th&gt;&lt;th id='id60a8_c1'&gt; Description &lt;/th&gt;&lt;th id='id60a8_c2'&gt; Format &lt;/th&gt;&lt;th id='id60a8_c3'&gt; Disponibilit&#233; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='id60a8_c0'&gt;&#8212; Donn&#233;es d'observation &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;date&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;date de l'observation&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;index&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;num&#233;ro du jour dans le tableau&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;entier&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td colspan='4' headers='id60a8_c0'&gt;&#8212; Lever et coucher du soleil &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;lever_soleil&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;heure de lever du soleil&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;weather&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;coucher_soleil&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;heure de coucher du soleil&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;weather&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='id60a8_c0'&gt;&#8212; Donn&#233;es jour &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;temperature_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;temp&#233;rature&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;code_icone_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;vitesse_vent_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;vitesse du vent&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;r&#233;el&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;angle_vent_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;direction angulaire du vent&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;entier&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;direction_vent_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;direction textuelle abr&#233;g&#233;e selon une rose des vents &#224; 16 points en anglais (E,ESE, WNW...). Si la donn&#233;e n'est pas fournie par le service elle est calcul&#233;e&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;risque_precipitation_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;risque de pr&#233;cipitation en pourcentage&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;entier&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id60a8_c0'&gt;&#8220;humidite_jour&#8221;&lt;/td&gt;
&lt;td headers='id60a8_c1'&gt;pourcentage d'humidit&#233;&lt;/td&gt;
&lt;td headers='id60a8_c2'&gt;entier&lt;/td&gt;
&lt;td headers='id60a8_c3'&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td colspan='4' headers='id60a8_c0'&gt;&#8212; Donn&#233;es nuit &#8212;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 class=&quot;spip&quot;&gt;La fonction &lt;code class='spip_code' dir='ltr'&gt;${service}_service2credits&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Cette fonction ajoute &#224; chaque tableau standardis&#233; pour l'affichage dans les mod&#232;les les cr&#233;dits propres &#224; chaque service (se r&#233;f&#233;rer aux conditions d'utilisation pour en savoir plus sur leur format).&lt;/p&gt; &lt;p&gt;Le tableau associatif r&#233;sultant int&#232;gre un index suppl&#233;mentaire &#8220;cr&#233;dits&#8221; qui est un tableau comportant les sous-index suivants :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idc797_c0'&gt; Sous-index &lt;/th&gt;&lt;th id='idc797_c1'&gt; Description &lt;/th&gt;&lt;th id='idc797_c2'&gt; Format &lt;/th&gt;&lt;th id='idc797_c3'&gt; Disponibilit&#233; &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idc797_c0'&gt;&#8220;lien&#8221;&lt;/td&gt;
&lt;td headers='idc797_c1'&gt;URL du site de r&#233;f&#233;rence du service&lt;/td&gt;
&lt;td headers='idc797_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idc797_c3'&gt;tous&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idc797_c0'&gt;&#8220;titre&#8221;&lt;/td&gt;
&lt;td headers='idc797_c1'&gt;Attribut title du lien affich&#233;&lt;/td&gt;
&lt;td headers='idc797_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idc797_c3'&gt;wwo&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idc797_c0'&gt;&#8220;logo&#8221;&lt;/td&gt;
&lt;td headers='idc797_c1'&gt;Logo du service &#224; afficher. Si le logo n'est pas fourni alors un libell&#233; contenant le nom du service est affich&#233;&lt;/td&gt;
&lt;td headers='idc797_c2'&gt;chaine&lt;/td&gt;
&lt;td headers='idc797_c3'&gt;wunderground&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A minima il est n&#233;cessaire de fournir un lien vers le site de r&#233;f&#233;rence du service. Quand l'information n'est pas disponible la valeur de l'index concern&#233; est positionn&#233;e &#224; chaine vide.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Gestion de la configuration des plugins</title>
		<link>http://blog.smellup.net/spip.php?article45</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article45</guid>
		<dc:date>2012-11-04T14:36:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>R&#233;flexions</dc:subject>

		<description>&lt;p&gt;Cet article a pour but de r&#233;fl&#233;chir sur une gestion plus standard des metas de configuration d'un plugin : valeur par d&#233;faut, importation, exportation et suppression.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique6" rel="directory"&gt;Les plugins&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot1" rel="tag"&gt;R&#233;flexions&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Le m&#233;canisme de configuration actuel&lt;/h3&gt;
&lt;p&gt;Nombre de plugins utilisent des variables de configuration pour param&#233;trer les traitements qu'ils proposent. Initialement motoris&#233; par le &#171; tr&#232;s utilis&#233; &#187; plugin CFG, le m&#233;canisme de configuration est maintenant propos&#233; nativement par le noyau de SPIP 3.0 ce qui entraine l'abandon progressif de CFG.&lt;/p&gt; &lt;p&gt;Le m&#233;canisme de configuration de SPIP 3.0 est bas&#233; principalement, comme l'explique l'article &lt;a href=&quot;http://www.spip.net/fr_article5414.html&quot; class='spip_out' rel='external'&gt;Configurer une fonctionnalit&#233; de votre site, ou un plugin&lt;/a&gt; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; sur la technique des formulaires CVT&lt;/li&gt;&lt;li&gt; sur la m&#233;thode de stockage dans la table &#171; spip_meta &#187; ou dans une table d&#233;clar&#233;e dans l'attribut &#171; &lt;a href=&quot;http://plugins.spip.net/redaction-du-paquet-xml.html#meta&quot; class='spip_out' rel='external'&gt;meta&lt;/a&gt; &#187; de la balise &lt;code class='spip_code' dir='ltr'&gt;&lt;paquet&gt;&lt;/code&gt; du nouveau fichier XML de description d'un plugin (&lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt;).&lt;/li&gt;&lt;li&gt; et sur l'API de manipulation des variables de configuration issue de CFG, &#224; savoir, la balise &lt;code class='spip_code' dir='ltr'&gt;#CONFIG&lt;/code&gt; en HTML et les fonctions &lt;code class='spip_code' dir='ltr'&gt;lire_config()&lt;/code&gt;, &lt;code class='spip_code' dir='ltr'&gt;ecrire_config()&lt;/code&gt; et &lt;code class='spip_code' dir='ltr'&gt;effacer_config()&lt;/code&gt; en PHP.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cette &#233;volution propos&#233;e par SPIP 3.0 permet de rationaliser la mise en place d'une configuration au sein d'un plugin mais laisse encore des points ouverts ou du moins non standardis&#233;s comme :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; l'affectation des valeurs par d&#233;faut,&lt;/li&gt;&lt;li&gt; la possibilit&#233; d'exporter ou d'importer une configuration,&lt;/li&gt;&lt;li&gt; la suppression automatique des variables de configuration en base de donn&#233;es suite &#224; la d&#233;sinstallation compl&#232;te du plugin.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Affectation des valeurs par d&#233;faut&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La probl&#233;matique&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Aujourd'hui deux techniques cohabitent dans les plugins sans que l'une ou l'autre ne soit r&#233;ellement adopt&#233;e comme une pratique standard malgr&#233; les explications donn&#233;e dans l'article cit&#233; ci-dessus :&lt;/p&gt;
&lt;ol class=&quot;spip&quot;&gt;&lt;li&gt; Les valeurs par d&#233;faut sont positionn&#233;es &#224; chaque fois qu'on utilise une fonction de l'API de configuration : par exemple, &lt;code class='spip_code' dir='ltr'&gt;#CONFIG{variable, d&#233;faut}&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;lire_config(variable, d&#233;faut)&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Les valeurs par d&#233;faut sont charg&#233;es une fois pour toute lors de l'activation du plugin via la fonction d'installation du sch&#233;ma de donn&#233;es &lt;code class='spip_code' dir='ltr'&gt;${prefixe}_upgrade()&lt;/code&gt;. Dans ce cas, il n'est plus utile de pr&#233;ciser la valeur par d&#233;faut quand on manipule une variable de configuration en HTML ou en PHP.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;La premi&#232;re technique devient rapidement p&#233;nible quand la liste des variables s'allonge et de surcro&#238;t multiplie les risques d'erreur d'affectation par d&#233;faut.&lt;/p&gt; &lt;p&gt;La deuxi&#232;me technique simplifie grandement l'&#233;criture dans le code HTML ou PHP et le rend aussi plus maintenable et &#233;volutif. Cette initialisation &#224; l'installation permet aussi d'envisager l'utilisation du m&#233;canisme d'upgrade de sch&#233;ma pour faire &#233;voluer la configuration : elle semble donc &#224; privil&#233;gier.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Les pistes de solution&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Adopter en standard cette technique d'initialisation &#224; l'installation d'un plugin, revient &#224; faire &#233;voluer les pratiques de codage mais aussi le noyau de SPIP 3.0 (tr&#232;s peu car tout existe ou presque). Une configuration de plugin n&#233;cessiterait donc :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; d'utiliser syst&#233;matiquement l'attribut &#171; &lt;strong&gt;schema&lt;/strong&gt; &#187; d'un plugin pour d&#233;crire l'existence d'une configuration de plugin tout autant que l'existence d'une modification de la structure de la base de donn&#233;es. Le principe d'&#233;volution du sch&#233;ma s'appliquerait donc indiff&#233;remment &#224; la configuration ou &#224; la base de donn&#233;es.&lt;/li&gt;&lt;li&gt; de d&#233;clarer la liste des couples &lt;strong&gt;(variable de configuration, valeur par d&#233;faut)&lt;/strong&gt; du plugin.&lt;/li&gt;&lt;li&gt; d'utiliser la fonction &lt;code class='spip_code' dir='ltr'&gt;${prefixe}_upgrade&lt;/code&gt; pour d&#233;clarer les &#233;volutions de la configuration du plugin dans le temps.&lt;/li&gt;&lt;li&gt; de continuer &#224; utiliser l'attribut &#171; &lt;strong&gt;meta&lt;/strong&gt; &#187; du plugin pour d&#233;crire la table de stockage des variables de configuration si celle-ci est diff&#233;rente de &lt;code class='spip_code' dir='ltr'&gt;spip_meta&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;En ce qui concerne la d&#233;claration afin de se rapprocher du m&#233;canisme actuel de cr&#233;ation de la base on pourrait utiliser un pipeline &lt;code class='spip_code' dir='ltr'&gt;declarer_config&lt;/code&gt;&lt;/strong&gt; pour d&#233;finir les variables de configuration et leur valeur par d&#233;faut dans une variable globale &lt;code class='spip_code' dir='ltr'&gt;$config_plugins&lt;/code&gt; index&#233;e par le pr&#233;fixe du plugin.&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; prefixeplugin_declarer_config&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'prefixeplugin'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// Variables de configuration du plugin&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'nom_meta1'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable11&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut11&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable12&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut12&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable13&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut13&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable14&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut14&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'nom_meta2'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable21&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut21&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;variable22&quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;defaut22&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$config&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/c37f914c55e6280f90b9f5bba4306054.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Cette fonction pourrait &#234;tre ins&#233;r&#233;e dans le m&#234;me fichier que celui de la base si il existe ou du moins dans le dossier &lt;code class='spip_code' dir='ltr'&gt;base/&lt;/code&gt; du plugin. Il est &#233;galement possible d'am&#233;liorer cette d&#233;claration pour introduire plus finement les types et m&#233;thodes de stockage des variables de configuration (un peu comme le faisait CFG).&lt;/p&gt; &lt;p&gt;Dans le m&#234;me genre d'id&#233;e SPIP fournirait une fonction &lt;code class='spip_code' dir='ltr'&gt;maj_config('prefixeplugin')&lt;/code&gt; pour d&#233;clencher la cr&#233;ation des variables de configuration du plugin. Pour l'upgrade de la configuration il est d&#233;j&#224; possible aujourd'hui d'utiliser une fonction d&#233;di&#233;e par upgrade ou les fonctions &lt;code class='spip_code' dir='ltr'&gt;ecrire_config()&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;effacer_config()&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_php cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; prefixeplugin_upgrade&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$nom_meta_base_version&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$version_cible&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$maj&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$maj&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'create'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'maj_tables'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'table1'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'table2'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'maj_config'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'prefixeplugin'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$maj&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'0.2.0'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'sql_alter'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;bla bla...&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'maj_config_020'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$maj&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'0.3.0'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'sql_alter'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;bla bla...&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'ecrire_config'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'prefixeplugin/variable'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;'defaut'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; include_spip&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'base/upgrade'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; maj_plugin&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$nom_meta_base_version&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$version_cible&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$maj&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; maj_config_020&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// code de l'upgrade...&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/7887593f3e12323a5fcc5cd30774c192.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A ce stade, il reste un petit b&#233;mol avec les formulaires de configuration. En effet, il y a une derni&#232;re redondance &#224; g&#233;rer car le formulaire d&#233;finit aussi :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le nom des metas dans la base soit en utilisant son nom ou un input cach&#233;&lt;/li&gt;&lt;li&gt; et le nom des variables en utilisant les attribut name des inputs.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il faudrait donc assurer la coh&#233;rence des deux d&#233;finitions. A r&#233;fl&#233;chir !&lt;/p&gt; &lt;p&gt;Autre chose, sauf &#224; utiliser des variables obligatoires dans le formulaire de configuration il faut s'assurer qu'il n'est pas possible d'effacer une valeur en la supprimant dans un input du formulaire sinon une &#233;criture type &lt;code class='spip_code' dir='ltr'&gt;lire_config('variable')&lt;/code&gt; pourrait &#234;tre incorrecte. Peut-&#234;tre faudrait-il appeler une fonction de v&#233;rification/positionnement du d&#233;faut sp&#233;cifique au processus de validation du formulaire de configuration.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Sauvegarde et restauration de variables de configuration&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La probl&#233;matique&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Quand le nombre de variables de configuration augmente, repasser tous les formulaires de configuration en revue pour appliquer une configuration donn&#233;e peut s'av&#233;rer p&#233;nible.&lt;/p&gt; &lt;p&gt;M&#234;me si d'aucuns, &#224; juste titre, ne sont pas fans des configurations &#171; clicodrome &#187;, force est de constater que la multiplication des plugins activ&#233;s sur un site fait de toute fa&#231;on enfler la configuration globale du site sans que l'on puisse distinguer celle de SPIP de celle des plugins. De ce fait, la n&#233;cessit&#233; de sauvegarder et de restaurer cette configuration des plugins pour des besoins de distribution par exemple n'est plus &#224; n&#233;gliger.&lt;/p&gt; &lt;p&gt;Un squelette comme Sarka-SPIP poss&#232;de entre 100 et 200 variables de configuration r&#233;parties dans plus de 20 formulaires (donc 20 metas en base de donn&#233;es). Le squelette int&#232;gre donc un m&#233;canisme sp&#233;cifique de sauvegarde/restitution de la configuration bas&#233;e sur des fichiers texte contenant les metas s&#233;rialis&#233;es.&lt;/p&gt; &lt;p&gt;Le noiZetier, le squelette Aveline et d'autres plugins ont aussi &#233;t&#233; confront&#233;s &#224; la m&#234;me probl&#233;matique et de l&#224; est n&#233; le plugin IEConfig, qui porte bien mal son nom, car il permet d'importer et d'exporter une liste de metas dans un m&#234;me fichier au format YAML et non de configurer Internet Explorer ! N&#233;anmoins, pour traiter ces metas de configuration, IEConfig demande &#224; chaque plugin de (re)d&#233;finir sa liste de metas de configuration dans un pipeline d&#233;di&#233;.&lt;/p&gt; &lt;p&gt;Actuellement, IEConfig est utilis&#233; de fa&#231;on sporadique et n'est pas un standard m&#234;me si il est int&#233;gr&#233; &#171; &#224; la hussarde &#187; dans les plugins de la distribution SPIP 3.0. Il convient donc de trouver un solution g&#233;n&#233;rique SPIP &#224; cette probl&#233;matique.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Les pistes de solution&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;A partir du moment o&#249; l'on utilise la d&#233;claration des variables de configuration des plugins comme propos&#233;e plus haut&lt;/strong&gt;, il est toujours possible de conna&#238;tre :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; la liste des metas de configuration d'un plugin&lt;/li&gt;&lt;li&gt; la liste des metas de configuration de tous les plugins&lt;/li&gt;&lt;li&gt; et donc a fortiori, par diff&#233;rence, la liste des metas de configuration de SPIP si on consid&#232;re une situation o&#249; ce m&#233;canisme est en place pour tous les plugins&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb1' class='spip_note' rel='footnote' title='Il convient aussi de r&#233;fl&#233;chir &#224; d&#233;clarer les variables de configuration de (...)' id='nh1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est alors facile d'imaginer un m&#233;canisme d'exportation et d'importation de la configuration int&#233;gr&#233; &#224; SPIP ou au plugin Dump voire &#224; un plugin d&#233;di&#233;. Le format du fichier d'export reste &#224; d&#233;terminer : YAML, XML, Texte... Il pourrait &#234;tre cr&#233;&#233; dans &lt;code class='spip_code' dir='ltr'&gt;tmp/dump&lt;/code&gt; afin de ne pas multiplier les r&#233;pertoires et s'appeler &lt;code class='spip_code' dir='ltr'&gt;config_[${prefixeplugin}|plugins|spip]_${date_heure}&lt;/code&gt; en fonction du choix d'exportation.&lt;/p&gt; &lt;p&gt;On pourrait aussi envisager des pages d'export et d'import de la configuration &#224; l'instar de celles de sauvegarde et restauration de la base de donn&#233;es propos&#233;e par le plugin Dump. Le choix entre un plugin donn&#233;, tous les plugins et SPIP serait propos&#233; syst&#233;matiquement.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Nettoyage des variables de configuration&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;La probl&#233;matique&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Au fur et &#224; mesure que l'on installe, active, d&#233;sactive ou d&#233;sinstalle des plugins, la table &lt;code class='spip_code' dir='ltr'&gt;spip_meta&lt;/code&gt; s'engorge d'enregistrements inutiles sauf si la configuration des plugins est contenue dans une table d&#233;di&#233;e d&#233;sign&#233;e par l'attribut &#171; meta &#187; de la balise &lt;code class='spip_code' dir='ltr'&gt;&lt;paquet&gt;&lt;/code&gt; (cas tr&#232;s rare).&lt;/p&gt; &lt;p&gt;Si cela n'est pas plus dangereux que de laisser les tables du plugin Notation sans qu'elles soient utilis&#233;es, ce n'est pas non plus satisfaisant. Je suis d'ailleurs tomb&#233; sur un probl&#232;me r&#233;cemment o&#249; ayant supprim&#233; le plugin STEP par FTP, je n'ai donc pas d&#233;truit proprement la table &lt;code class='spip_code' dir='ltr'&gt;spip_plugins&lt;/code&gt;. Or, en migrant &#224; SPIP 3.0 j'ai install&#233; automatiquement SVP qui cr&#233;e lui aussi une table &lt;code class='spip_code' dir='ltr'&gt;spip_plugins&lt;/code&gt; : le r&#233;sultat a &#233;t&#233; un peu surprenant.&lt;/p&gt; &lt;p&gt;D&#233;sinstaller un plugin devrait donc toujours s'accompagner de l'effacement en base de donn&#233;es de toutes ses traces.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Les pistes de solution&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;L&#224; encore la &lt;strong&gt;d&#233;claration des variables de configuration&lt;/strong&gt; permettrait de s'acquitter automatiquement de cette tache. En appelant une fonction &lt;code class='spip_code' dir='ltr'&gt;vider_config_plugin('prefixeplugin')&lt;/code&gt; dans la fonction actuelle &lt;code class='spip_code' dir='ltr'&gt;${prefixe}_vider_tables()&lt;/code&gt; ou peut-&#234;tre en l'int&#233;grant syst&#233;matiquement dans le m&#233;canisme de d&#233;sinstallation on pourrait supprimer les enregistrements des metas du plugin. &lt;br class='manualbr' /&gt;Cette fonction pourrait aussi s'occuper de supprimer automatiquement la meta &lt;code class='spip_code' dir='ltr'&gt;prefixeplugin_base_version&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;En outre, l'existence d'une fonction d'export des variables de configuration permettrait de sauvegarder la configuration du plugin avant de la supprimer compl&#232;tement.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb1'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh1' class='spip_note' title='Notes 1' rev='footnote'&gt;1&lt;/a&gt;] &lt;/span&gt;Il convient aussi de r&#233;fl&#233;chir &#224; d&#233;clarer les variables de configuration de SPIP pour identifier clairement cette liste lors de l'export et de l'import et pouvoir nettoyer la table &lt;code class='spip_code' dir='ltr'&gt;spip_meta&lt;/code&gt; pendant la phase de transition.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>&#201;volutions de la gestion des th&#232;mes sous SPIP 3</title>
		<link>http://blog.spip.net/Evolutions-de-la-gestion-des-themes-sous-SPIP-3.html</link>
		<guid isPermaLink="true">http://blog.spip.net/Evolutions-de-la-gestion-des-themes-sous-SPIP-3.html</guid>
		<dc:date>2012-10-31T09:27:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Joseph</dc:creator>


		<dc:subject>R&#233;flexions</dc:subject>

		<description>&lt;p&gt;La gestion des th&#232;mes dans SPIP a connu de multiples &#233;volutions. Actuellement, deux logiques diff&#233;rentes coexistent (SVP et Zen-Garden). Nous tentons ici de poser les bases d'une discussion sur les &#233;volutions possibles de cette gestion sous SPIP 3.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique24" rel="directory"&gt;Les th&#232;mes&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot1" rel="tag"&gt;R&#233;flexions&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;span class=&quot;notice&quot; style=&quot;width: auto;&quot;&gt;Cet article est maintenant en discussion sur &lt;a href=&quot;http://blog.spip.net/Evolutions-de-la-gestion-des-themes-sous-SPIP-3.html&quot; class='spip_out' rel='external'&gt;SPIP.blog&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;La gestion des th&#232;mes dans SPIP a connu de multiples &#233;volutions. La situation actuelle n'est pas satisfaisante, avec deux logiques diff&#233;rentes qui coexistent (SVP et Zen-Garden). Nous tentons ici de poser les bases d'une discussion sur les &#233;volutions possibles de la gestion des th&#232;mes sous SPIP 3.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Historique&lt;/h3&gt;
&lt;p&gt;Au cours des derni&#232;res ann&#233;es, plusieurs approches de gestion des th&#232;mes / habillages ont &#233;t&#233; propos&#233;es. On pourra se r&#233;f&#233;rer par exemple au plugin &lt;a href=&quot;http://contrib.spip.net/Plugin-Habillages&quot; class='spip_out' rel='external'&gt;Habillages&lt;/a&gt; ou &#224; &lt;a href=&quot;http://contrib.spip.net/Plugin-Sktheme-1547&quot; class='spip_out' rel='external'&gt;Sktheme&lt;/a&gt; (tous deux d&#233;velopp&#233;s pour SPIP 1.9.2).&lt;/p&gt; &lt;p&gt;Le projet Zpip d&#233;velopp&#233; &#224; partir de 2009 pour SPIP 2.0 et sup&#233;rieur a apport&#233; entre autres :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; un m&#233;canisme de g&#233;n&#233;ration des pages HTML organis&#233;s en blocs (contenu, navigation, extra...) ;&lt;/li&gt;&lt;li&gt; une &lt;a href=&quot;http://contrib.spip.net/Conventions-de-nommage-dans-Zpip&quot; class='spip_out' rel='external'&gt;convention de nommage&lt;/a&gt; (ou nomenclature Z) des classes CSS utilis&#233;es par un squelette.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Plus pr&#233;cis&#233;ment, dans le contexte Zpip 1, le squelette Zpip-dist fournit &#224; la fois le moteur de g&#233;n&#233;ration des pages et un contenu HTML des blocs de page suivant cette nomenclature Z.&lt;/p&gt; &lt;p&gt;Est alors d&#233;l&#233;gu&#233; &#224; un th&#232;me Z de fixer le layout de la page, c'est-&#224;-dire l'organisation des blocs dans la page (mais pas leur contenu) et de fournir un habillage CSS correspondant &#224; la nomenclature Z.&lt;/p&gt; &lt;p&gt;Cette notion de nomenclature est importante car elle d&#233;finit un formalisme permettant d'avoir plusieurs variations de squelettes et plusieurs habillages diff&#233;rents pouvant fonctionner ensemble.&lt;/p&gt; &lt;p&gt;Les th&#232;mes Z se pr&#233;sentent sous la forme d'un plugin (voir &lt;a href=&quot;http://contrib.spip.net/Ecrire-un-theme-pour-Zpip&quot; class='spip_out' rel='external'&gt;&#201;crire un th&#232;me pour Zpip&lt;/a&gt;) avec cependant quelques &#233;l&#233;ments qui diff&#232;rent par rapport aux autres plugins :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Historiquement, tous les th&#232;mes avait le m&#234;me pr&#233;fixe &lt;code class='spip_code' dir='ltr'&gt;theme&lt;/code&gt; afin d'assurer qu'un seul th&#232;me puisse &#234;tre activ&#233; &#224; la fois.&lt;/li&gt;&lt;li&gt; Un th&#232;me peut soit &#234;tre install&#233; dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;plugins/&lt;/code&gt; et &#234;tre activ&#233; classiquement, soit &#234;tre install&#233; dans un r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;themes/&lt;/code&gt; pour &#234;tre activ&#233; via &lt;a href=&quot;http://contrib.spip.net/SPIP-Zen-Garden&quot; class='spip_out' rel='external'&gt;Zen-garden&lt;/a&gt; un gestionnaire de th&#232;mes.&lt;/li&gt;&lt;li&gt; Un th&#232;me ne peut pas d&#233;finir de d&#233;pendances ou user des pipelines car s'il est activ&#233; via Zen-Garden, ces d&#233;pendances et pipelines ne seront pas prises en compte. En effet, Zen-Garden n'active pas un th&#232;me (au sens de l'activation d'un plugin) mais ajoute simplement le r&#233;pertoire du plugin dans la liste des chemins.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Zen-Garden a &#233;volu&#233; pour pouvoir g&#233;rer &#233;galement les th&#232;mes d'autres squelettes. C'est le cas notamment des th&#232;mes pour Sarka-SPIP. Zen-Garden filtre la liste des th&#232;mes propos&#233;es &#224; l'utilisateur en se basant sur la balise &lt;code class='spip_code' dir='ltr'&gt;utilise&lt;/code&gt; du fichier &lt;code class='spip_code' dir='ltr'&gt;plugin.xml&lt;/code&gt; des th&#232;mes disponibles localement sur un site. Ainsi, si Zpip est actif sur le site, Zen-Garden n'affichera que les th&#232;mes ayant &lt;code class='spip_code' dir='ltr'&gt;&lt;utilise id=&quot;Z&quot; /&gt;&lt;/code&gt; dans leur fichier &lt;code class='spip_code' dir='ltr'&gt;plugin.xml&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;En mai 2011, et suite &#224; la r&#233;flexion men&#233;e sur le concept de paquets et de plugins, les th&#232;mes disposent dor&#233;navant de leur propre pr&#233;fixe (un pr&#233;fixe diff&#233;rent par th&#232;me). Cela permet de g&#233;rer correctement le num&#233;ro de version de chaque th&#232;me et leur gestion, notamment par SVP. Par ailleurs, les th&#232;mes deviennent identifi&#233;s via une cat&#233;gorie de plugins sp&#233;cifique (la cat&#233;gorie th&#232;mes).&lt;/p&gt; &lt;p&gt;&#192; partir de septembre 2011 (voir &lt;a href=&quot;http://zone.spip.org/trac/spip-zone/changeset/51635/_plugins_/zen-garden&quot; class='spip_out' rel='external'&gt;commit 51365&lt;/a&gt;), Zen-Garden prends en compte &#224; la fois les th&#232;mes install&#233;s dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;themes/&lt;/code&gt; et ceux install&#233;s dans &lt;code class='spip_code' dir='ltr'&gt;plugins/&lt;/code&gt;. De plus, Zen-Garden masque dor&#233;navant les th&#232;mes dans la liste des plugins (exec=admin_plugin) dans l'interface priv&#233;e de SPIP (voir &lt;a href=&quot;http://zone.spip.org/trac/spip-zone/changeset/51644/_plugins_/zen-garden&quot; class='spip_out' rel='external'&gt;commit 51644&lt;/a&gt;).&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Situation actuelle et limites&lt;/h3&gt;
&lt;p&gt;SPIP 3 embarque SVP, un nouveau syst&#232;me de gestion des plugins/paquets permettant notamment de t&#233;l&#233;charger facilement un paquet, de g&#233;rer les mises &#224; jour et de prendre en compte les d&#233;pendances.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Site utilisant SVP sans Zen-Garden&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Sur un site utilisant seulement SVP sans Zen-Garden, l'installation d'un th&#232;me doit se faire au m&#234;me titre que les autres plugins. Autrement dit, le th&#232;me doit &#234;tre install&#233; dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;plugins/&lt;/code&gt;. Il revient cependant &#224; l'utilisateur d'&#234;tre vigilant &#224; n'activer qu'un seul th&#232;me &#224; la fois, SVP permettant actuellement d'activer plusieurs th&#232;mes &#224; la fois. De plus, c'est &#224; l'utilisateur de s'assurer que le th&#232;me activ&#233; correspond bien au squelette qu'il utilise. Il n'y a pas d'information sp&#233;cifique (except&#233; peut-&#234;tre dans le descriptif du plugin) indiquant s'il s'agit d'un th&#232;me pour Zpip 1, Zpip 2 ou Sarka-SPIP (ou autre...).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Site utilisant SVP et Zen-Garden&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Lors de l'utilisation conjointe de SVP et de Zen-Garden, l'utilisateur doit &#234;tre vigilant &#224; ne pas activ&#233; un seul th&#232;me dans SVP dans la mesure o&#249; Zen-Garden utilise un autre syst&#232;me pour sp&#233;cifier le th&#232;me &#224; utiliser. Zen-Garden ne proc&#232;de &#224; aucune v&#233;rification quant &#224; l'activation &#233;ventuelle (au sens d'activation d'un plugin SPIP) d'un plugin de th&#232;me. D&#232;s lors, si un th&#232;me est d&#233;j&#224; activ&#233; dans SVP, il peut arriver que le choix effectu&#233; dans Zen-Garden reste sans effet si le th&#232;me activ&#233; dans SVP est prioritaire sur Zen-Garden.&lt;/p&gt; &lt;p&gt;&#192; l'heure actuelle, sous SPIP 3, ni la gestion des th&#232;mes via SVP ni celle via Zen-Garden n'est satisfaisante.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;R&#233;int&#233;grer compl&#232;tement les th&#232;mes dans la logique plugins&lt;/h3&gt;
&lt;p&gt;L'adoption d'un pr&#233;fixe unique pour chaque th&#232;me a &#233;t&#233; une premi&#232;re &#233;tape vers une gestion des th&#232;mes comme des plugins &#224; part enti&#232;re. Cependant, les th&#232;mes ont toujours certaines contraintes d&#233;rogatoires par rapport aux autres plugins, notamment le fait qu'ils ne peuvent utiliser les pipelines ou d&#233;clarer d'autres d&#233;pendances. Cela emp&#234;che par exemple un th&#232;me de pouvoir disposer d'un formulaire de configuration. Cela &#233;tait voulu en 2009 (voir &lt;a href=&quot;http://contrib.spip.net/Ecrire-un-theme-pour-Zpip&quot; class='spip_out' rel='external'&gt;&#201;crire un th&#232;me pour Zpip&lt;/a&gt;). Il &#233;tait cependant envisag&#233; que : &lt;q&gt;La notion de variante pourra &#234;tre int&#233;gr&#233;e au Zen Garden dans le futur, pour en simplifier la gestion pour les d&#233;veloppeurs et leur &#233;viter de dupliquer une partie des images et des css.&lt;/q&gt; Cette notion de variante n'a pour l'heure jamais &#233;t&#233; formalis&#233;e ni impl&#233;ment&#233;e.&lt;/p&gt; &lt;p&gt;L'absence de d&#233;pendance oblige un plugin de th&#232;me d'embarquer tous les &#233;l&#233;ments qu'il utilise, ce qui va &#224; l'encontre de la logique actuelle visant &#224; d&#233;couper en plusieurs plugins chaque fonctionnalit&#233;. Or, un plugin de th&#232;mes peut d&#232;s lors utiliser des librairies ou des outils distribu&#233;s par d'autres plugins (par exemple Less CSS ou bootstrap). D'ailleurs, certains th&#232;mes d&#233;clarent d&#233;j&#224; des d&#233;pendances comme &lt;a href=&quot;http://plugins.spip.net/theme_arclite_brown.html&quot; class='spip_out' rel='external'&gt;Arclite Brun&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Actuellement, on se retrouve avec deux fonctionnements diff&#233;rents :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; une activation avec SVP va correctement v&#233;rifier les d&#233;pendances mais &#233;galement les compatibilit&#233;s ;&lt;/li&gt;&lt;li&gt; sous Zen Garden, les d&#233;pendances et compatibilit&#233; ne seront pas v&#233;rifi&#233;es et les fonctionnalit&#233;s additionnelles ne seront pas prises en compte.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour Zen-Garden :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Une solution serait de faire &#233;voluer Zen-Garden pour que ce dernier utilise l'API fournie par SVP afin d'activer proprement le th&#232;me utilis&#233;. L'ensemble des d&#233;pendances seront ainsi correctement v&#233;rifi&#233;es et prise en compte. Par ailleurs, le r&#233;glage du th&#232;me actif sera maintenu m&#234;me si Zen-Garden est par la suite d&#233;sactiv&#233;.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Unicit&#233; du th&#232;me&lt;/h3&gt;
&lt;p&gt;Il importe qu'un seul th&#232;me soit actif &#224; la fois. Ce que g&#232;re Zen-Garden mais pas SVP.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour SVP :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;SVP pourrait &#233;voluer pour n'activer qu'un seul th&#232;me &#224; la fois, en se basant sur l'attribut &lt;code class='spip_code' dir='ltr'&gt;categorie&lt;/code&gt; de &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Autrement dit, l'activation d'un th&#232;me doit provoquer la d&#233;sactivation de l'autre th&#232;me d&#233;j&#224; actif. De m&#234;me, si l'activation simultan&#233;e de deux th&#232;mes (ou plus) est demand&#233;e, un message d'avertissement doit &#234;tre donn&#233; &#224; l'utilisateur (car la situation est ind&#233;termin&#233;e). Enfin, lors du t&#233;l&#233;chargement simultan&#233; de plusieurs th&#232;mes avec SVP, le t&#233;l&#233;chargement ne doit pas &#234;tre suivie d'une activation puisqu'on ne peut savoir quel est le bon th&#232;me &#224; activer.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;R&#233;pertoire Th&#232;mes&lt;/h3&gt;
&lt;p&gt;Une des cons&#233;quences d'une gestion des th&#232;mes au m&#234;me titre que les autres plugins est la disparation du r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;themes/&lt;/code&gt;, tous les th&#232;mes devant &#234;tre alors install&#233;s dans &lt;code class='spip_code' dir='ltr'&gt;plugins/&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour Zen-Garden :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ne prendre en compte que le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;plugins/&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Filtrage des th&#232;mes&lt;/h3&gt;
&lt;p&gt;Une des probl&#233;matiques de la gestion des th&#232;mes est de g&#233;rer la &#171; compatibilit&#233; &#187; entre th&#232;me et squelette. En effet, cette compatibilit&#233; est d&#233;pendante de la nomenclature HTML/CSS ou convention de nommage des classes qui doit &#234;tre commune entre le th&#232;me et le squelette.&lt;/p&gt; &lt;p&gt;Pour le moment, il n'y a pas de d&#233;claration formelle de cette nomenclature. SVP ne proc&#232;de &#224; aucune v&#233;rification ni filtrage. Zen-Garden pour sa part filtre les th&#232;mes disponibles pour n'afficher que les th&#232;mes &#171; compatibles &#187; avec le squelette actif sur le site.&lt;/p&gt; &lt;p&gt;Actuellement, ce filtrage se fait de la mani&#232;re suivante dans Zen-garden :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_PHP cadre spip_cadre&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// si on utilise ZPIP-v2 ou ZPIP-v2 invalider les themes qui n'utilisent pas&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// ce skel&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'_DIR_PLUGIN_ZPIP'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;zpip&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;elseif&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'_DIR_PLUGIN_Z'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;z&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;elseif&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/defined&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;defined&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'_ZENGARDEN_FILTRE_THEMES'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;_ZENGARDEN_FILTRE_THEMES&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$themes&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$k&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&gt;&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$theme&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$keep&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$theme&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'utilise'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$u&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strncasecmp&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;strncasecmp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$u&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;a href=&quot;http://www.php.net/max&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;max&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$u&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'nom'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$search&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #000088;&quot;&gt;$keep&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900; font-weight: bold;&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;continue&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$keep&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;a href=&quot;http://www.php.net/unset&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;unset&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$themes&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$k&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/ea5c23132a1607b64e8975784f750423.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Zen-Garden g&#232;re donc nativement les th&#232;mes Z. Pour les autres squelettes, ces derniers doivent d&#233;clarer dans un fichier d'options la constante &lt;code class='spip_code' dir='ltr'&gt;_ZENGARDEN_FILTRE_THEMES&lt;/code&gt; qui doit correspondre au pr&#233;fixe du squelette.&lt;/p&gt; &lt;p&gt;Une premi&#232;re limite est que la v&#233;rification est effectu&#233;e uniquement sur la balise &lt;code class='spip_code' dir='ltr'&gt;utilise&lt;/code&gt; de &lt;code class='spip_code' dir='ltr'&gt;plugin/xml/paquet.xml&lt;/code&gt; et ne prends pas en compte la balise &lt;code class='spip_code' dir='ltr'&gt;necessite&lt;/code&gt;, ce qui ajoute une contrainte de r&#233;daction aux plugins. Par exemple, le th&#232;me &lt;a href=&quot;http://plugins.spip.net/theme_brownie.html&quot; class='spip_out' rel='external'&gt;Brownie pour Zpip 2&lt;/a&gt; n'est pas correctement filtr&#233; car il utilise un n&#233;cessite.&lt;/p&gt; &lt;p&gt;Par ailleurs, cela exclu la possibilit&#233; que deux squelettes diff&#233;rents (ayant donc deux pr&#233;fixes diff&#233;rents) puissent utiliser une m&#234;me nomenclature.&lt;/p&gt; &lt;p&gt;Par exemple, dans le cadre des &#233;volutions du projet Z (qui sont en cours de d&#233;veloppement et donc susceptible d'&#233;voluer), Zpip v1 se retrouver scinder en deux, avec d'un c&#244;t&#233; Zcore qui impl&#233;mente le moteur de g&#233;n&#233;ration des pages et Zpip-dist 2 de l'autre qui est un squelette Z utilisant Zcore et suivant une nomenclature donn&#233;e. Il est possible de r&#233;aliser un squelette proposant un autre contenu que Zpip-dist mais respectant la m&#234;me nomenclature et donc pouvant utiliser les m&#234;mes th&#232;mes. La question est alors de savoir &lt;strong&gt;comment indiquer que ce squelette suit cette nomenclature donn&#233;e&lt;/strong&gt; ?&lt;/p&gt; &lt;p&gt;Il me semble que trois approches peuvent &#234;tre discut&#233;es.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Surcharger le squelette de base&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ce second squelette qui utiliserait la nomenclature de Zpip, doit n&#233;cessiter le squelette Zpip-dist et d&#232;s lors surcharger Zpip-dist pour effectuer ces propres modifications.&lt;/p&gt; &lt;p&gt;Cette approche a cependant plusieurs inconv&#233;nients, en particulier celui d'avoir &#224; effectuer le cas &#233;ch&#233;ant un &#171; reset &#187; du squelette surcharger. Par exemple, si ce second squelette n'utilise pas les br&#232;ves, il lui faudra surcharger les squelettes de br&#232;ves fournis par d&#233;faut. De m&#234;me, cela impose d'avoir &#224; suivre les mises &#224; jour du squelette surcharg&#233;, en particulier quand ce dernier ajoute de nouveaux &#233;l&#233;ments&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb2-1' class='spip_note' rel='footnote' title='Par exemple, si Zpip-dist fourni dans une mise &#224; jour un squelette ce qui (...)' id='nh2-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. Procurer le squelette de base&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Une autre astuce consisterait &#224; utiliser la balise &lt;code class='spip_code' dir='ltr'&gt;procure&lt;/code&gt; dans le second squelette. Ce dernier d&#233;clarerait ainsi qu'il &#171; procure Zpip &#187; et d&#233;finirait la constante &lt;code class='spip_code' dir='ltr'&gt;_ZENGARDEN_FILTRE_THEMES&lt;/code&gt; comme &#233;tant &#233;gale &#224; &quot;Zpip&quot;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. Une d&#233;claration formelle de la nomenclature utilis&#233;e dans paquet.xml&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Les deux approches pr&#233;c&#233;dentes reposent sur l'utilisation des balises &lt;code class='spip_code' dir='ltr'&gt;utilise&lt;/code&gt;, &lt;code class='spip_code' dir='ltr'&gt;necessite&lt;/code&gt; ou &lt;/code&gt;procure&lt;/code&gt; de &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt; mais ne sont pas tout a fait s&#233;mantiquement exactes.&lt;/p&gt; &lt;p&gt;Il serait d&#232;s lors plus rigoureux d'&#233;tendre la DTD de &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt; en y ajoutant un attribut d&#233;di&#233;, &lt;code class='spip_code' dir='ltr'&gt;nomenclature&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;convention&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;type_theme&lt;/code&gt; (&#224; discuter). Cet attribut permettrait de sp&#233;cifier la nomenclature HTML/CSS utilis&#233;e par un th&#232;me ou par un squelette. Par exemple, les th&#232;mes pour Zpip v1 pourraient indiquer &lt;code class='spip_code' dir='ltr'&gt;nomenclature=&quot;zpip1&quot;&lt;/code&gt;, tandis que ceux pour Zpip v2 indiqueraient &lt;code class='spip_code' dir='ltr'&gt;nomenclature=&quot;zpip2&quot;&lt;/code&gt; et ceux pour Sarka-SPIP &lt;code class='spip_code' dir='ltr'&gt;nomenclature=&quot;sarkaspip&quot;&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Cet attribut ne concernerait que les plugins de la cat&#233;gorie &lt;code class='spip_code' dir='ltr'&gt;themes&lt;/code&gt; et ceux de la cat&#233;gorie &lt;code class='spip_code' dir='ltr'&gt;squelettes&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;La &#171; compatibilit&#233; &#187; (&#224; d&#233;faut d'un meilleur terme dans l'imm&#233;diat) entre un squelette et un th&#232;me serait d&#232;s lors &#233;tablie &#224; partir de cette d&#233;claration.&lt;/p&gt; &lt;p&gt;Par ailleurs, cette information pourrait &#233;galement &#234;tre utilis&#233;e sur &lt;a href=&quot;http://plugins.spip.net/&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://plugins.spip.net&lt;/a&gt; pour afficher les squelettes compatibles avec un th&#232;me et les th&#232;mes compatibles avec un squelette.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;&#201;l&#233;ments de discussion&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Il importe de faire un choix quant &#224; la meilleure fa&#231;on de d&#233;clarer la nomenclature HTML/CSS utilis&#233;e par un squelette et par un th&#232;me. Les plugins SVP et Zen-garden (ainsi que &lt;a href=&quot;http://plugins.spip.net/&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://plugins.spip.net&lt;/a&gt;) devant ensuite &#234;tre mis &#224; jour en cons&#233;quence.&lt;/p&gt;
&lt;/blockquote&gt;&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Question de vocabulaires&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Doit-on parler de th&#232;mes &#171; compatibles &#187; avec un squelette, c'est-&#224;-dire partageant une m&#234;me nomenclature ou bien est-il pr&#233;f&#233;rable, pour &#233;viter toute confusion, d'avoir recours &#224; un autre terme. Si un autre terme est &#224; privil&#233;gier, on pourrait alors parler de th&#232;me &#171; conciliable &#187; avec un squelette donn&#233;, ou &#224; l'oppos&#233; de th&#232;me &#171; inconciliable &#187; si ce dernier utilise une autre nomenclature.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quelle que soit la solution retenue, il importe de faire &#233;voluer SVP afin de rendre compte de la compatibilit&#233;/conciliabilit&#233; entre un th&#232;me et un squelette.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour SVP :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Au m&#234;me titre que les versions obsol&#232;tes ou incompatibles d'un paquet sont pr&#233;sent&#233;es en gris&#233;, si un plugin de la cat&#233;gorie squelette est actif et qu'il pr&#233;cise une nomenclature HTML/CSS, les plugins de th&#232;mes ne suivant pas la m&#234;me nomenclature HTML/CSS devraient &#234;tre affich&#233;s en gris&#233;s avec un message indiquant qu'il ne sont pas compatibles/conciliables avec le squelette XXX actuellement actif sur le site. On doit pouvoir garder la possibilit&#233; de les supprimer et/ou de les mettre &#224; jour.&lt;/p&gt; &lt;p&gt;De m&#234;me, les r&#233;sultats d'une recherche (dans le cadre de l'installation d'un plugin) doivent &#233;galement pr&#233;senter les th&#232;mes incompatibles/inconciliables avec un message explicite.&lt;/p&gt; &lt;p&gt;Par ailleurs, l'option &lt;i&gt;La version la plus r&#233;cente&lt;/i&gt; doit tenir compte de cette compatibilit&#233;/conciliabilit&#233; et bien afficher pour les th&#232;mes la version la plus r&#233;cente du th&#232;me compatible/conciliable avec le squelette actif sur le site.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Calcul du chemin&lt;/h3&gt;
&lt;p&gt;Un th&#232;me a besoin d'&#234;tre prioritaire vis-&#224;-vis du squelette pour pouvoir, par exemple, surcharger une CSS par d&#233;faut qui serait fournie par le squelette.&lt;/p&gt; &lt;p&gt;Cette priorit&#233; est actuellement &#233;tablie du fait de la balise &lt;code class='spip_code' dir='ltr'&gt;utilise&lt;/code&gt; dans le &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt; du th&#232;me. Cependant, si la d&#233;claration de la nomenclature devient possible dans &lt;code class='spip_code' dir='ltr'&gt;paquet.xml&lt;/code&gt; et que d&#232;s lors deux squelettes diff&#233;rents (avec donc deux pr&#233;fixes diff&#233;rents) peuvent partager une m&#234;me nomenclature, il n'est pas forc&#233;ment pertinent d'avoir &#224; ajouter un utilise par squelette diff&#233;rent dans le paquet.xml de chaque th&#232;me.&lt;/p&gt; &lt;p&gt;Une solution simple consisterait &#224; consid&#233;rer que, par d&#233;faut et sauf mention contraire, un plugin de la cat&#233;gorie 'theme' est prioritaire sur un plugin de la cat&#233;gorie 'squelette'.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour SPIP-core (ou SVP ?) :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Lors du calcul du chemin, et avant prise en compte des modifications induites par les necessite et les utilise, consid&#233;rer que les plugins de la cat&#233;gorie 'theme' sont prioritaires sur ceux de la cat&#233;gorie 'squelette'.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h3 class=&quot;spip&quot;&gt;Th&#232;mes de l'espace priv&#233;&lt;/h3&gt;
&lt;p&gt;J'ai identifi&#233; deux plugins class&#233;s dans la cat&#233;gorie 'theme' mais portant sur une personnalisation de l'espace priv&#233; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;http://plugins.spip.net/mes_preferences.html&quot; class='spip_out' rel='external'&gt;Mes Pr&#233;f&#233;rences&lt;/a&gt; et &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://plugins.spip.net/basicone.html&quot; class='spip_out' rel='external'&gt;Basic&#244;ne&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces plugins intervenant dans l'espace priv&#233; ne sont pas concern&#233;s par la r&#232;gle d'unicit&#233; du th&#232;me actif. Ces deux plugins pourraient tout &#224; fait &#234;tre class&#233;s dans la cat&#233;gorie &lt;i&gt;Configuration, maintenance&lt;/i&gt;, au m&#234;me titre que les plugins &lt;a href=&quot;http://plugins.spip.net/priveperso.html&quot; class='spip_out' rel='external'&gt;Personnaliser l'espace priv&#233;&lt;/a&gt; et &lt;a href=&quot;http://plugins.spip.net/themes_interface_privee.html&quot; class='spip_out' rel='external'&gt;Th&#232;mes pour l'interface priv&#233;e&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class=&quot;spip&quot;&gt;
&lt;p&gt;&lt;strong&gt;Implications pour paquet.xml :&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;La cat&#233;gorie &#8220;theme&#8221; devrait &#234;tre pr&#233;cis&#233;e et r&#233;serv&#233;e uniquement aux plugins de th&#232;mes pour l'espace public &#224; utiliser en conjonction avec un squelette.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Aujourd'hui, deux logiques diff&#233;rentes s'appliquent aux th&#232;mes. D'un c&#244;t&#233;, SVP g&#232;re les th&#232;mes comme des plugins &#224; part enti&#232;re mais ne prends pas en compte leur sp&#233;cificit&#233; (unicit&#233; du th&#232;me actif et compatibilit&#233;/conciliabilit&#233; avec un squelette donn&#233;). De l'autre, Zen-Garden prends en compte cette sp&#233;cificit&#233; mais g&#232;re les th&#232;mes de mani&#232;re d&#233;rogatoire, les th&#232;mes n'&#233;tant pas activ&#233;s au m&#234;me titre que les autres plugins.&lt;/p&gt; &lt;p&gt;En terme d'&#233;volution, il serait souhaitable que SVP et son API &#233;voluent pour prendre en compte la sp&#233;cificit&#233; des th&#232;mes. Ces derniers doivent pouvoir &#234;tre enti&#232;rement g&#233;rables uniquement via SVP.&lt;/p&gt; &lt;p&gt;Zen Garden, quant &#224; lui, permet d'offrir une interface plus &lt;i&gt;&lt;span lang='en'&gt;user-friendly&lt;/span&gt;&lt;/i&gt; pour g&#233;rer les th&#232;mes, mais devraient reposer sur l'API de SVP pour leur activation. L'interface de Zen Garden pourrait &#233;galement &#233;voluer pour lister les th&#232;mes compatibles disponibles au t&#233;l&#233;chargement et les installer en un clic. Enfin, les fonctionnalit&#233;s telles que la pr&#233;visualisation d'un th&#232;me et le &lt;span lang='en'&gt;switcher&lt;/span&gt; de th&#232;me restent du ressort de Zen Garden.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb2-1'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh2-1' class='spip_note' title='Notes 2-1' rev='footnote'&gt;1&lt;/a&gt;] &lt;/span&gt;Par exemple, si Zpip-dist fourni dans une mise &#224; jour un squelette &lt;code class='spip_code' dir='ltr'&gt;extra2/plan.html&lt;/code&gt; ce qui n'&#233;tait pas le cas avant, le squelette surchargeant devra prendre en compte ce nouvel &#233;l&#233;ment &#224; surcharger.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Aide en ligne : proposition alternative pour une aide embarqu&#233;e</title>
		<link>http://blog.smellup.net/spip.php?article63</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article63</guid>
		<dc:date>2012-10-20T21:41:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Joseph</dc:creator>



		<description>&lt;p&gt;Cet article fait suite &#224; la r&#233;flexion commenc&#233;e en D&#233;cembre 2011 et qui envisageait une solution d'aide en ligne distante, motoris&#233;e par un serveur d&#233;di&#233;e. La pr&#233;sente proposition est une alternative reposant sur une aide en ligne embarqu&#233;e dans le core ou dans les plugins et s'appuyant sur des squelettes.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique11" rel="directory"&gt;L'Aide en ligne&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Dans le cadre de la r&#233;flexion autour de la restructuration de l'aide en ligne de SPIP, deux articles ont d&#233;j&#224; &#233;t&#233; r&#233;dig&#233;s sur ce site :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;http://blog.smellup.net/spip.php?article42&quot; class='spip_in'&gt;Aide en ligne : situation actuelle et limites&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://blog.smellup.net/spip.php?article43&quot; class='spip_in'&gt;Aide en ligne : fonctionnalit&#233;s attendues d'un nouveau syst&#232;me&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La proposition qui avait &#233;t&#233; faite reposait, comme l'aide actuelle, sur des fichiers d'aide g&#233;r&#233;s sur un serveur distant, SPIP t&#233;l&#233;chargeant &#224; la demande les fichiers d'aide n&#233;cessaires. Les discussions qui ont suivi cette premi&#232;re proposition ont &#233;voqu&#233; un certain nombre de points durs inh&#233;rents &#224; la solution :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Comment g&#233;rer une aide versionn&#233;e qui corresponde bien &#224; la version de SPIP et des plugins qui sont install&#233;es sur le site ? Est-il n&#233;cessaire de recr&#233;er la roue alors que l'on utilise d&#233;j&#224; SVN/GIT pour le versioning ?&lt;/li&gt;&lt;li&gt; Faut-il recr&#233;er un syst&#232;me de gestion des traductions alors qu'il existe d&#233;j&#224; &lt;a href=&quot;http://trad.spip.net/&quot; class='spip_url spip_out' rel='external'&gt;http://trad.spip.net/&lt;/a&gt; ?&lt;/li&gt;&lt;li&gt; Quid des sites locaux qui n'ont pas d'acc&#232;s distants ?&lt;/li&gt;&lt;li&gt; Pourquoi ne pas utiliser les m&#233;canismes d&#233;j&#224; en place dans SPIP ?&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La pr&#233;sente proposition est donc une alternative reposant pour une aide en ligne embarqu&#233;e dans le core ou les plugins et s'appuyant sur des squelettes.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Concepts&lt;/h3&gt;
&lt;p&gt;L'aide en ligne sera compos&#233;e de diff&#233;rentes &lt;strong&gt;entr&#233;es d'aide&lt;/strong&gt; organis&#233;es en &lt;strong&gt;rubriques d'aide&lt;/strong&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb3-1' class='spip_note' rel='footnote' title='Sur un seul niveau.' id='nh3-1'&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;Les &lt;strong&gt;rubriques d'aide&lt;/strong&gt; auront simplement un &lt;strong&gt;identifiant&lt;/strong&gt; et un &lt;strong&gt;titre&lt;/strong&gt; et n'ont d'autres vocations que d'organiser les diff&#233;rentes entr&#233;es.&lt;/p&gt; &lt;p&gt;Plusieurs rubriques d'aide g&#233;n&#233;riques seront propos&#233;es par d&#233;faut, telles que&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb3-2' class='spip_note' rel='footnote' title='Il s'agit ici d'exemples. La d&#233;finition des rubriques d'aide par d&#233;faut pouvant (...)' id='nh3-2'&gt;2&lt;/a&gt;]&lt;/span&gt; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Raccourcis typographiques&lt;/li&gt;&lt;li&gt; Mod&#232;les&lt;/li&gt;&lt;li&gt; Configuration&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Un plugin pourra d&#233;clarer des rubriques d'aide additionnelles, par exemple le plugin &lt;code class='spip_code' dir='ltr'&gt;mots&lt;/code&gt; pourra d&#233;clarer une nouvelle section &lt;strong&gt;Mots-Cl&#233;s&lt;/strong&gt; pour y ranger les entr&#233;es d'aide relatives aux mots-cl&#233;s.&lt;/p&gt; &lt;p&gt;Chaque &lt;strong&gt;entr&#233;e d'aide&lt;/strong&gt; sera rattach&#233;e &#224; une rubrique d'aide (afin d'organiser les diff&#233;rentes entr&#233;es), aura un &lt;strong&gt;identifiant&lt;/strong&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb3-3' class='spip_note' rel='footnote' title='L'identifiant devant &#234;tre unique, on favorisera les identifiants de la forme (...)' id='nh3-3'&gt;3&lt;/a&gt;]&lt;/span&gt;, un &lt;strong&gt;titre&lt;/strong&gt; et un squelette associ&#233; qui contiendra le contenu de l'entr&#233;e d'aide.&lt;/p&gt; &lt;p&gt;L'ensemble du syst&#232;me de gestion d'aide sera impl&#233;ment&#233; dans un plugin d&#233;di&#233; qui devra &#224; terme int&#233;grer la distribution standard de SPIP. L'aide en ligne correspondant au core sera livr&#233; par le core lui-m&#234;me et non par le plugin de gestion de l'aide.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Squelettes des entr&#233;es d'aide&lt;/h3&gt;
&lt;p&gt;Chaque plugin int&#233;grera donc sa propre aide. D&#232;s lors, l'aide en ligne sera disponible localement, y compris pour les sites sans acc&#232;s distant. L'aide disponible correspondra bien &#224; la version du plugin actuellement install&#233;e et le versionning de l'aide sera g&#233;r&#233;e comme le reste du plugin.&lt;/p&gt; &lt;p&gt;&#192; chaque entr&#233;e d'aide correspondra un squelette ayant pour nom l'identifiant de l'entr&#233;e d'aide et rang&#233; dans un sous-r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;aide/&lt;/code&gt;. Il s'agira d'un squelette comme un autre et donc l'ensemble des m&#233;canismes de SPIP pourront y &#234;tre utilis&#233;s. Par exemple, on pourra utiliser la balise &lt;code class='spip_code' dir='ltr'&gt;#AUTORISER&lt;/code&gt; ou la balise &lt;code class='spip_code' dir='ltr'&gt;#CONFIG&lt;/code&gt; pour afficher certains passages uniquement aux personnes pour qui c'est pertinent ou adapter l'aide en fonction de la configuration.&lt;/p&gt; &lt;p&gt;Par exemple, l'entr&#233;e d'aide d&#233;crivant le champs titre d'un article pourra ne mentionner le r&#244;le du surtitre et/ou du sous-titre uniquement si ces derniers ont &#233;t&#233; activ&#233;s. Il n'est pas n&#233;cessaire en effet de &#171; polluer &#187; l'aide adress&#233;e aux r&#233;dacteurs avec des informations non pertinentes. La m&#234;me entr&#233;e pourrait afficher, uniquement pour les admins, un court texte expliquant que les surtitres et sous-titres sont activables/d&#233;sactivables dans la configuration du site.&lt;/p&gt; &lt;p&gt;Les squelettes des entr&#233;es d'aide auront recours, classiquement, &#224; des cha&#238;nes de langue. Afin d'organiser ses derni&#232;res, elles pourront &#234;tre rassembl&#233;es pr&#233;f&#233;rentiellement dans un fichier &lt;code class='spip_code' dir='ltr'&gt;aide-{$prefixe_plugin}_{$lang}.php&lt;/code&gt;. La traduction de l'aide sera donc assur&#233;e, pour les plugins sur la zone, via &lt;a href=&quot;http://trad.spip.net/&quot; class='spip_url spip_out' rel='external'&gt;http://trad.spip.net/&lt;/a&gt; au m&#234;me titre que les autres cha&#238;nes de langues.&lt;/p&gt; &lt;p&gt;Les entr&#233;es pourront au besoin inclure des images (par exemple des captures d'&#233;cran), qui seront rang&#233;es dans un sous-r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;aide/images&lt;/code&gt;. Il y a le cas particulier des captures d'&#233;cran qui pourraient &#234;tre diff&#233;rentes selon la langue. On peut tout &#224; fait envisager une nouvelle balise &lt;code class='spip_code' dir='ltr'&gt;#CHEMIN_LANG{image.png}&lt;/code&gt; qui rechercherait l'existence d'un fichier &lt;code class='spip_code' dir='ltr'&gt;image-lg.png&lt;/code&gt; (o&#249; &lt;code class='spip_code' dir='ltr'&gt;lg&lt;/code&gt; est le code de la langue actuelle et se rabattrait sinon sur &lt;code class='spip_code' dir='ltr'&gt;image.png&lt;/code&gt;&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb3-4' class='spip_note' rel='footnote' title='Une telle balise serait int&#233;ressante de mani&#232;re g&#233;n&#233;rale dans SPIP, pas (...)' id='nh3-4'&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Exemple de squelette d'aide&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Il s'agit de l'aide portant sur le surtitre, le titre et le soustitre d'un article. Le fichier &lt;code class='spip_code' dir='ltr'&gt;aide/spip-arttitre.html&lt;/code&gt; contiendrait :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_SPIP cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;h1&gt;&lt;:aide-spip:titre_article:&gt;&lt;/h1&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#CONFIG&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;article_surtitre&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;|==&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;oui&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;:aide-spip:explication_surtitre:&gt;&lt;/p&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;:aide-spip:explication_titre&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;lien=&lt;span style=&quot;color: #ff0000;&quot;&gt;#URL_AIDE&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;spip-numtitre&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;:&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#CONFIG&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;article_soustitre&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;|==&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;oui&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;:aide-spip:explication_soustitre:&gt;&lt;/p&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#AUTORISER&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;configurer&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt; &lt;p&gt;&lt;em&gt;&lt;:aide-spip:explication_configurer_article_titre&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;lien=&lt;span style=&quot;color: #ff0000;&quot;&gt;#URL_ECRIRE&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;configurer_contenu&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;:&gt;&lt;/em&gt;&lt;/p&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/5cb38d81488cc817ad905ad09b23010e.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Avec les chaines de langue suivantes d&#233;clar&#233;es dans le fichier &lt;code class='spip_code' dir='ltr'&gt;lange/aide-spip_fr.php&lt;/code&gt; :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='idafb4_c0'&gt; Code &lt;/th&gt;&lt;th id='idafb4_c1'&gt; Valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idafb4_c0'&gt;titre_article&lt;/td&gt;
&lt;td headers='idafb4_c1'&gt;Titre de l'article&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idafb4_c0'&gt;explication_surtitre&lt;/td&gt;
&lt;td headers='idafb4_c1'&gt;Optionnel, le &lt;strong&gt;surtitre&lt;/strong&gt; est un titre compl&#233;mentaire plac&#233; au-dessus du titre principal de l'article. Dans la presse &#233;crite, le surtitre sert le plus souvent &#224; indiquer le type d'article (&#233;ditorial, chronique, opinion...).&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idafb4_c0'&gt;explication_titre&lt;/td&gt;
&lt;td headers='idafb4_c1'&gt;&lt;strong&gt;Titre :&lt;/strong&gt; rien de bien compliqu&#233;, il s'agit du titre de l'article. Ce dernier est &lt;strong&gt;obligatoire&lt;/strong&gt;. Pensez &#224; le r&#233;diger en respectant les r&#232;gles usuelles d'emploi des majuscules. Surtout, ne l'&#233;crivez pas tout en capitales. La mise en forme finale du titre sera effectu&#233;e par le squelette.&lt;br /&gt;Les titres peuvent &#234;tre num&#233;rot&#233;s pour un indiquer un ordre de tri des articles au sein de la rubrique. Voir &lt;a href=&quot;@lien@&quot;&gt;Num&#233;rotation des titres&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='idafb4_c0'&gt;explication_soustitre&lt;/td&gt;
&lt;td headers='idafb4_c1'&gt;Optionnel, le &lt;strong&gt;sous-titre&lt;/strong&gt; est un titre compl&#233;mentaire plac&#233; au-dessous du titre principal de l'article. Dans la presse &#233;crite, le sous-titre sert le plus souvent &#224; fournir des &#233;l&#233;ments factuels permettant de mieux situer le sujet de l'article.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='idafb4_c0'&gt;spip:explication_configurer_article_titre&lt;/td&gt;
&lt;td headers='idafb4_c1'&gt;Les administrateurs du site peuvent configurer l'utilisation ou non du surtitre et/ou du sous-titre sur la page &#171; &lt;a href=&quot;@lien@&quot;&gt;Contenu du site&lt;a/&gt; &#187;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Exemple 2&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Voici ce que pourrait &#234;tre le squelette d'une entr&#233;e d'aide expliquant le gras et l'italique&lt;span class=&quot;spip_note_ref&quot;&gt; [&lt;a href='#nb3-5' class='spip_note' rel='footnote' title='Dans le cadre de la r&#233;organisation de l'aide en ligne, il est pr&#233;vu de (...)' id='nh3-5'&gt;5&lt;/a&gt;]&lt;/span&gt;. Cette entr&#233;e d'aide sera fournie par le plugin textwheel puisque c'est ce dernier qui impl&#233;mente les raccourcis typographiques.&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_SPIP cadre spip_cadre&quot;&gt;&lt;div class=&quot;spip&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;h1&gt;&lt;:aide-textwheel:gras_italique:&gt;&lt;/h1&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;:aide-textwheel:explication_gras_italique:&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#SET&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;exemple,&lt;span style=&quot;color: #ff0000;&quot;&gt;#VAL&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;aide-textwheel:exemple_gras_italique&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;|_T&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt; &lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#VAL&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;&lt;cadre&gt;&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;|concat&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#GET&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;exemple&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;,&lt; /cadre&gt;&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;|propre&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;p&gt;&lt;:aide-textwheel:produira:&gt;&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;blockquote&lt;/span&gt; class=&quot;spip&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;#GET&lt;/span&gt;&lt;span style=&quot;color: #66cc66; font-weight: bold;&quot;&gt;&lt;span class=&quot;br0&quot;&gt;&#123;&lt;/span&gt;exemple&lt;span class=&quot;br0&quot;&gt;&#125;&lt;/span&gt;&lt;/span&gt;|propre&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&lt;/blockquote&lt;/span&gt;&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cadre_download'&gt;&lt;a href='http://blog.smellup.net/local/cache-code/b655ccd6d81446ef28afad6fdeed1bb8.txt'&gt;T&#233;l&#233;charger&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Avec les chaines de langue suivantes d&#233;clar&#233;es dans le fichier &lt;code class='spip_code' dir='ltr'&gt;lange/aide-textwheel_fr.php&lt;/code&gt; :&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id9615_c0'&gt; Code &lt;/th&gt;&lt;th id='id9615_c1'&gt; Valeur &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9615_c0'&gt;gras_italique&lt;/td&gt;
&lt;td headers='id9615_c1'&gt;Gras et italique&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9615_c0'&gt;explication_gras_italique&lt;/td&gt;
&lt;td headers='id9615_c1'&gt;L'&lt;em&gt;italique&lt;/em&gt; s'indique en pla&#231;ant le texte concern&#233; entre simples accolades. Pour du texte en &lt;strong&gt;gras&lt;/strong&gt;, utilisez des doubles accolades.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id9615_c0'&gt;exemple_gras_italique&lt;/td&gt;
&lt;td headers='id9615_c1'&gt;Du texte {en italique} et du texte {{en gras}}.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id9615_c0'&gt;produira&lt;/td&gt;
&lt;td headers='id9615_c1'&gt;produira :&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;h3 class=&quot;spip&quot;&gt;D&#233;clarer les rubriques et les entr&#233;es d'aide&lt;/h3&gt;
&lt;p&gt;Les rubriques et les entr&#233;es d'aide seront d&#233;clar&#233;es &#224; SPIP via un pipeline &lt;code class='spip_code' dir='ltr'&gt;declarer_aide&lt;/code&gt;. Cette d&#233;claration est n&#233;cessaire pour produire le sommaire de l'aide et organiser les entr&#233;es d'aide en sections.&lt;/p&gt; &lt;p&gt;Pour d&#233;clarer une nouvelle rubrique :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_PHP cadre spip_cadre&quot; data-clipboard-text=&quot;$aide[&#039;&#039;][&#039;titre&#039;] = &quot;Titre de la rubrique d&#039;aide&quot;;&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$aide&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'&lt;id_rubrique&gt;'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'titre'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;Titre de la rubrique d'aide&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Pour d&#233;clarer une entr&#233;e :&lt;/p&gt;
&lt;div class=&quot;coloration_code&quot;&gt;&lt;div class=&quot;spip_PHP cadre spip_cadre&quot; data-clipboard-text=&quot;$aide[&#039;&#039;][&#039;entres&#039;][&#039;&#039;] = &quot;Titre de l&#039;entr&#233;e&quot;;&quot;&gt;&lt;div class=&quot;php&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;color: #000088;&quot;&gt;$aide&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'&lt;id_rubrique&gt;'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'entres'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;'&lt;id_entree&gt;'&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;Titre de l'entr&#233;e&quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Le sommaire sera construit selon l'ordre du tableau.&lt;/p&gt; &lt;p&gt;Le recours &#224; un pipeline plut&#244;t qu'&#224; une d&#233;claration xml permet une plus grande souplesse. On pourra ainsi afficher dans le sommaire que les entr&#233;es pertinentes. Par exemple, le plugin br&#232;ves pourrait n'afficher l'aide &#233;ditoriale sur les br&#232;ves que si ces derni&#232;res sont activ&#233;es sur le site et une entr&#233;e sur la configuration des br&#232;ves seulement aux admins. Encore une fois, il s'agit de n'afficher que les informations utiles &#224; l'utilisateur. Un pipeline permet par ailleurs aux plugins une plus grande souplesse de surcharge au besoin.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Compl&#233;ter une entr&#233;e existante&lt;/h3&gt;
&lt;p&gt;Dans les quelques cas o&#249; il serait plus pertinent pour un plugin de compl&#233;ter une entr&#233;e d'aide plut&#244;t que d'en ajouter une, il sera possible de passer par le pipeline &lt;code class='spip_code' dir='ltr'&gt;affiche_milieu&lt;/code&gt;, &#224; moins de mettre en place un pipeline d&#233;di&#233; &lt;code class='spip_code' dir='ltr'&gt;affiche_aide&lt;/code&gt;.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Balise &lt;code class='spip_code' dir='ltr'&gt;#AIDER&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;#AIDER{id_entree}&lt;/code&gt; produira l'icone d'aide avec un lien sur l'entr&#233;e demand&#233;e.&lt;/p&gt; &lt;p&gt;La balise sera par ailleurs &#233;tendue avec &lt;code class='spip_code' dir='ltr'&gt;#AIDER{rubrique/id_rubrique}&lt;/code&gt; pour afficher une rubrique d'aide et la liste de ses entr&#233;es (par exemple la section &lt;i&gt;Raccourcis typographiques&lt;/i&gt;). &lt;code class='spip_code' dir='ltr'&gt;#AIDER{''}&lt;/code&gt; affichera le sommaire de l'aide.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Avantages d'une aide embarqu&#233;e&lt;/h3&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Repose sur les m&#233;canismes d&#233;j&#224; existants dans SPIP.&lt;/li&gt;&lt;li&gt; Ais&#233;e &#224; mettre en &#339;uvre.&lt;/li&gt;&lt;li&gt; Traductions facilit&#233;es car possibles via &lt;a href=&quot;http://trad.spip.net/&quot; class='spip_url spip_out' rel='external'&gt;http://trad.spip.net&lt;/a&gt; =&gt; Les traducteurs n'ont pas besoin d'apprendre un nouvel outil.&lt;/li&gt;&lt;li&gt; Aide accessible y compris pour un intranet.&lt;/li&gt;&lt;li&gt; Facilit&#233; de surcharge / extension.&lt;/li&gt;&lt;li&gt; Versionnage de l'aide int&#233;gr&#233;e au versionnage du plugin =&gt; il y a coh&#233;rence entre l'aide affich&#233;e et les fonctions impl&#233;ment&#233;es, plus historique via SVN/GIT.&lt;/li&gt;&lt;li&gt; Peut prendre ais&#233;ment en compte la configuration du site pour n'afficher que les &#233;l&#233;ments pertinents.&lt;/li&gt;&lt;li&gt; Facile &#224; mettre en place &#233;galement pour les plugins non d&#233;velopp&#233; sur la zone (inutile d'avoir &#224; cr&#233;er et g&#233;rer un serveur d'aide en ligne).&lt;/li&gt;&lt;li&gt; En int&#233;grant l'aide dans le code, il est plus ais&#233; de r&#233;diger/modifier une aide en parall&#232;le du code.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Inconv&#233;nients&lt;/h3&gt;
&lt;p&gt;En premier lieu, une int&#233;gration de l'aide directement dans les plugins devrait aboutir un poids (taille en octets) plus &#233;lev&#233;s de ces derniers. Reste &#224; savoir si cela repr&#233;sente un probl&#232;me majeur ou non. En effet, les h&#233;bergements proposent plus d'espace disque de nos jours que par le pass&#233;. Par ailleurs, il est assez difficile de mesurer le poids additionnels que repr&#233;senterait une aide int&#233;gr&#233;e. Si cela s'av&#232;re vraiment n&#233;cessaire, il serait assez facile de produire automatiquement des zips des plugins sans aide int&#233;gr&#233;e (en excluant le r&#233;pertoire aide et les fichiers de langue commen&#231;ant par aide). Mais cela est-il n&#233;cessaire ?&lt;/p&gt; &lt;p&gt;Le second &#233;l&#233;ment concerne la r&#233;daction de l'aide en ligne (dans la langue d'origine) qui n&#233;cessite d&#232;s lors de savoir &#233;crire un fichier de langue, &#233;diter un squelette et commiter sous SVN alors que le syst&#232;me actuel repose sur des articles SPIP. De plus, cela implique d'avoir &#224; d&#233;couper le texte de l'aide en plusieurs chaines de langue, ce qui n'est pas toujours ais&#233;. Enfin, la r&#233;daction en PHP du texte est moins ais&#233;e que celle d'un article SPIP.&lt;/p&gt; &lt;p&gt;Il est &#224; noter que ce probl&#232;me ne concerne que la langue de base de l'aide en ligne puisque la traduction serait g&#233;r&#233;e pour sa part via &lt;a href=&quot;http://trad.spip.net/&quot; class='spip_url spip_out' rel='external'&gt;http://trad.spip.net&lt;/a&gt;. Cependant, sur spip.net, les contributions en mati&#232;re de r&#233;daction de l'aide en ligne sont peu nombreuses. L'aide n'a que tr&#232;s peu &#233;volu&#233; depuis 2006-2008. De plus, bien qu'il s'agisse d'articles SPIP, ils utilisent des conventions sp&#233;cifiques, notamment avec des titres en H2 et les images ins&#233;r&#233;es en HTML et non joignables classiquement. Le recours &#224; des squelettes et des cha&#238;nes de langue, bien que plus connu par un public de &quot;d&#233;veloppeurs&quot;, reposent quant &#224; lui sur des m&#233;canismes g&#233;n&#233;riques de SPIP.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id='nb3-1'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh3-1' class='spip_note' title='Notes 3-1' rev='footnote'&gt;1&lt;/a&gt;] &lt;/span&gt;Sur un seul niveau.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3-2'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh3-2' class='spip_note' title='Notes 3-2' rev='footnote'&gt;2&lt;/a&gt;] &lt;/span&gt;Il s'agit ici d'exemples. La d&#233;finition des rubriques d'aide par d&#233;faut pouvant faire l'objet d'une discussion ult&#233;rieure.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3-3'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh3-3' class='spip_note' title='Notes 3-3' rev='footnote'&gt;3&lt;/a&gt;] &lt;/span&gt;L'identifiant devant &#234;tre unique, on favorisera les identifiants de la forme &lt;i&gt;prefixe_plugin-nom_entree&lt;/i&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3-4'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh3-4' class='spip_note' title='Notes 3-4' rev='footnote'&gt;4&lt;/a&gt;] &lt;/span&gt;Une telle balise serait int&#233;ressante de mani&#232;re g&#233;n&#233;rale dans SPIP, pas uniquement pour les fichiers d'aide, mais aussi pour certains squelettes. D'ailleurs, cette balise pourrait v&#233;rifier en second lieu l'existence d'un fichier &lt;code class='spip_code' dir='ltr'&gt;image-ltr.png&lt;/code&gt; ou &lt;code class='spip_code' dir='ltr'&gt;image-rtl.png&lt;/code&gt; avant de se rabattre sur le fichier par d&#233;faut.&lt;/p&gt;
&lt;/div&gt;&lt;div id='nb3-5'&gt;
&lt;p&gt;&lt;span class=&quot;spip_note_ref&quot;&gt;[&lt;a href='#nh3-5' class='spip_note' title='Notes 3-5' rev='footnote'&gt;5&lt;/a&gt;] &lt;/span&gt;Dans le cadre de la r&#233;organisation de l'aide en ligne, il est pr&#233;vu de d&#233;couper l'aide sur les raccourcis typographiques en plusieurs entr&#233;es rassembler dans une rurbique d'aide d&#233;di&#233;e.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Rainette v2, extension des services m&#233;t&#233;o</title>
		<link>http://blog.smellup.net/spip.php?article61</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article61</guid>
		<dc:date>2012-08-05T10:30:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>R&#233;flexions</dc:subject>

		<description>&lt;p&gt;Cet article d&#233;crit les grandes lignes de la mise en &#339;uvre d'une utilisation de diff&#233;rents services m&#233;t&#233;o par le plugin.&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique23" rel="directory"&gt;Rainette&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot1" rel="tag"&gt;R&#233;flexions&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Sch&#233;ma g&#233;n&#233;ral d'int&#233;gration de plusieurs services&lt;/h3&gt;
&lt;p&gt;Actuellement le moteur de Rainette, sur requ&#234;te p&#233;riodique ou &#233;v&#232;nementielle :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; re&#231;oit en entr&#233;e la localisation et les options permettant de choisir entre les conditions actuelles, les pr&#233;visions &#224; n jours, le syst&#232;me d'unit&#233;s...&lt;/li&gt;&lt;li&gt; fabrique l'url du flux correspondant &#224; la requ&#234;te et acquiert le XML,&lt;/li&gt;&lt;li&gt; stocke les informations sous forme tabulaire dans un fichier cache.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cependant, le moteur actuel consid&#232;re uniquement le format de requ&#234;te et la structure XML de weather.com(r) ce qui a pour cons&#233;quence que les traitements sont compl&#232;tement d&#233;di&#233; &#224; ce service. Il faut donc conserver ce sch&#233;ma en le g&#233;n&#233;ralisant, en particulier, en indexant la fabrication de l'url de la requ&#234;te et le transcodage en tableau par le service comme l'illustre le sch&#233;ma ci-dessous.
&lt;span class='spip_document_59 spip_documents'&gt;
&lt;img src='http://blog.smellup.net/local/cache-vignettes/L500xH243/rainette-073eb.png' width='500' height='243' alt=&quot;&quot; /&gt;&lt;/span&gt;
En outre, la structure du tableau en cache doit &#234;tre standard (il faut v&#233;rifier si la structure actuelle convient ou pas) afin, d'une part, que celle-ci puisse &#234;tre remplie par n'importe lequel des services utilis&#233;s et d'autre part, que l'ensemble des affichages puissent &#234;tre conserv&#233;s.&lt;/p&gt; &lt;p&gt;Pour m&#233;moire, les documentations des APIs de chacun des services sont disponibles aux adresses suivantes :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;http://portal.theweatherchannel.com/&quot; class='spip_out' rel='external'&gt;Weather.com(r)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://blogdev.meteorologic.net/index.php?2008/08/06/37-api-de-previsions-meteo-a-3-jours-format-rss&quot; class='spip_out' rel='external'&gt;Meteorologic&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.worldweatheronline.com/free-weather-feed.aspx&quot; class='spip_out' rel='external'&gt;World Weather Online&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.wunderground.com/weather/api/d/docs?d=data/index&quot; class='spip_out' rel='external'&gt;Wunderground&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://developer.yahoo.com/weather/&quot; class='spip_out' rel='external'&gt;Yahoo Weather&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://openweathermap.org/wiki/API/JSON_API&quot; class='spip_out' rel='external'&gt;Open Weather Map&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;spip&quot;&gt;Identification du lieu&lt;/h3&gt;
&lt;p&gt;La premi&#232;re probl&#233;matique &#224; r&#233;gler concerne la g&#233;n&#233;ralisation de l'identifiant du lieu. En effet, il n'existe pas de norme et chaque service propose des m&#233;thodes diff&#233;rentes qui parfois se recoupent.&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id13f3_c0'&gt; Service &lt;/th&gt;&lt;th id='id13f3_c1'&gt; Param&#232;tres &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id13f3_c0'&gt;Weather.com(r)&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;code de ville du type YYXXXX ou YY est un bigramme du pays et XXXX un num&#233;ro ordinal&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id13f3_c0'&gt;Meteorologic&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;&lt;strong&gt;p&lt;/strong&gt; : le nom ou le code postal de la ville
&lt;br /&gt;cn : le pays parmi la France, la Suisse et la Belgique mais ce param&#232;tre est optionnel (permet d'&#233;viter des ambigu&#239;t&#233;s)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id13f3_c0'&gt;World Weather Online&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;&lt;strong&gt;q&lt;/strong&gt; : qui repr&#233;sente le nom de la ville accompagn&#233; ou pas du pays d'origine, le code postal (uniquement pour les US) ou le point g&#233;olocalis&#233;, l'adresse IP...&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id13f3_c0'&gt;Wunderground&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;&lt;strong&gt;query&lt;/strong&gt; : reprend les m&#234;mes possibilit&#233;s que WWO avec en plus le PWS Id qui ne semble utilis&#233; que parce ce service&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id13f3_c0'&gt;Yahoo Weather&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;&lt;strong&gt;w&lt;/strong&gt; : code appel&#233; WOEID. Ce code est uniquement utilis&#233; par Yahoo mais rappelle en cela l'API de weather.com(r)&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id13f3_c0'&gt;Open Weather Map&lt;/td&gt;
&lt;td headers='id13f3_c1'&gt;xxx&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;D'apr&#232;s le tableau ci-dessous, on peut conclure qu'en &#233;tendant juste la port&#233;e du param&#232;tre unique de lieu actuel on r&#233;sout simplement l'&#233;quation pos&#233;e. En effet, seul Meteorologic demande parfois deux param&#232;tres. En r&#233;sum&#233; :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; on conserve le param&#232;tre &#171; code &#187; actuel qui suffit pour Weather.com et Yahoo Weather&lt;/li&gt;&lt;li&gt; pour les services Wunderground et World Weather Online ce code repr&#233;sente n'importe lequel des identifiants accept&#233;s par le service.&lt;/li&gt;&lt;li&gt; pour Meteorologic, le code repr&#233;sentera le code postal ou le nom de la ville sans possibilit&#233; de g&#233;rer les ambigu&#239;t&#233;s.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Remarque : le meilleur compromis aurait &#233;t&#233; de choisir la latitude et la longitude qui est un identifiant universel de lieu. N&#233;anmoins, il n'est pas support&#233; par Weather.com et Yahoo Weather.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Requ&#234;tes et options&lt;/h3&gt;
&lt;p&gt;Outre le lieu des donn&#233;es m&#233;t&#233;orologiques, les requ&#234;tes font appel &#224; d'autres options pour d&#233;signer le type d'informations demand&#233;es, le syst&#232;me d'unit&#233; &#224; utiliser, le nombre de jours de pr&#233;visions... L&#224; encore, il n'y a aucune normalisation entre les services.&lt;/p&gt; &lt;p&gt;Actuellement, pour Weather.com(r) on distingue 3 requ&#234;tes diff&#233;rentes avec des options sp&#233;cifiques :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; la demande des conditions courantes&lt;/li&gt;&lt;li&gt; la demande des pr&#233;visions pour les n prochains jours&lt;/li&gt;&lt;li&gt; la demande des informations sur le lieu&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour les deux premi&#232;res requ&#234;tes le syst&#232;me d'unit&#233; est param&#233;trable dans Rainette. Pour les pr&#233;visions, il est possible de sp&#233;cifier le nombre de jours voulus.&lt;/p&gt; &lt;p&gt;Il faut donc &#233;tudier comment simuler ces m&#234;mes types de requ&#234;tes avec les autres services sachant qu'il est inutile pour l'instant de rajouter plus de possibilit&#233;s de param&#233;trage.&lt;/p&gt;
&lt;table class=&quot;spip&quot;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id728a_c0'&gt; Service &lt;/th&gt;&lt;th id='id728a_c1'&gt; Requ&#234;tes et options &lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id728a_c0'&gt;Weather.com(r)&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;Voir ci-dessus&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id728a_c0'&gt;Meteorologic&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;Ce service ne dispose que d'une seule requ&#234;te et d'aucune option. Pour un lieu donn&#233;, les pr&#233;visions &#224; 3 jours sont fournies et comprennent le jour courant.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id728a_c0'&gt;World Weather Online&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;Il est possible de faire varier plusieurs param&#232;tres : &lt;br /&gt; &lt;br /&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;num_of_days&lt;/strong&gt; : pour pr&#233;ciser le nombre de jours de pr&#233;visions souhait&#233;s&lt;/li&gt;&lt;li&gt; &lt;strong&gt;cc&lt;/strong&gt; : pour pr&#233;ciser si on veut les conditions courantes ou pas&lt;/li&gt;&lt;li&gt; &lt;strong&gt;fx&lt;/strong&gt; : &#224; v&#233;rifier si il permet de d&#233;sactiver les pr&#233;visions afin d'optimiser les requ&#234;tes.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;En outre, &lt;strong&gt;format&lt;/strong&gt; sera toujours positionn&#233; &#224; XML et &lt;strong&gt;key&lt;/strong&gt; d&#233;signera la cl&#233; de l'utilisateur. Par contre, le syst&#232;me d'unit&#233; n'est pas param&#233;trable. Il faudra pr&#233;voir soit des fonctions de conversions soit de trouver les deux valeurs dans le XML.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id728a_c0'&gt;Wunderground&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;Il est possible de faire varier un param&#232;tre : &lt;br /&gt; &lt;br /&gt;&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;features&lt;/strong&gt; : pour pr&#233;ciser le type de demande. Pour simuler le comportement actuel les valeurs &lt;i&gt;conditions&lt;/i&gt;, &lt;i&gt;forecast &lt;/i&gt; ou &lt;i&gt;forecast10day &lt;/i&gt; et &lt;i&gt;geolookup &lt;/i&gt; sont &#224; &#233;tudier, le nombre de jours de pr&#233;visions ne pouvant pas &#234;tre sp&#233;cifi&#233;s&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;En outre, &lt;strong&gt;format&lt;/strong&gt; sera toujours positionn&#233; &#224; XML et &lt;strong&gt;your_key&lt;/strong&gt; d&#233;signera la cl&#233; de l'utilisateur. Par contre, le syst&#232;me d'unit&#233; n'est pas param&#233;trable. Il faudra pr&#233;voir soit des fonctions de conversions soit de trouver les deux valeurs dans le XML.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id728a_c0'&gt;Yahoo Weather&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;Ce service ne dispose que d'une seule requ&#234;te qui renvoie toutes les informations g&#233;ographiques et m&#233;t&#233;orologiques d'un lieu. Seul le syst&#232;me d'unit&#233; est configurable : c'est le param&#232;tre &lt;strong&gt;u&lt;/strong&gt;. Le service n'est donc pas optimis&#233; puisque l'ensemble des donn&#233;es est remont&#233;e &#224; chaque demande.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id728a_c0'&gt;Open Weather Map&lt;/td&gt;
&lt;td headers='id728a_c1'&gt;xxx&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En conclusion, il est possible de simuler le m&#234;me comportement qu'actuellement avec ces nouveaux services mais certains comme Yahoo Weather - qui s'appuie sur Weather.com(r) - et surtout Meteorologic ne sont pas optimis&#233;s. L'utilit&#233; d'int&#233;grer ces services n'est donc pas prouv&#233;e sauf &#224; conserver des services gratuits.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Gestion des cl&#233;s d'inscription&lt;/h3&gt;
&lt;p&gt;Meteorologic et Yahoo Weather ne demandent aucune cl&#233; d'inscription pour fonctionner.&lt;/p&gt; &lt;p&gt;L'API utilis&#233;e actuellement pour Weather.com(r) fonctionne encore sans cl&#233; mais il est possible de l'utiliser avec une cl&#233; obtenue avant la sortie de la nouvelle API (Partner ID et Licence Key). Cependant, Rainette n'autorise pas aujourd'hui l'utilisation de cette interface avec cl&#233;.
De m&#234;me, la nouvelle API ne sera pas support&#233;e par Rainette si elle se limite &#224; une utilisation payante.&lt;/p&gt; &lt;p&gt;Open Weather Map ne demande pas de cl&#233; d'inscription pour fonctionner. N&#233;anmoins, si le volume de requ&#234;tes devient trop important (plus de 2000 par heure) il est demand&#233; de s'inscrire et d'ins&#233;rer la cl&#233; d'inscription gratuite dans les requ&#234;tes.&lt;/p&gt; &lt;p&gt;Wunderground et World Weather Online demandent tout deux une cl&#233; d'inscription mais le service reste gratuit. WorldWeather Online propose un abonnement premium autorisant plus d'options mais celui-ci ne sera pas support&#233; par Rainette.&lt;/p&gt; &lt;p&gt;En conclusion, il faut donc prendre en compte aujourd'hui la gestion des cl&#233;s d'inscription dans Rainette lors de la construction des requ&#234;tes. En outre, il faudra rajouter un formulaire de configuration pour les enregistrer.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Gestion du cache&lt;/h3&gt;
&lt;p&gt;Il est essentiel de continuer &#224; g&#233;rer le cache des donn&#233;es m&#233;t&#233;o car les services sont de plus en plus pointilleux sur le nombre de requ&#234;tes maximum par p&#233;riode de temps. Cependant, il est devenu superflu de continuer &#224; choisir la p&#233;riode de renouv&#232;lement des donn&#233;es, mieux vaut se conformer &#224; la recommandation des services. Il est par contre n&#233;cessaire de fixer une p&#233;riode en fonction du service.&lt;/p&gt; &lt;p&gt;Actuellement, le nom du fichier de cache co&#239;ncide avec l'identifiant du lieu au format de Weather.com(r). &#201;tant donn&#233; que les services peuvent utiliser des identifiants diff&#233;rents, le nom de fichier pour un m&#234;me lieu peut varier en fonction du service (pas de possibilit&#233; de trouver un nom unique).&lt;/p&gt; &lt;p&gt;En outre, dans le cas de Wunderground qui propose une interface traduite pour les conditions et pr&#233;visions, il faut indexer le nom du fichier avec le code de la langue. Cela a tendance &#224; augmenter le nombre de fichiers caches donc d'acc&#232;s mais peu de site sont concern&#233;s.&lt;br class='manualbr' /&gt;C'est aussi le cas de Open Weather Map mais le nombre de traductions &#233;tant limit&#233;e il convient de v&#233;rifier au pr&#233;alable l'int&#233;r&#234;t de l'utiliser.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Prise en compte des conditions d'utilisation&lt;/h3&gt;
&lt;p&gt;Les conditions d'utilisation sont consultables aux adresses suivantes :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Weather.com(r) : &lt;/li&gt;&lt;li&gt; Meteorologic : &lt;a href=&quot;http://www.meteorologic.net/zone-rss.php#condition&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://www.meteorologic.net/zone-rss.php#condition&lt;/a&gt;&lt;/li&gt;&lt;li&gt; World Weather Online : &lt;a href=&quot;http://www.worldweatheronline.com/free-weather-feed.aspx?menu=usage&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://www.worldweatheronline.com/free-weather-feed.aspx?menu=usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Wunderground : &lt;a href=&quot;http://www.wunderground.com/weather/api/d/terms.html&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://www.wunderground.com/weather/api/d/terms.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Yahoo Weather : &lt;a href=&quot;http://developer.yahoo.com/weather/#terms&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://developer.yahoo.com/weather/#terms&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Open Weather Map : &lt;a href=&quot;http://openweathermap.org/copyright&quot; class='spip_url spip_out auto' rel='nofollow external'&gt;http://openweathermap.org/copyright&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est important d'am&#233;liorer le traitement de Rainette &#224; cet &#233;gard en :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; rappelant ces conditions dans la page de configuration&lt;/li&gt;&lt;li&gt; utilisant les chartes graphiques dans les affichages propos&#233;s de base par Rainette&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Evolution v2 de Rainette</title>
		<link>http://blog.smellup.net/spip.php?article60</link>
		<guid isPermaLink="true">http://blog.smellup.net/spip.php?article60</guid>
		<dc:date>2012-08-04T13:34:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>_Eric_</dc:creator>


		<dc:subject>R&#233;flexions</dc:subject>

		<description>&lt;p&gt;Cet article a pour but d'expliquer les &#233;volutions de Rainette, en particulier, son ouverture &#224; d'autres flux que celui de weather.com#(r)&lt;/p&gt;

-
&lt;a href="http://blog.smellup.net/spip.php?rubrique23" rel="directory"&gt;Rainette&lt;/a&gt;

/ 
&lt;a href="http://blog.smellup.net/spip.php?mot1" rel="tag"&gt;R&#233;flexions&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h3 class=&quot;spip&quot;&gt;Les probl&#232;mes actuels&lt;/h3&gt;
&lt;p&gt;Depuis quelques mois, Weather.com(r) - qui est le service unique utilis&#233; par Rainette - s'est orient&#233; plus clairement dans une d&#233;marche commerciale. Le flux gratuit est toujours disponible mais a perdu en fiabilit&#233;, du moins pour les lieux &#224; &#171; faible popularit&#233; &#187;.&lt;/p&gt; &lt;p&gt;Ceci &#233;tant, les erreurs de flux remont&#233;es par les utilisateurs de Rainette se multipliant sur les forums, il semble n&#233;cessaire aujourd'hui de faire &#233;voluer Rainette pour pallier cette d&#233;rive et permettre &#224; tous de disposer d'une m&#233;t&#233;o locale.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Etendre la liste des services m&#233;t&#233;o&lt;/h3&gt;
&lt;p&gt;La principale &#233;volution est &#233;vidente : acqu&#233;rir et restituer les donn&#233;es m&#233;t&#233;o fournies par diff&#233;rents services et permettre ainsi &#224; chaque utilisateur de choisir le meilleur flux correspondant &#224; sa localisation.&lt;/p&gt; &lt;p&gt;Suite &#224; une petite &#233;tude des flux disponibles une premi&#232;re liste de services a &#233;t&#233; &#233;labor&#233;e, chacun proposant une API de r&#233;cup&#233;ration des donn&#233;es m&#233;t&#233;o en XML ou JSON :&lt;/p&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;http://www.meteorologic.net/donnees-meteo.php&quot; class='spip_out' rel='external'&gt;Meteorologic&lt;/a&gt;, &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.worldweatheronline.com/free-weather-feed.aspx&quot; class='spip_out' rel='external'&gt;World Weather Online&lt;/a&gt;,&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://www.wunderground.com/weather/api/d/docs?d=index&quot; class='spip_out' rel='external'&gt;Wunderground&lt;/a&gt;,&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://developer.yahoo.com/weather/&quot; class='spip_out' rel='external'&gt;Yahoo Weather&lt;/a&gt;,&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://openweathermap.org/&quot; class='spip_out' rel='external'&gt;OpenWeatherMap&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Malheureusement, certains de ces services sont payants ou utilisent une cl&#233; d'inscription pour rep&#233;rer les utilisations de leur flux. M&#234;me si ce n'est pas l'esprit de Rainette, le plugin doit aujourd'hui &#234;tre capable de prendre en compte ces flux si des utilisateurs sont pr&#234;ts &#224; l'accepter.&lt;/p&gt; &lt;p&gt;En outre, m&#234;me pour &lt;a href=&quot;http://portal.theweatherchannel.com/&quot; class='spip_out' rel='external'&gt;Weather.com(r)&lt;/a&gt;, qui restera le flux par d&#233;faut de Rainette tant qu'il offrira une API gratuite, il peut &#234;tre int&#233;ressant pour certains sites d'utiliser le service payant. Il faudra donc faire &#233;voluer son utilisation actuelle.&lt;/p&gt; &lt;p&gt;N&#233;anmoins, Rainette offrira toujours au moins une alternative gratuite par d&#233;faut.&lt;/p&gt;
&lt;h3 class=&quot;spip&quot;&gt;Am&#233;liorer la gestion des th&#232;mes&lt;/h3&gt;
&lt;p&gt;La deuxi&#232;me &#233;volution concerne la gestion des th&#232;mes d'ic&#244;nes de conditions m&#233;t&#233;orologiques. Avec SPIP 3 la gestion actuelle est devenue vieillotte et il est n&#233;cessaire de la faire &#233;voluer selon le standard SPIP 3.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
