<?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>Vader[FR] : ce n'est pas un blog, c'est un Sith</title>
	<link>https://vader-fr.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://vader-fr.fr/spip.php?id_mot=10&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Vader[FR] : ce n'est pas un blog, c'est un Sith</title>
		<url>https://vader-fr.fr/local/cache-vignettes/L144xH144/siteon0-c1872.jpg?1771612673</url>
		<link>https://vader-fr.fr/</link>
		<height>144</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>Script g&#233;n&#233;rique des diaporamas AJAX</title>
		<link>https://vader-fr.fr/spip.php?article144</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article144</guid>
		<dc:date>2014-10-18T19:53:27Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>JavaScript</dc:subject>
		<dc:subject>PHP</dc:subject>
		<dc:subject>D&#233;veloppement web</dc:subject>
		<dc:subject>SPIP</dc:subject>

		<description>
&lt;p&gt;Ce script est le m&#234;me pour le diaporama de la page de garde et pour le diaporama de la galerie. &lt;br class='autobr' /&gt;
Il lit des param&#232;tres dans la page (num&#233;ro de rubrique &#224; parcourir, nombre de niveaux de sous-rubriques &#224; chercher, langue) et envoie la requ&#234;te au serveur, puis ins&#232;re dans la page l'image, le titre et le texte de chaque &#233;l&#233;ment du diaporama en l'adaptant &#224; la taille de la fen&#234;tre, avant de demander l'&#233;l&#233;ment suivant. &lt;br class='autobr' /&gt;
En effet, les &#233;l&#233;ments de ce diaporama sont des articles : le logo de (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique31" rel="directory"&gt;Isabelle Palenc : artiste peintre sculpteur&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot1" rel="tag"&gt;JavaScript&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot2" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot9" rel="tag"&gt;D&#233;veloppement web&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Ce script est le m&#234;me pour le diaporama de la page de garde et pour le diaporama de la galerie.&lt;/p&gt;
&lt;p&gt;Il lit des param&#232;tres dans la page (num&#233;ro de &lt;strong&gt;rubrique&lt;/strong&gt; &#224; parcourir, nombre de niveaux de &lt;strong&gt;sous-rubriques&lt;/strong&gt; &#224; chercher, langue) et envoie la requ&#234;te au serveur, puis ins&#232;re dans la page l'image, le titre et le texte de chaque &#233;l&#233;ment du diaporama en l'adaptant &#224; la taille de la fen&#234;tre, avant de demander l'&#233;l&#233;ment suivant.&lt;/p&gt;
&lt;p&gt;En effet, les &#233;l&#233;ments de ce diaporama sont des articles :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le logo de l'article est une image particuli&#232;re, que l'on peut ais&#233;ment diff&#233;rencier du texte, afin de lui accorder un traitement diff&#233;rent.&lt;/li&gt;&lt;li&gt; un article existe dans une certaine langue, ce qui permet d'afficher un diaporama diff&#233;rent selon la langue souhait&#233;e&lt;/li&gt;&lt;li&gt; un article avec texte, titre et logo est facile &#224; ajouter, modifier ou enlever dans l'espace priv&#233; de SPIP.&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Lancement des fonctions JavaScript&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Comme on peut le voir dans l'aper&#231;u Firebug de la &lt;a href='https://vader-fr.fr/spip.php?article143' class=&#034;spip_in&#034;&gt;structure de la page de garde&lt;/a&gt;, il y a dans chaque page, pour l'&#233;v&#232;nement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;onLoad&lt;/code&gt; (= &#034;au chargement&#034;) de l'&#233;l&#233;ment HTML &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body&lt;/code&gt;, appel &#224; une fonction unique et g&#233;n&#233;rique &#034;AuChargement&#034;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function AuChargement(){ pisteIE(); cachejs(); setTimeout(&#034;charger_diapo()&#034;,1000); // 1 seconde traitercadres(); traiterimages();
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette fonction unique en invoque d'autres, qui, selon les &#233;l&#233;ments pr&#233;sents ou non dans la page, feront quelque chose :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pisteIE&lt;/code&gt; va, comme son nom l'indique, rediriger les utilisateurs du navigateur Internet Explorer vers une page d'avertissement, indiquant les d&#233;ficiences de Microsoft Internet Explorer quand aux &#233;l&#233;ments pourtant normalis&#233;s W3C de la page.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un lien &#034;continuer quand m&#234;me&#034; permet aux utilisateurs d'Internet Explorer de poursuivre la navigation, ils ont &#233;t&#233; pr&#233;venus.&lt;/li&gt;&lt;li&gt; Un syst&#232;me de cookie enregistre le fait que l'utilisateur est pr&#233;venu, cela &#233;vite de faire la redirection &#224; chaque ouverture de page.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cachejs&lt;/code&gt; sert, comme son nom l'indique, &#224; cacher le message selon lequel JavaScript est d&#233;sactiv&#233; sur le navigateur.&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;setTimeout(&#034;charger_diapo()&#034;,1000);&lt;/code&gt; lance la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_diapo()&lt;/code&gt; au bout d'une seconde.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; C'est cette fonction qui ira chercher les param&#232;tres du diaporama dans la page et enverra la requ&#234;te au serveur pour le premier &#233;l&#233;ment.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;traitercadres&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;traiterimages&lt;/code&gt; vont redimensionner les cadres et images qui en ont besoin.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Lancement du diaporama&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function charger_diapo(){ if (this.document.getElementById('diapo')!=null){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette fonction ne s'ex&#233;cutera que si un &#233;l&#233;ment &#034;diapo&#034; est pr&#233;sent dans la page&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (this.document.getElementById('nrubrique')!=null){ nrubrique=this.document.getElementById('nrubrique').value; }else{ nrubrique=0; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour chaque param&#232;tre du diaporama, on v&#233;rifie sa pr&#233;sence, et en cas d'absence on utilise une valeur par d&#233;faut&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Autres param&#232;tres&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (this.document.getElementById('mindepth')!=null){ mindepth=this.document.getElementById('mindepth').value; }else{ mindepth=0; } if (this.document.getElementById('maxdepth')!=null){ maxdepth=this.document.getElementById('maxdepth').value; }else{ maxdepth=1; } if (this.document.getElementById('lang')!=null){ lang=this.document.getElementById('lang').value; }else{ lang=&#034;fr&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Puis on initialise quelques valeurs avant d'appeler la fonction qui cr&#233;era et enverra la requ&#234;te.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var url_image=null; var texte_diapo=null; var titre_diapo=null; requete_requete_image_diapo('charger_diapo.php?id=0&amp;rub='+nrubrique+'&amp;min='+mindepth+'&amp;max='+maxdepth+'&amp;lang='+lang); }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Cr&#233;ation de la requ&#234;te XMLHTTP&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Le script javaScript d&#233;fini quelque variables globales, que plusieurs fonctions utiliseront.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;var diapo = 0;
var prochain=0;
var nrubrique=0;
var mindepth=0;
var maxdepth=1;
var delai=5000;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avant de pouvoir cr&#233;er la requ&#234;te XMLHTTP, il faut un objet de type xmlhttprequest pour y mettre les param&#232;tres, l'envoyer au serveur et recevoir sa r&#233;ponse.&lt;br class='autobr' /&gt;
En fonction du navigateur, on utilisera plusieurs m&#233;thodes.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Cr&#233;ation de l'objet xmlhttprequest&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function get_requete_image_diapo(){ var requete_image_diapo = null; if (window.XMLHttpRequest){ // Firefox requete_image_diapo=new XMLHttpRequest(); }else if (window.ActiveXObject){ // IE try{ requete_image_diapo=new ActiveXObject(&#034;Msxml12.XMLHTTP&#034;); }catch(e){ try{ requete_image_diapo=new ActiveXObject(&#034;Microsoft.XMLHTTP&#034;); }catch(e1){ requete_image_diapo=null; } } }else{ // non support&#233; alert(&#034;Votre navigateur ne supporte pas les XMLHTTPRequest.&#034;); /* + redirection vers page navigs.html */ } return requete_image_diapo;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La fonction pr&#233;c&#233;dente, qui cr&#233;&#233; l'objet xmlhttprequest, est appel&#233;e par la fonction de cr&#233;ation et d'envoi de la requ&#234;te que voici :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function requete_requete_image_diapo(url){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	requete_image_diapo=get_requete_image_diapo(); if (!requete_image_diapo){ alert(&#034;Votre navigateur ne peut cr&#233;er de requ&#234;te AJAX.&#034;); /* + redirectiuon vers page navigs.html */ return; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On r&#233;cup&#232;re l'objet xmlhttprequest, puis, si celui-ci n'a pu &#234;tre cr&#233;&#233; et que par cons&#233;quent la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;requete_image_diapo&lt;/code&gt; n'existe pas - le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;!&lt;/code&gt; signifiant la n&#233;gation - on affiche un message et l'on quitte la fonction.&lt;br class='autobr' /&gt;
Sinon, on poursuit&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	//alert(&#034;envoi de la requete&#034;); requete_image_diapo.onreadystatechange=function(){traitementReponse_requete_image_diapo(requete_image_diapo)} requete_image_diapo.open(&#034;GET&#034;,url,true); requete_image_diapo.send(null);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;requete_image_diapo.onreadystatechange=&lt;code&gt; d&#233;finit la fonction &lt;code&gt;function(){ ... }&lt;/code&gt; de traitement de la r&#233;ponse, quand la requ&#234;te aura &#034;chang&#233; d'&#233;tat&#034;.&lt;br class='autobr' /&gt;
Puis on ouvre l'url du script du serveur auquel il faut envoyer la requ&#234;te, et qui la traitera pour envoyer la r&#233;ponse selon les param&#232;tres indiqu&#233;s, et on y envoie la requ&#234;te.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Modification de la page affich&#233;e&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function traitementReponse_requete_image_diapo(requete_image_diapo){ var contenu; var erreur=0; if (requete_image_diapo.readyState==4){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si la requ&#234;te est dans l'&#233;tat &#034;4&#034;, c'est &#224; dire que l'on a re&#231;u la r&#233;ponse du serveur,&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; //alert(&#034;reception de la reponse : traitement&#034;); contenu=requete_image_diapo.responseXML;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On r&#233;cup&#232;re le document XML constituant la r&#233;ponse du serveur.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (contenu.getElementsByTagName(&#034;image&#034;)[0].firstChild.nodeValue!=null){ url_image=contenu.getElementsByTagName(&#034;image&#034;)[0].firstChild.nodeValue; }else{ erreur=1; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On v&#233;rifie la pr&#233;sence de diff&#233;rents &#233;l&#233;ments de r&#233;ponse, en pr&#233;parant des valeurs par d&#233;faut si besoin.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;contenu&lt;/code&gt; est le document XML de r&#233;ponse. Celui-ci est organis&#233; selon une arborescence de balises pour les divers &#233;l&#233;ments et leurs valeurs.&lt;/li&gt;&lt;li&gt; on utilise la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getElementsByTagName&lt;/code&gt; pour adresser ces balises par leur nom
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; cette fonction renvoie un tableau de balises correspondantes, dont on s'int&#233;resse au premier &#233;l&#233;ment, &#224; la case 0, qui est la premi&#232;re case d'un tableau javaScript.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Une fois r&#233;cup&#233;r&#233; la balise souhait&#233;e, on r&#233;cup&#232;re la valeur du n&#339;ud (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;nodeValue&lt;/code&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Autres &#233;l&#233;ments&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (contenu.getElementsByTagName(&#034;url_article&#034;)[0].firstChild.nodeValue!=null){ url_article=contenu.getElementsByTagName(&#034;url_article&#034;)[0].firstChild.nodeValue; }else{ erreur=1; } if (contenu.getElementsByTagName(&#034;titre&#034;)[0].firstChild!=null){ if (contenu.getElementsByTagName(&#034;titre&#034;)[0].firstChild.nodeValue!=null){ titre_diapo=contenu.getElementsByTagName(&#034;titre&#034;)[0].firstChild.nodeValue; }else{ erreur=1; } }else{ titre_diapo=&#034;&#034;; } //alert(&#034;titre=&#034;+contenu.getElementsByTagName(&#034;titre&#034;)[0].textContent); // y'a aussi data, wholeText...nodeValue... if (contenu.getElementsByTagName(&#034;texte&#034;)[0].firstChild!=null){ if (contenu.getElementsByTagName(&#034;texte&#034;)[0].firstChild.nodeValue!=null){ texte_diapo=contenu.getElementsByTagName(&#034;texte&#034;)[0].firstChild.nodeValue; if ((texte_diapo==null)||(texte_diapo==&#034;&#034;)){ texte_diapo=&#034;Sans titre&#034;; } }else{ texte_diapo=&#034;&#034;; } }else{ texte_diapo=&#034;&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;De m&#234;me, on r&#233;cup&#232;re plusieurs param&#232;tres toujours pr&#233;sents, dont la prochaine image &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;preload&lt;/code&gt; que l'on va commencer &#224; charger comme arri&#232;re plan &#224; taille nulle pour acc&#233;l&#233;rer son chargement lorsque ce sera son tour.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; prochain=contenu.getElementsByTagName(&#034;prochain&#034;)[0].firstChild.nodeValue; // delai=contenu.getElementsByTagName(&#034;delai&#034;)[0].firstChild.nodeValue; preload=contenu.getElementsByTagName(&#034;preload&#034;)[0].firstChild.nodeValue; //alert(&#034;texte=&#034;+contenu.getElementsByTagName(&#034;texte_diapo&#034;)[0].firstChild.nodeValue);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour comprendre &#224; quoi correspondent ces &#233;l&#233;ments, voir l'onglet d&#233;taillant le script PHP.&lt;/p&gt;
&lt;p&gt;Et si tout va bien (variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;erreur&lt;/code&gt; toujours &#224; z&#233;ro)&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	if (erreur==0){	&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On essaie de r&#233;cup&#233;rer le bloc &#034;image&#034; du diaporama afin de pouvoir y int&#233;grer l'image indiqu&#233;e dans le document XML.&lt;br class='autobr' /&gt;
Dans la m&#234;me structure conditionnelle, l'on s'assure qu'il y a bien une image &#224; y int&#233;grer (l'url de l'image fournie dans la r&#233;ponse XML est non nulle).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if ((this.document.getElementById('diapo_image')!=null)&amp;&amp;(url_image!=&#034;&#034;)){ //alert (&#034;on a le div image&#034;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si le bloc image existe, on le r&#233;f&#233;rence afin de pouvoir le modifier, en utilisant la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getElementById&lt;/code&gt; qui renvoie un &#233;l&#233;ment unique, puis on y int&#232;gre un lien vers l'article sous la forme d'une image qui est son logo avec la valeur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;innerHTML&lt;/code&gt; de l'&#233;l&#233;ment, qui correspond au code HTML que l'&#233;l&#233;ment contient.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var div_image=this.document.getElementById('diapo_image'); // le div div_image.innerHTML=&#034;&lt;a href=\&#034;&#034;+url_article+&#034;\&#034;&gt;&lt;img src=\&#034;&#034;+url_image+&#034;\&#034; style=\&#034;margin-left:0px;margin-top:0px;\&#034;&gt;&lt;/a&gt;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'image du diaporama &#233;tant dans son bloc, il est peut &#234;tre utile &#224; pr&#233;sent de la redimensionner afin de l'adapter aux dimensions dudit bloc.&lt;/p&gt;
&lt;p&gt;On r&#233;cup&#232;re donc les dimensions du bloc, par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;offsetHeight&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;offsetWidth&lt;/code&gt;, puis les dimensions r&#233;elles de l'image, par les valeurs &#034;hauteur&#034; et &#034;largeur&#034; fournies dans la r&#233;ponse (voir script PHP).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var h_div=this.document.getElementById('diapo_image').offsetHeight; var l_div=this.document.getElementById('diapo_image').offsetWidth; var h_img=parseFloat(contenu.getElementsByTagName(&#034;hauteur&#034;)[0].firstChild.nodeValue); var l_img=parseFloat(contenu.getElementsByTagName(&#034;largeur&#034;)[0].firstChild.nodeValue); //alert(&#034;traitement d'une image de &#034;+h_img+&#034; par &#034;+l_img);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Selon la diff&#233;rence de dimension entre le bloc et l'image, il faudra la r&#233;duire prioritairement en largeur, en hauteur, ou les deux, et si l'image n'est pas trop grande, on cherchera &#224; la centrer.&lt;/p&gt;
&lt;p&gt;Le reste du script de traitement devrait &#234;tre ais&#233;ment compr&#233;hensible, d'autant que les commentaires permettent de suivre les conditions v&#233;rifi&#233;es et le traitement effectu&#233;.&lt;br class='autobr' /&gt;
Le principe reste toujours le m&#234;me :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; si une dimension de l'image est plus grande que celle du bloc, alors
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; calculer la proportion entre les deux afin de pouvoir r&#233;duire l'image&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; une fois la bonne proportion de r&#233;duction trouv&#233;e, calculer les marges entre les dimensions du bloc et celles de l'image r&#233;duite, pour centrer l'image.&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (l_img&gt;l_div){ var reduction=l_img/l_div; // la proportion de r&#233;duction, qui sera la meme en hauteur et largeur // si h_img/reduction&gt;h_div alors if ((h_img/reduction)&gt;h_div){ // image plus large et en r&#233;duite, plus haute que le div // image plus HAUTE que large // r&#233;duction_h = h_img/h_div var reduction_h=h_img/h_div; // appliquer reduction_h en hauteur et largeur var nh=h_img/reduction_h; var nl=l_img/reduction_h; // pour &#234;tre au milieu&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois l'image r&#233;duite, on calcule la marge, puis on applique r&#233;duction et marge de centrage.&lt;br class='autobr' /&gt;
De m&#234;me que pour le bloc diapo, on utilise la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getElementById&lt;/code&gt; pour r&#233;f&#233;rencer le bloc, puis, comme pour la r&#233;ponse XML, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getElementsByTagName&lt;/code&gt; pour r&#233;cup&#233;rer le tableau des images (balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img ...&gt;&lt;/code&gt; contenues, la premi&#232;re (et seule) &#233;tant &#224; la case 0.&lt;br class='autobr' /&gt;
Puis l'on d&#233;finit les attributs HTML de cette balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img ...&gt;&lt;/code&gt; pour retailler l'image, et lui ajouter un style personnalis&#233; contenant la marge de centrage, ainsi que la prochaine image &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;preload&lt;/code&gt; comme arri&#232;re-plan de taille nulle pour acc&#233;l&#233;rer son chargement lorsque ce sera son tour.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; var margel=(l_div-nl)/2; // si la marge est &gt; &#224; x px, calculer la diff&#233;rence et r&#233;duire div image pour agrandir div texte image=this.document.getElementById('diapo_image').getElementsByTagName('img')[0]; image.setAttribute(&#034;height&#034;,nh); image.setAttribute(&#034;width&#034;,nl); image.setAttribute(&#034;style&#034;,&#034;margin-left:&#034;+margel+&#034;px; background-image:url(\&#034;&#034;+preload+&#034;\&#034;); background-size: 0px 0px;&#034;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Autres cas&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; // sinon }else{ // image plus large mais pas plus haute que le div // image plus LARGE que haute // appliquer r&#233;duction en largeur et hauteur var nh=h_img/reduction; var nl=l_img/reduction; // pour &#234;tre au milieu, il faut que margeh=()h_div-nh/2 var margeh=(h_div-nh)/2; image=this.document.getElementById('diapo_image').getElementsByTagName('img')[0]; image.setAttribute(&#034;height&#034;,nh); image.setAttribute(&#034;width&#034;,nl); image.setAttribute(&#034;style&#034;,&#034;margin-top:&#034;+margeh+&#034;px; background-image:url(\&#034;&#034;+preload+&#034;\&#034;); background-size: 0px 0px;&#034;); //finsi } // fins }else{ // image pas plus large que le div if (h_img&gt;h_div){ // div assez large mais pas assez haut // r&#233;duction_h = h_img/h_div var reduction_h=h_img/h_div; // appliquer reduction_h en hauteur et largeur var nh=h_img/reduction_h; var nl=l_img/reduction_h; // pour &#234;tre au milieu, il faut que margel=()545-nl/2 var margel=(l_div-nl)/2; image=this.document.getElementById('diapo_image').getElementsByTagName('img')[0]; image.setAttribute(&#034;style&#034;,&#034;margin-left:&#034;+margel+&#034;px; background-image:url(\&#034;&#034;+preload+&#034;\&#034;); background-size: 0px 0px;&#034;); image.setAttribute(&#034;height&#034;,nh); image.setAttribute(&#034;width&#034;,nl); }else{ // image pas trop grande // mais cadre peut-&#234;tre trop grand var margeh=(h_div-h_img)/2; var margel=(l_div-l_img)/2; image=this.document.getElementById('diapo_image').getElementsByTagName('img')[0]; image.setAttribute(&#034;style&#034;,&#034;margin-left:&#034;+margel+&#034;px;margin-top:&#034;+margeh+&#034;px; background-image:url(\&#034;&#034;+preload+&#034;\&#034;); background-size: 0px 0px;&#034;); } } }else{ //alert(&#034;div image non trouv&#233;&#034;); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Puis on fait la m&#234;me chose pour le texte et le titre&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (this.document.getElementById('diapo_texte')!=null){ var div_texte=this.document.getElementById('diapo_texte'); // le div //alert (&#034;on a le div texte&#034;); div_texte.innerHTML=&#034;&lt;span class=\&#034;titre_diapo\&#034;&gt;&lt;a href=\&#034;&#034;+url_article+&#034;\&#034;&gt;&#034;+titre_diapo+&#034;&lt;/a&gt;&lt;/span&gt;&lt;p&gt;&lt;span class=\&#034;texte_diapo\&#034;&gt;&#034;+texte_diapo+&#034;&lt;/span&gt;&lt;/p&gt;&#034;; }else{ //alert(&#034;div texte non trouv&#233;&#034;); } }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;...et on demande le prochain &#233;l&#233;ment, si bien s&#251;r cela a du sens.&lt;br class='autobr' /&gt;
Si le diaporama n'a aucun ou qu'un seul &#233;l&#233;ment, il n'est pas utile d'envoyer d'autre requ&#234;te, et le script du serveur indiquera que prochain vaut &#034;-1&#034;, soit une valeur non valide.&lt;/p&gt;
&lt;p&gt;la commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;setTimeout(&lt;/code&gt; permet de d&#233;finir un d&#233;lai avant de demander le prochain &#233;l&#233;ment.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; diapo=prochain; if (prochain!=-1){ //	requete_requete_image_diapo(&#034;charger_diapo.php?id=&#034;+diapo+&#034;&amp;delai=&#034;+delai); setTimeout(&#034;requete_requete_image_diapo('charger_diapo.php?id='+diapo+'&amp;rub='+nrubrique+'&amp;min='+mindepth+'&amp;max='+maxdepth+'&amp;lang='+lang)&#034;,delai); } }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;script PHP&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Le script PHP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_diapo.php&lt;/code&gt;, situ&#233; &#224; la racine du serveur web, et appel&#233; comme URL par la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;charger_diapo&lt;/code&gt; et apr&#232;s chaque traitement de r&#233;ponse, va traiter la requ&#234;te xmlhttp et envoyer une r&#233;ponse au format XML.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php
session_start();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans la mesure o&#249; les scripts PHP de SPIP peuvent utiliser des variables de session pour stocker des param&#232;tres, on se connecte &#224; cette session afin de pouvoir r&#233;cup&#233;rer la langue choisie.&lt;/p&gt;
&lt;p&gt;On cr&#233;&#233; l'ent&#234;te de la r&#233;ponse avant qu'un autre script, de traitement des accents, ne s'en charge.&lt;br class='autobr' /&gt;
le script &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;accents.php&lt;/code&gt; contient plusieurs fonctions, dont une utilis&#233;e pour transformer les caract&#232;res accentu&#233;s contenus dans la base en leur &#233;quivalent en code HTML, permettant un affichage normal quel que soient les encodages de caract&#232;re du serveur et du navigateur.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;header('content-Type:text/xml,charset=UTF-8');
require &#034;accents.php&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On se connecte &#224; la base de donn&#233;es.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;mysql_connect('serveur','utilisateur','mot de passe','MYSQL'); mysql_select_db(&#034;nom de la base&#034;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On travaillera sur les tables des rubriques et des articles de SPIP, qui ont g&#233;n&#233;ralement un nom commen&#231;ant par &#034;spip_&#034;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$tablerubriques=&#034;spip_rubriques&#034;;
$tablearticles=&#034;spip_articles&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La requ&#234;te xmlhttp envoyant ses param&#232;tres dans l'url, par la m&#233;thode GET (voir &lt;a href='https://vader-fr.fr/spip.php?article63' class=&#034;spip_in&#034;&gt;article&lt;/a&gt; sur PHP), on r&#233;cup&#232;re les param&#232;tres par la variable globale &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$_GET&lt;/code&gt;, qui est un tableau associatif (les colonnes sont identifi&#233;es par nom et non par num&#233;ro).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if (isset($_GET[&#034;id&#034;])){ $idd=$_GET[&#034;id&#034;];
}else{ $idd=0; /* id du diapo en cours, &#224; diviser par total de diapo et prendre le reste , ex si idd = 5 pour 3 photos existantes, alors charger photo 2 */
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Autres param&#232;tres&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if (isset($_GET[&#034;delai&#034;])){ $delai=$_GET[&#034;delai&#034;]; //echo &#034;delai de $delai secondes&lt;br&gt;&#034;;
}else{ $delai=0;
} if (isset($_GET[&#034;rub&#034;])){ $id_rubrique_diapo=$_GET[&#034;rub&#034;];
}else{ $id_rubrique_diapo=0; } if (isset($_GET[&#034;min&#034;])){ $min_depth=$_GET[&#034;min&#034;];
}else{ $min_depth=0; } if (isset($_GET[&#034;max&#034;])){ $max_depth=$_GET[&#034;max&#034;];
}else{ $max_depth=1; } if (isset($_GET[&#034;lang&#034;])){ $_SESSION[&#034;lang&#034;]=$_GET[&#034;lang&#034;];
}else{ if (isset($_SESSION[&#034;languser&#034;])){ $_SESSION[&#034;lang&#034;]=$_SESSION[&#034;languser&#034;]; } if (!isset($_SESSION[&#034;lang&#034;])){ $_SESSION[&#034;lang&#034;]=&#034;fr&#034;; }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour la langue, on essaie d'abord de la r&#233;cup&#233;rer par le param&#232;tre fourni lors de la requ&#234;te et le stocker dans la variable de session &#034;lang&#034;, avant de pendre la variable de session &#034;languser&#034; si elle est d&#233;finie, et enfin, si la variable de session &#034;lang&#034; n'est toujours pas d&#233;finie, on prend par d&#233;faut langue fran&#231;aise.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Une fonction de parcourt de rubrique et sous-rubrique est d&#233;finie, ce qui permet de faire du parcours r&#233;cursif, lorsque la fonction s'appelle elle-m&#234;me.&lt;br class='autobr' /&gt;
La fonction renverra tous les identifiants de sous-rubriques dans lesquelles on est susceptible de trouver des &#233;l&#233;ments de diaporama.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;function parcourt_rubrik($cur_rubrik,$curdepth,$maxdepth,$mindepth) {&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces deux param&#232;tres ne pouvant &#234;tre pass&#233;s d'un niveau &#224; l'autre de la boucle r&#233;cursive sans rendre la fonction complexe, on les red&#233;finit localement &#224; chaque niveau.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$tablerubriques=&#034;spip_rubriques&#034;; $tablearticles=&#034;spip_articles&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$curdepth.=$curdepth+1; $rubs=array(); // le tableau qu'on renverra, contenant dans la case 0 sa taille $reksrub=&#034;select id_rubrique from &#034;.$tablerubriques.&#034; where id_parent=$cur_rubrik&#034;; $resrub=mysql_query($reksrub); while ($rowrub=mysql_fetch_array($resrub,MYSQL_ASSOC)){ $ssrub=$rowrub[&#034;id_rubrique&#034;]; if ($curdepth&gt;=$mindepth){ $rubs[]=$ssrub; } if ($curdepth&lt;$maxdepth){ $rubs=array_merge($rubs,parcourt_rubrik($ssrub,$curdepth,$maxdepth,$mindepth)); } } return $rubs;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On cr&#233;&#233; donc la liste des rubriques en appelant la fonction r&#233;cursive, en partant de la rubrique fournie en param&#232;tre par la requ&#234;te xmlhttp.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$liste_rubriques=parcourt_rubrik($id_rubrique_diapo,$min_depth,$max_depth,$min_depth);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, on construit un morceau de la requ&#234;te SQL, &#224; savoir une partie de la clause conditionnelle WHERE, en ajoutant &#224; un code de base des morceaux de code SQL&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;&#231;a tombe bien, j'avais justement besoin d'exemple de ce genre de m&#233;thode (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;br class='autobr' /&gt;
On utilise une boucle while (tant que) pour parcourir un tableau dont la taille est variable, en s'arr&#234;tant lorsque l'index atteint le nombre de case contenues dans le tableau, et en incr&#233;mentant l'index au fur et &#224; mesure.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$liste_rubrik=&#034;(id_rubrique=$id_rubrique_diapo&#034;;
$irub=0; while ($irub&lt;count($liste_rubriques)){ $liste_rubrik.=&#034; or id_rubrique=$liste_rubriques[$irub]&#034;; $irub++;
} $liste_rubrik.=&#034;)&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois que la partie &#034;liste des rubriques parentes&#034; de la requ&#234;te des articles que l'on va s&#233;lectionner est cr&#233;&#233;e, on l'utilise d'abord dans une requ&#234;te pour compter les &#233;l&#233;ments, puis ensuite dans la requ&#234;te de r&#233;cup&#233;ration.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;/* requete pour conna&#238;tre le nombre total de photos pouvant &#234;tre affich&#233;es */ $rek_compt=&#034;select count(*) as total from &#034;.$tablearticles.&#034; where $liste_rubrik and statut='publie' and lang='&#034;.$_SESSION[&#034;lang&#034;].&#034;'&#034;; // pas de order by pour compter
$res_compt=mysql_query($rek_compt);
$row_total=mysql_fetch_array($res_compt,MYSQL_ASSOC);
$total=$row_total[&#034;total&#034;];&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; clause SELECT :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; On compte &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;count&lt;/code&gt;&lt;/li&gt;&lt;li&gt; les lignes dans leur globalit&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;count(*)&lt;/code&gt;&lt;/li&gt;&lt;li&gt; dont on stockera le compte dans une colonne nomm&#233;e &#034;total&#034; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;as total&lt;/code&gt;, plus simple pour la r&#233;f&#233;rencer,&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; clause FROM
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; depuis la table des articles, dont le nom, susceptible de varier, a &#233;t&#233; mis dans la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tablearticles&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; clause WHERE
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour les articles faisant partie de la liste des rubriques&lt;/li&gt;&lt;li&gt; et &#233;tant publi&#233;s&lt;/li&gt;&lt;li&gt; et dont la langue est celle d&#233;termin&#233;e plus t&#244;t et stock&#233;e dans la variable de session.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if ($total&gt;0){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si il y a effectivement plusieurs articles publi&#233;s dans les rubriques cibl&#233;es et ce dans la langue choisie, alors on va r&#233;cup&#233;rer les deux premiers articles selon un tri d&#233;finit plus bas.&lt;br class='autobr' /&gt;
Le script JavaScript, fournissant toujours un param&#232;tre de num&#233;ro de diapo &#224; charger dans la requ&#234;te xmlhttp, on se base sur ce param&#232;tre pour d&#233;marrer la s&#233;lection dans la liste des articles disponibles.&lt;/p&gt;
&lt;p&gt;Quand au prochain &#233;l&#233;ment de diaporama &#224; charger, c'est soit l'article suivant dans la liste - si l'article en cours n'est pas le dernier de la liste - soit le premier, &#224; savoir le num&#233;ro 0 de la liste (tableau des r&#233;ponses).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$debut=$idd; // 0 par defaut $par_page=1; if (($idd+1)&lt;$total){ $prochain=$idd+1; }else{ $prochain=0; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La requ&#234;te de s&#233;lection est la m&#234;me que celle de comptage, logique puisque l'on travaille sur les m&#234;mes &#233;l&#233;ments.&lt;br class='autobr' /&gt;
Seules les clauses SELECT - car on ne compte pas cette fois - et la clause de tri ORDER - qui &#233;tait inutile dans une requ&#234;te de comptage - vont changer&lt;br class='autobr' /&gt;
On ajoute aussi une clause LIMIT qui restreint le nombre de lignes de r&#233;sultat que l'on va finalement traiter.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; clause SELECT : on s&#233;lectionne tous les champs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;*&lt;/code&gt;&lt;/li&gt;&lt;li&gt; clause ORDER BY par date d&#233;croissante &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;DESC&lt;/code&gt;, et donc par article le plus r&#233;cent.&lt;/li&gt;&lt;li&gt; on limite les lignes de r&#233;sultat &#224; 1, comme vu plus haut &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; $par_page=1;&lt;/code&gt;, et on d&#233;marre &#224; la ligne num&#233;ro &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$debut&lt;/code&gt;, &#224; savoir &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$idd&lt;/code&gt;, le param&#232;tre de num&#233;ro de diapo fourni &#224; l'appel du script par la requ&#234;te xmlhttp.&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$rek_sel=&#034;select * from &#034;.$tablearticles.&#034; where $liste_rubrik and statut='publie' and lang='&#034;.$_SESSION[&#034;lang&#034;].&#034;' order by 'date' DESC limit $debut,$par_page &#034;; // order by date DESC $res_sel=mysql_query($rek_sel);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#201;tant donn&#233; que l'on traite des articles, et que l'image cherch&#233;e est un logo, il est bon de savoir que sous SPIP, les logos ont un nom particulier :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; type de l'&#233;l&#233;ment SPIP &lt;strong&gt;art&lt;/strong&gt;icles, &lt;strong&gt;rub&lt;/strong&gt;riques, &lt;strong&gt;site&lt;/strong&gt;s&lt;/li&gt;&lt;li&gt; &lt;strong&gt;on&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; num&#233;ro dudit &#233;l&#233;ment&lt;/li&gt;&lt;li&gt; les logos &#233;tant stock&#233;s &#224; la racine du dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;IMG&lt;/code&gt;, peu importe leur extension (jpg, png, gif...)&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$imagebase=&#034;IMG/arton&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour chaque ligne de r&#233;sultat renvoy&#233;e (en fait il n'y en a qu'une)&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	while ($row_sel=mysql_fetch_array($res_sel,MYSQL_ASSOC)){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On r&#233;cup&#232;re la valeur de chaque champ dont on a besoin.&lt;br class='autobr' /&gt;
Les champs de type texte (titre et texte) passent par plusieurs filtres pour traiter des caract&#232;res sp&#233;ciaux qui risqueraient de faire planter le document XML r&#233;ponse.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; $id=$row_sel[&#034;id_article&#034;]; $titre=htmlentities($row_sel[&#034;titre&#034;]); $titre=remet_accents($titre); $titre=str_replace(&#034;'&#034;,&#034;'&#034;,$titre); $titre=str_replace('&#034;','&#034;',$titre); $titre=str_replace(&#034;&#176;&#034;,&#034;&amp;deg;&#034;,$titre); $texte=htmlentities($row_sel[&#034;texte&#034;]); $texte=remet_accents($texte); $texte=str_replace(&#034;'&#034;,&#034;'&#034;,$texte); $texte=str_replace('&#034;','&#034;',$texte); $texte=str_replace(&#034;&#176;&#034;,&#034;&amp;deg;&#034;,$texte); $texte=nl2br($texte); $urlarticle=&#034;spip.php?article$id&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour l'image, on recherche si le fichier &lt;i&gt;artonXX&lt;/i&gt; existe pour plusieurs extensions possibles.&lt;br class='autobr' /&gt;
Si un fichier portant ce nom existe, alors on a trouv&#233;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; // image = IMG/arton[+id article].jpg ou autre // =========== existence du fichier jpg, png ou gif ============== $extensions=array(&#034;jpg&#034;,&#034;jpeg&#034;,&#034;JPG&#034;,&#034;png&#034;,&#034;PNG&#034;,&#034;gif&#034;,&#034;GIF&#034;); $i=0; $trouve=false; $image=&#034;&#034;; while (($i&lt;sizeof($extensions))&amp;&amp;($trouve==false)){ $image_test=$imagebase.$id.&#034;.&#034;.$extensions[$i]; //echo &#034;on teste $image_test&lt;br&gt;&#034;; if (file_exists($image_test)){ //echo &#034;$image_test existe&lt;br&gt;&#034;; $image=$image_test; $trouve=true; }else{ //echo &#034;$image_test n'existe pas&lt;br&gt;&#034;; } $i++; } // image par d&#233;faut if (!$trouve){ $image=&#034;interrogation.png&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si aucun fichier image de logo correspondant &#224; l'article n'est trouv&#233;, on prend une image par d&#233;faut.&lt;br class='autobr' /&gt;
Puis on r&#233;cup&#232;re les dimensions de l'image contenue dans le fichier avec une fonction PHP.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; $infos_image = @getImageSize($image); // info sur la dimension de l'image // '@' est plac&#233; devant la fonction getImageSize() pour empecher l'affichage des erreurs si l'image est absente. //dimension $largeur = $infos_image[0]; // largeur de l'image $hauteur = $infos_image[1]; // hauteur de l'image&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces informations de taille seront envoy&#233;es dans la r&#233;ponse et utilis&#233;es par le script pour redimensionner l'image si besoin est.&lt;/p&gt;
&lt;p&gt;Et on oublie pas de fermer la boucle de traitement de la ligne de r&#233;sultat des articles correspondants &#224; ce que l'on cherche.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis on s&#233;lectionne l'image suivante afin de pouvoir commencer &#224; la charger plus t&#244;t, de sorte qu'au tour d'apr&#232;s, l'image de la diaporama suivante se chargera plus vite.&lt;br class='autobr' /&gt;
La requ&#234;te est la m&#234;me que la pr&#233;c&#233;dente, mais on ne prendra pas la m&#234;me ligne de r&#233;sultat.&lt;br class='autobr' /&gt;
Le traitement pour trouver le fichier image sera le m&#234;me.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Image suivante&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	$rek_presel=&#034;select * from &#034;.$tablearticles.&#034; where $liste_rubrik and statut='publie' and lang='&#034;.$_SESSION[&#034;lang&#034;].&#034;' order by 'date' DESC limit $prochain,$par_page &#034;; // order by date DESC $res_presel=mysql_query($rek_presel); while ($row_presel=mysql_fetch_array($res_presel,MYSQL_ASSOC)){ $extensions=array(&#034;jpg&#034;,&#034;jpeg&#034;,&#034;JPG&#034;,&#034;png&#034;,&#034;PNG&#034;,&#034;gif&#034;,&#034;GIF&#034;); $i=0; $trouve=false; $pre_image=&#034;&#034;; while (($i&lt;sizeof($extensions))&amp;&amp;($trouve==false)){ $image_test=$imagebase.$id.&#034;.&#034;.$extensions[$i]; //echo &#034;on teste $image_test&lt;br&gt;&#034;; if (file_exists($image_test)){ //echo &#034;$image_test existe&lt;br&gt;&#034;; $pre_image=$image_test; $trouve=true; }else{ //echo &#034;$image_test n'existe pas&lt;br&gt;&#034;; } $i++; } // image par d&#233;faut if (!$trouve){ $pre_image=&#034;interrogation.png&#034;; } } //echo &#034;image trouvee : $image&lt;br&gt;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Si en revanche il n'y a aucun article correspondant &#224; ce que l'on cherche&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;}else{ $image=&#034;interrogation.png&#034;; $texte=&#034;\&#034;\&#034;&#034;; $largeur=0; $hauteur=0; $delai=0; $pre_image=&#034;\&#034;\&#034;&#034;; $urlarticle=&#034;#&#034;; // page actuelle $prochain=-1; $titre=&#034;Aucune image disponible.&#034;; // changer le texte selon la langue if ($_SESSION[&#034;lang&#034;]==&#034;fr&#034;){ $titre=&#034;Aucune image disponible.&#034;; // changer le texte selon la langue } if ($_SESSION[&#034;lang&#034;]==&#034;en&#034;){ $titre=&#034;No article available for this language : english.&#034;; // changer le texte selon la langue } if ($_SESSION[&#034;lang&#034;]==&#034;de&#034;){ } $texte=$titre; // $texte=htmlentities($texte); // $texte=remet_accents($texte);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis il est temps de cr&#233;er le document XML qui servira de r&#233;ponse.&lt;br class='autobr' /&gt;
Dans Firebug, il est possible de voir, dans l'onglet r&#233;seau, les requ&#234;tes avec leurs param&#232;tres, et les r&#233;ponses associ&#233;es en XML.&lt;/p&gt;
&lt;p&gt;On cr&#233;e un objet de type DOMDocument, puis on y ajoute les &#233;l&#233;ments et sous-&#233;l&#233;ments, en commen&#231;ant par la racine du document.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;// r&#233;ponse du serveur = contenu de l'XmlHttpResponse
$doc=new DOMDocument(&#034;1.0&#034;,&#034;utf-8&#034;);
$racine=$doc-&gt;createElement('root');
$doc-&gt;appendChild($racine);
$url_image=$doc-&gt;createElement('image',$image);
$racine-&gt;appendChild($url_image);
$lien=$doc-&gt;createElement('url_article',$urlarticle);
$racine-&gt;appendChild($lien);
$titre_diapo=$doc-&gt;createElement('titre',$titre);
$racine-&gt;appendChild($titre_diapo);
$texte_diapo=$doc-&gt;createElement('texte',$texte);
$racine-&gt;appendChild($texte_diapo);
$info=$doc-&gt;createElement('largeur',$largeur);
$racine-&gt;appendChild($info);
$info2=$doc-&gt;createElement('hauteur',$hauteur);
$racine-&gt;appendChild($info2);
$tempo=$doc-&gt;createElement('delai',$delai);
$racine-&gt;appendChild($tempo);
$next=$doc-&gt;createElement('prochain',$prochain);
$racine-&gt;appendChild($next);
$pre=$doc-&gt;createElement('preload',$pre_image);
$racine-&gt;appendChild($pre);
$debug=$doc-&gt;createElement('debug',&#034;$debugmsg&#034;);
$racine-&gt;appendChild($debug);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et pour finir, on envoie le document par un simple &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo&lt;/code&gt; du texte XML renvoy&#233; par la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;saveXML&lt;/code&gt; sur l'objet.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;echo $doc-&gt;saveXML();
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;csfoo htmla&#034;&gt;&lt;/span&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;span class=&#034;csfoo htmlb&#034;&gt;&lt;/span&gt;&#231;a tombe bien, j'avais justement besoin d'exemple de ce genre de m&#233;thode pour un autre article&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Page de garde et structure g&#233;n&#233;rale</title>
		<link>https://vader-fr.fr/spip.php?article143</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article143</guid>
		<dc:date>2014-10-18T14:40:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>HTML</dc:subject>
		<dc:subject>D&#233;veloppement web</dc:subject>
		<dc:subject>SPIP</dc:subject>
		<dc:subject>CSS</dc:subject>

		<description>
&lt;p&gt;Page de garde &lt;br class='autobr' /&gt;
La toute premi&#232;re page (http://isabellepalenc.com/) est une simple page avec fond gris&#233; et 3 liens de langue. Pour l'instant, seul la langue fran&#231;aise est disponible car les articles n'ont pas encore &#233;t&#233; traduits. &lt;br class='autobr' /&gt;
Le lien de langue m&#232;ne ensuite &#224; la rubrique biographie (http://isabellepalenc.com/spip.php?rubrique2). &lt;br class='autobr' /&gt;
Sur la page de garde furent affich&#233;s la liste des articles les plus r&#233;cents, puis un diaporama automatique des &#339;uvres situ&#233;es dans la rubrique galerie, puis (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique31" rel="directory"&gt;Isabelle Palenc : artiste peintre sculpteur&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot3" rel="tag"&gt;HTML&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot9" rel="tag"&gt;D&#233;veloppement web&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot12" rel="tag"&gt;CSS&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Page de garde&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;La toute premi&#232;re page (&lt;a href=&#034;http://isabellepalenc.com/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://isabellepalenc.com/&lt;/a&gt;) est une simple page avec fond gris&#233; et 3 liens de langue. Pour l'instant, seul la langue fran&#231;aise est disponible car les articles n'ont pas encore &#233;t&#233; traduits.&lt;/p&gt;
&lt;p&gt;Le lien de langue m&#232;ne ensuite &#224; la rubrique biographie (&lt;a href=&#034;http://isabellepalenc.com/spip.php?rubrique2&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://isabellepalenc.com/spip.php?rubrique2&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Sur la page de garde furent affich&#233;s la liste des articles les plus r&#233;cents, puis un diaporama automatique des &#339;uvres situ&#233;es dans la rubrique galerie, puis enfin un diaporama automatique sur l'artiste et son atelier, ainsi qu'une citation.&lt;/p&gt;
&lt;p&gt;D&#232;s le d&#233;part - et c'est un point commun &#224; tous mes squelettes SPIP/Zpip - fut con&#231;ue une fausse rubrique &#034;Accueil&#034; en tant que rubrique num&#233;ro 1, et ce pour plusieurs raisons :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La rubrique est list&#233;e automatiquement dans le menu des rubriques principales du bloc navigation&lt;/li&gt;&lt;li&gt; Le nom de cette rubrique dans la liste peut facilement &#234;tre traduit gr&#226;ce &#224; un bloc multilingue dans SPIP, plus facile &#224; &#233;diter qu'un lien en dur dans le squelette.&lt;/li&gt;&lt;li&gt; Le site &#233;tant multilingue, le tri par titre dans la liste des rubriques aurait provoqu&#233; des incoh&#233;rences selon la langue, c'est pourquoi les rubriques sont list&#233;es par num&#233;ro.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La fausse rubrique &#233;tant la num&#233;ro 1, elle appara&#238;t toujours en premier, que son nom soit &#034;Accueil&#034; ou &#034;Home&#034;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Cette fausse rubrique peut en cacher d'autres, comme un diaporama d&#233;di&#233; ou une citation, qui ne seront visibles de nulle part ailleurs sur le site, y compris la page de plan ou la page recherche.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Cette fonctionnalit&#233; n'&#233;tait pas pr&#233;vue au d&#233;part, mais &#233;tait toujours possible, et &#224; fini par servir.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Au sein d'un plugin Zpip, les fichiers de squelette correspondants &#224; la page de garde sont :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rubrique=1.html&lt;/code&gt; &#224; la racine du plugin, qui se contente de d&#233;crire pour cette rubrique la m&#234;me structure que la page sommaire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt; &lt;INCLURE{fond=structure}{env}{type=page}{composition=sommaire} /&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page-sommaire.html&lt;/code&gt; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;contenu&lt;/code&gt;, qui d&#233;crit donc le contenu commun des pages sommaire et &#034;Accueil&#034; (rubrique 1).&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;rubrique-1.html&lt;/code&gt; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;contenu&lt;/code&gt;, qui affichera pour les sous rubriques de la rubrique 1 le m&#234;me contenu (que la page sommaire).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Squelette de la page de garde&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;div class=&#034;contenu-principal galeries&#034;&gt;&lt;/code&gt; le bloc conteneur g&#233;n&#233;ral du contenu.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Style CSS associ&#233;&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.contenu-principal { padding:5px;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour les &#233;l&#233;ments de classe &#034;contenu-principal&#034; : espace interne de 5 pixels &#224; gauche.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;div.galeries { position:absolute; top:50px; bottom:0; left:0; right:5px; overflow-y:auto;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour les blocs de classe &#034;galeries&#034; : fix&#233; &#224; 50 pixels du bord haut (du cadre conteneur ou de la fen&#234;tre), &#224; 0 pixels du bas et de la gauche, 5 pixels du bord droite, et ascenseur vertical (axe y) automatique.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le bloc du diaporama&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div id=&#034;diapo&#034; class=&#034;diapo-sommaire&#034;&gt; &lt;input type=&#034;hidden&#034; name=&#034;nrubrique&#034; id=&#034;nrubrique&#034; value=&#034;35&#034;/&gt; &lt;input type=&#034;hidden&#034; name=&#034;mindepth&#034; id=&#034;mindepth&#034; value=&#034;0&#034;/&gt; &lt;input type=&#034;hidden&#034; name=&#034;maxdepth&#034; id=&#034;maxdepth&#034; value=&#034;3&#034;/&gt; &lt;input type=&#034;hidden&#034; name=&#034;lang&#034; id=&#034;lang&#034; value=&#034;#LANG&#034;/&gt; &lt;div id=&#034;diapo_image&#034;&gt; &lt;BOUCLE_contenu_rubrique(ARTICLES){id_rubrique=35} {par date}{inverse}{lang}{pagination 1}&gt; [(#LOGO_ARTICLE)] &lt;/BOUCLE_contenu_rubrique&gt; &lt;/div&gt; &lt;div id=&#034;diapo_texte&#034;&gt; &lt;font color=&#034;red&#034;&gt;&lt;b&gt;JavaScript doit &#234;tre activ&#233; pour que le diaporama puisse d&#233;marrer&lt;/b&gt;&lt;/font&gt; &lt;/div&gt; &lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce bloc contient un formulaire, qui sera lu par le &lt;a href='https://vader-fr.fr/spip.php?article144' class=&#034;spip_in&#034;&gt;script JavaScript g&#233;n&#233;rique des diaporamas&lt;/a&gt;, afin de pr&#233;parer la requ&#234;te XMLHTTP pour le serveur et demander l'&#233;l&#233;ment de diaporama &#224; afficher.&lt;br class='autobr' /&gt;
Seuls les &#233;l&#233;ments (image, titre, texte descriptif) du diaporama seront demand&#233;s et t&#233;l&#233;charg&#233;s depuis le serveur, sans que la page ne soit recharg&#233;e, afin d'all&#233;ger la charge.&lt;/p&gt;
&lt;p&gt;Ce concept de programmation en web se nomme AJAX.&lt;/p&gt;
&lt;p&gt;Une boucle SPIP permet de charger la premi&#232;re image avant m&#234;me le lancement du diaporama.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Style CSS diaporama&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#diapo { position:absolute; left:0; top:55px; bottom:120px; right:55px; background-color:#999999;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le bloc &#034;diapo&#034; : fix&#233; &#224; gauche, en haut, en bas et &#224; droite. 120 pixels du bas afin de prendre en compte la hauteur - fixe - du bloc citation situ&#233; dessous.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#diapo_image, #bio_texte, #peintures_image { position:absolute; left:25px; top:25px; bottom:25px;
}
#diapo_image, #peintures_image { right:500px;
}
#diapo_texte, #peintures_contenu { width:475px;
}
#diapo_image img, #bio_image img, #peintures_image img { max-height:100%; max-width:100%;
} #diapo_texte, #bio_image, #peintures_contenu { position:absolute; bottom:0; top:25px; right:5px; padding-right:5px;
} #diapo_texte, #bio_texte, #peintures_contenu { overflow-y:auto;
} #diapo.diapo-sommaire #diapo_texte { visibility:hidden;
} #diapo.diapo-sommaire #diapo_image { right:5px;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Afin de cacher le bloc de texte du diaporama de la page de garde, et seulement celle l&#224;, le bloc diapo dispose d'une classe, &#034;diapo-sommaire&#034;, qui fait que les blocs &#034;diapo_texte&#034; contenus dans un bloc disposant de la classe pr&#233;cit&#233;e seront cach&#233;s.&lt;/p&gt;
&lt;p&gt;De m&#234;me, les blocs &#034;diapo_image&#034; contenus dans un bloc disposant de la classe pr&#233;cit&#233;e seront &#034;fix&#233;s&#034; &#224; 5px du bord droite, au lieu de 500px.&lt;/p&gt;
&lt;p&gt;Cette classe n'est d&#233;finie que dans le squelette de la page sommaire.&lt;br class='autobr' /&gt;
Cela permet d'avoir un seul &#034;squelette&#034; de diaporama, et donc un seul script AJAX, g&#233;n&#233;rique.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.titre_diapo { font-size:1.2em; font-weight:bold;
} .titre_diapo, .titre_diapo a, .titre_article { color:#666666;
} .titre_diapo a { text-decoration: none;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le bloc citation&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	&lt;div id=&#034;citation&#034;&gt; &lt;B_citation&gt; &lt;BOUCLE_citation(ARTICLES){id_rubrique=36} {par hasard}{lang} {pagination 1}&gt; [(#TEXTE)] &lt;/BOUCLE_citation&gt; &lt;/B_citation&gt; &lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, c'est une simple boucle SPIP qui va chercher un et un seul (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{pagination 1}&lt;/code&gt;) article (on travaille sur la table des &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;(ARTICLES)&lt;/code&gt;) au hasard (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{par hasard}&lt;/code&gt;) dans la rubrique 36 (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{id_rubrique=36}&lt;/code&gt;), rubrique d&#233;di&#233;e qui contient les citations et est cach&#233;e dans la rubrique &#034;Accueil&#034;.&lt;br class='autobr' /&gt;
Le filtre de langue &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{lang}&lt;/code&gt; permet de ne choisir que parmi les articles dans la langue souhait&#233;e, selon le param&#232;tre transmis &#224; SPIP (lien de langue).&lt;br class='autobr' /&gt;
On affiche ensuite le texte de la citation par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;[(#TEXTE)]&lt;/code&gt;.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Style CSS citation&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#citation { position:absolute; left:0; bottom:55px; right:55px; background-color:#999999; height:50px; text-align:center;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le bloc &#034;citation&#034; : fix&#233; &#224; gauche, en bas et &#224; droite, hauteur fixe de 50 pixels.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#citation p { font-size: 1.2em; margin: 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;/div&gt;&lt;/code&gt; Puis la fin du bloc conteneur g&#233;n&#233;ral&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Structure g&#233;n&#233;rale du site&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;L'&#233;l&#233;ment body est surcharg&#233; par un bloc &#034;page&#034; positionn&#233; de mani&#232;re absolue et fix&#233; aux bords de la fen&#234;tre.&lt;br class='autobr' /&gt;
Les diff&#233;rents &#233;l&#233;ments du corps de page sont ensuite dispos&#233; dans des blocs d&#233;di&#233;s : ent&#234;te, pied de page, navigation et contenu.&lt;br class='autobr' /&gt;
Les 4 blocs sont positionn&#233;s de mani&#232;re absolue &#224; l'int&#233;rieur du bloc &#034;page&#034;, fix&#233;s aux bords dudit bloc, afin que le bloc &#034;contenu&#034; puisse s'&#233;tendre selon la taille de l'&#233;cran, sans que les autres blocs ne se d&#233;forment (voir &lt;a href='https://vader-fr.fr/spip.php?article30' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Le bloc ent&#234;te contient lui-m&#234;me 2 sous-blocs :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le bloc unique d'identifiant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#drapos&lt;/code&gt;, contenant la liste des liens de langue selon les langues utilis&#233;es dans les articles publi&#233;s du site SPIP. Il est situ&#233; de mani&#232;re absolue dans son cadre (entete), fix&#233; &#224; 20% du bord gauche et 20 pixels du haut. Il peut ainsi s'&#233;tendre selon les besoins.&lt;/li&gt;&lt;li&gt; le bloc de classe &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.accueil&lt;/code&gt;, qui est de fait &#233;galement unique. Il est lui aussi fix&#233; de mani&#232;re absolue dans son cadre (entete), &#224; 150 pixels du bord droite et 20 pixels du haut. Il contient le logo, qui est de largeur fixe.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cela permet si besoin est de mettre un bloc d'arri&#232;re plan et un bloc filtre sans toucher au contenu, comme c'est le cas pour certains de mes th&#232;mes ZenGarden (&lt;a href='https://vader-fr.fr/spip.php?article132' class=&#034;spip_in&#034;&gt;exemple&lt;/a&gt;).&lt;br class='autobr' /&gt;
L'arri&#232;re plan &#233;tant monochrome, et le bloc contenu disposant g&#233;n&#233;ralement d'un arri&#232;re plan propre, il n'a pas &#233;t&#233; n&#233;cessaire d'utiliser un bloc d&#233;di&#233; &#224; l'arri&#232;re plan et un bloc filtre.&lt;/p&gt;
&lt;dl class='spip_document_279 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH274/isa_firebug01-d13c3.jpg?1771624584' width='500' height='274' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Structure g&#233;n&#233;ral site Isabelle palenc&lt;/strong&gt;&lt;/dt&gt;
&lt;dd class='spip_doc_descriptif' style='width:350px;'&gt;Aper&#231;u par Firebug (module pour Mozilla Firefox)
&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Th&#232;me ZenGarden Star Wars Empire Forces</title>
		<link>https://vader-fr.fr/spip.php?article140</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article140</guid>
		<dc:date>2014-07-11T16:52:51Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Th&#232;mes</dc:subject>

		<description>
&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi ici). En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : bckg, filtre et page Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (par commun.css) de mani&#232;re absolute &#224; une distance des bords &#233;gale &#224; 0 , mais : bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan. filtre a pour index Z = -1, il sert habituellement de &#034;filtre&#034; gr&#226;ce &#224; une (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique38" rel="directory"&gt;Th&#232;mes ZenGarden&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot11" rel="tag"&gt;Th&#232;mes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://vader-fr.fr/local/cache-vignettes/L150xH80/arton140-7d6b8.jpg?1771618583' class='spip_logo spip_logo_right' width='150' height='80' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi &lt;a href='https://vader-fr.fr/spip.php?article108' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt;).&lt;br class='autobr' /&gt;
En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt;&lt;br class='autobr' /&gt;
Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;par commun.css&lt;/strong&gt;) de mani&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;absolute&lt;/code&gt; &#224; une distance des bords &#233;gale &#224; 0 , mais :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; filtre a pour index Z = -1, il sert habituellement de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond et une opacit&#233; variable qui vont &#034;att&#233;nuer&#034; les contrastes de couleur de l'arri&#232;re plan. Dans le cas pr&#233;sent, le fond sombre tranche suffisamment avec les couleurs claires du texte pour se passer du cadre filtre.&lt;/li&gt;&lt;li&gt; page a pour index Z = 0 (valeur par d&#233;faut), son fond est transparent, ses &#233;l&#233;ments opaques car n'&#233;tant pas affect&#233;s par l'opacit&#233; variable du bloc filtre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce th&#232;me est un th&#232;me Zengarden, &lt;strong class=&#034;caractencadre-spip spip&#034;&gt;mais il est &#034;l&#233;ger&#034; et se base sur une feuille de style commune&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt; est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes &lt;/code&gt;du site&lt;/li&gt;&lt;li&gt; ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; la feuille de style du th&#232;me se contente de modifier les couleurs, les images, &#233;ventuellement la police, la taille et la &#034;d&#233;coration&#034; des textes
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le th&#232;me n'a donc pas besoin de d&#233;clarer toutes les propri&#233;t&#233;s, ce qui rend sa conception et sa maintenance plus simples.&lt;/li&gt;&lt;li&gt; si besoin est, le th&#232;me peut remplacer les propri&#233;t&#233;s d&#233;finies dans la feuille commune.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Ce syst&#232;me permet une plus grande compatibilit&#233; des th&#232;mes avec diff&#233;rents sites et donc diff&#233;rents squelettes Zpip.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Graphiquement, ce th&#232;me est bas&#233; sur la &lt;a href=&#034;https://addons.mozilla.org/en-us/firefox/addon/star-wars-empire-forces/&#034;&gt;&lt;b&gt;persona&lt;/b&gt;&lt;/a&gt; pour Firefox du m&#234;me nom par &lt;a href=&#034;https://addons.mozilla.org/en-us/firefox/user/eugenioliveira/&#034;&gt;&lt;b&gt; eugenioliveira&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une image de fond espace&lt;/li&gt;&lt;li&gt; exceptionnellement le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; n'a pas de couleur d'arri&#232;re plan et est compl&#233;tement transparent&lt;/li&gt;&lt;li&gt; le texte du contenu est donc en orange, les liens principaux (navigation, ent&#234;te, pied de page, fil d'Ariane) en jaune (sans &#234;tre agressif), les liens standards en blanc, l'ent&#234;te et le pied de page reprenant les couleurs de fond et de texte de la persona&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span class='spip_document_247 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH269/empire_forces-6487f.png?1771618584' width='500' height='269' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;L'ic&#244;ne du bloc d&#233;pliant &#034;zone_tags&#034; contenant la liste des tags li&#233;s &#224; l'article est celle &#034;par d&#233;faut&#034; indiqu&#233;e dans le css commun, et situ&#233;e &#224; la racine des th&#232;mes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;le bloc &#034;logo&#034; &#233;tant d&#233;fini dans mon squelette Zpip, il ne l'est pas dans les th&#232;mes, pour des raisons d'unicit&#233; de l'identifiant du div.&lt;/strong&gt;&lt;/p&gt;
&lt;dl class='spip_document_249 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/7z/theme_empire_forces.7z' title='7 Zip - 164.4 kio' type=&#034;application/x-7z-compressed&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/7z-91dc2.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Th&#232;me ZenGarden Star-Wars Empire Forces&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_236 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L50xH28/tagcloud-349f0.png?1771618584' width='50' height='28' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Ic&#244;ne mots-cl&#233;s&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_237 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/css/commun.css' title='Cascading Style Sheet - 15 kio' type=&#034;text/css&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Feuille de style commune (site vader-fr)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Affichage d'une rubrique par vignettes</title>
		<link>https://vader-fr.fr/spip.php?article139</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article139</guid>
		<dc:date>2014-06-17T16:23:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>HTML</dc:subject>
		<dc:subject>SPIP</dc:subject>
		<dc:subject>CSS</dc:subject>

		<description>
&lt;p&gt;La rubrique de mes Th&#232;mes Zengarden affiche les sous-rubriques et articles par vignettes, et non sous forme de liste comme dans les autres rubriques. &lt;br class='autobr' /&gt;
Comment mettre en place ce format d'affichage ? &lt;br class='autobr' /&gt;
1) la boucle SPIP &lt;br class='autobr' /&gt;
Pour &#233;viter d'avoir ce format d'affichage dans toutes les rubriques, il ne faudra le mettre que dans des squelettes de rubriques d&#233;di&#233;s. &lt;br class='autobr' /&gt;
Ne faire ce format d'affichage que pour des rubriques avec relativement peu d'articles car il n'y a pas de syst&#232;me de pagination. &lt;br class='autobr' /&gt;
&#224; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique30" rel="directory"&gt;Vader-fr.fr&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot3" rel="tag"&gt;HTML&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot12" rel="tag"&gt;CSS&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La rubrique de &lt;a href='https://vader-fr.fr/spip.php?rubrique38'&gt;mes Th&#232;mes Zengarden&lt;/a&gt; affiche les sous-rubriques et articles par vignettes, et non sous forme de liste comme dans les autres rubriques.&lt;/p&gt;
&lt;p&gt;Comment mettre en place ce format d'affichage ?&lt;/p&gt;
&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;1) la boucle SPIP&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;Pour &#233;viter d'avoir ce format d'affichage dans toutes les rubriques, il ne faudra le mettre que dans des squelettes de rubriques d&#233;di&#233;s.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;Ne faire ce format d'affichage que pour des rubriques avec relativement peu d'articles car il n'y a pas de syst&#232;me de pagination.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#224; l'int&#233;rieur de la &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;BOUCLE_contenu_rubrique(RUBRIQUES){id_rubrique}&gt;&lt;/code&gt;, il faudra cr&#233;er 2 boucles, une pour les rubriques, auxquelles on ajoute une petite ic&#244;ne style &#034;r&#233;pertoire&#034;, et une pour les articles.&lt;/p&gt;
&lt;p&gt;Je ne vais pas expliquer le fonctionnement complet de la boucle SPIP ici, simplement le code HTML g&#233;n&#233;r&#233;.&lt;/p&gt;
&lt;p&gt;On s&#233;lectionne dans la table des rubriques, selon l'identifiant de la rubrique parent (la rubrique affich&#233;e) et on trie de mani&#232;re alphanum&#233;rique par le titre au lieu de la date de publication. &lt;br class='autobr' /&gt;
Ainsi, les vignettes seront dans l'ordre alphab&#233;tique, ce qui est plus simple pour les visiteurs.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	&lt;B_sous_rubriques&gt; &lt;BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par num titre, titre}&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On g&#233;n&#232;re un bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;div&lt;/code&gt;, dont la classe de style permettra un traitement ad&#233;quat.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;div class=&#034;vignettes_rubrique&#034;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans ce bloc, on affiche le logo de l'article (ou de la rubrique), en le r&#233;duisant aux bonnes dimensions, gr&#226;ce au filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|image_reduire{250,150}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En dessous de l'image (en raison de l'utilisation d'un bloc paragraphe), mais toujours dans le m&#234;me cadre, on affiche le titre de l'article (ou de la rubrique).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; &lt;a href=&#034;#URL_RUBRIQUE&#034;&gt;[(#LOGO_RUBRIQUE|image_reduire{150,70})]&lt;p class=&#034;texte&#034;&gt;[(#TITRE)]&lt;/p&gt;&lt;/a&gt; &lt;/div&gt; &lt;/BOUCLE_sous_rubriques&gt; &lt;/B_sous_rubriques&gt;	&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Articles et rubriques auraient pu avoir une classe CSS identique, mais il est pr&#233;f&#233;rable de faire une diff&#233;rence afin que celle-ci soit visible pour les visiteurs.&lt;/p&gt;
&lt;p&gt;la boucle pour les articles :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	&lt;B_articles&gt; &lt;BOUCLE_articles(ARTICLES){id_rubrique} {par num titre, titre}&gt; &lt;div class=&#034;vignettes_article&#034;&gt; &lt;a href=&#034;#URL_ARTICLE&#034;&gt;[(#LOGO_ARTICLE|image_reduire{150,70})]&lt;br&gt;#TITRE&lt;/a&gt; &lt;/div&gt; &lt;/BOUCLE_articles&gt; &lt;/B_articles&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;2) le style CSS&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Toutes les vignettes s'alignent dans le m&#234;me cadre, gr&#226;ce &#224; la propri&#233;t&#233; de style &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;float:left&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Comme il n'y a pas de pagination, il faudra permettre au cadre conteneur de d&#233;filer, avec la propri&#233;t&#233; de style &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;overflow-y:auto&lt;/code&gt;, qui affichera donc un &#034;ascenseur&#034; vertical si le contenu d&#233;passe la taille du cadre. &lt;br class='autobr' /&gt;
Sauf si le cadre n'est pas &#034;fix&#233;&#034; en taille fixe ou &#224; distance fixe des bords en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;position:absolute&lt;/code&gt; (ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;position:relative&lt;/code&gt;), auquel cas il pourra s'agrandir &#224; volont&#233;... et la page avec.&lt;/p&gt;
&lt;p&gt;Tout d'abord, la taille et le positionnement, communs aux deux classes de vignettes.&lt;br class='autobr' /&gt;
La taille doit &#234;tre coh&#233;rente avec celle du filtre de la boucle SPIP, et pr&#233;voir la hauteur du texte sous l'image.&lt;/p&gt;
&lt;p&gt;La propri&#233;t&#233; de style &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;float:left&lt;/code&gt; permet de faire &#034;flotter&#034; les blocs, qui vont s'aligner les uns &#224; c&#244;t&#233;s des autres, puis &#034;couler&#034; &#224; la ligne suivante.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.vignettes_rubrique, .vignettes_article { width:150px; height:100px; float:left; margin: 10px; text-align: center;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;De m&#234;me, les images (&#233;l&#233;ments HTML correspondants &#224; la balise HTML &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;img&lt;/code&gt;) contenus dans un bloc de classe vignettes, auront une taille limit&#233;e par le style CSS.&lt;/p&gt;
&lt;p&gt;Dans la mesure o&#249; la taille des images est limit&#233;e par le filtre de la boucle SPIP, cette pr&#233;caution n'est pas n&#233;cessaire.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.vignettes_rubrique img, .vignettes_article img { max-width:150px;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class='spip_document_248 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L32xH32/icon_rep-0fd8f.png?1771624584' width='32' height='32' alt=&#034;&#034; /&gt;&lt;/span&gt; Pour les blocs des vignettes de rubriques, on ajoute une image d'arri&#232;re plan, en forme d'ic&#244;ne de r&#233;pertoire, qui sera positionn&#233;e en bas &#224; droite, et non r&#233;p&#233;t&#233;e.&lt;br class='autobr' /&gt;
Cette image est situ&#233;e dans le m&#234;me r&#233;pertoire que le CSS, m&#234;me si le CSS est question est invoqu&#233; par un CSS de th&#232;me situ&#233; dans un sous-r&#233;pertoire, dans le cas d'une feuille de style commune (ce qui est le cas pour ce site).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.vignettes_rubrique { background-image:url(&#034;icon_rep.png&#034;); background-position:bottom right; background-repeat:no-repeat;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En raison de la pr&#233;sence de cette vignette, il faut, afin que le texte (titre) des blocs vignettes de rubriques reste lisible et ne passe pas devant, ajouter une marge &#224; droite, ici de 32px.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;.vignettes_rubrique .texte { margin: 0 32px 0 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Th&#232;me ZenGarden Fedora 16 (Verne)</title>
		<link>https://vader-fr.fr/spip.php?article133</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article133</guid>
		<dc:date>2014-05-01T17:40:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Th&#232;mes</dc:subject>

		<description>
&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi ici). En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : bckg, filtre et page Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (par commun.css) de mani&#232;re absolute &#224; une distance des bords &#233;gale &#224; 0 , mais : bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan. filtre a pour index Z = -1, il sert de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique38" rel="directory"&gt;Th&#232;mes ZenGarden&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot11" rel="tag"&gt;Th&#232;mes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://vader-fr.fr/local/cache-vignettes/L150xH82/arton133-1d651.png?1771618584' class='spip_logo spip_logo_right' width='150' height='82' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi &lt;a href='https://vader-fr.fr/spip.php?article108' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt;).&lt;br class='autobr' /&gt;
En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt;&lt;br class='autobr' /&gt;
Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;par commun.css&lt;/strong&gt;) de mani&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;absolute&lt;/code&gt; &#224; une distance des bords &#233;gale &#224; 0 , mais :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; filtre a pour index Z = -1, il sert de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond et une opacit&#233; variable qui vont &#034;att&#233;nuer&#034; les contrastes de couleur de l'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; page a pour index Z = 0 (valeur par d&#233;faut), son fond est transparent, ses &#233;l&#233;ments opaques car n'&#233;tant pas affect&#233;s par l'opacit&#233; variable du bloc filtre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce th&#232;me est un th&#232;me Zengarden, &lt;strong class=&#034;caractencadre-spip spip&#034;&gt;mais il est &#034;l&#233;ger&#034; et se base sur une feuille de style commune&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt; est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes &lt;/code&gt;du site&lt;/li&gt;&lt;li&gt; ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; la feuille de style du th&#232;me se contente de modifier les couleurs, les images, &#233;ventuellement la police, la taille et la &#034;d&#233;coration&#034; des textes
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le th&#232;me n'a donc pas besoin de d&#233;clarer toutes les propri&#233;t&#233;s, ce qui rend sa conception et sa maintenance plus simples.&lt;/li&gt;&lt;li&gt; si besoin est, le th&#232;me peut remplacer les propri&#233;t&#233;s d&#233;finies dans la feuille commune.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Ce syst&#232;me permet une plus grande compatibilit&#233; des th&#232;mes avec diff&#233;rents sites et donc diff&#233;rents squelettes Zpip.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Graphiquement, ce th&#232;me se pr&#233;sente sous la forme d'un bureau Gnome 3 du syst&#232;me Linux Fedora 16.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une image de fond marin avec sous-marin de type Nautilus, en r&#233;f&#233;rence &#224; Jules Verne, sert d'arri&#232;re plan au site, dans le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;. Cette image est &#233;tendue aux dimensions du bloc (et donc de la page), ce qui peut &#233;ventuellement la d&#233;former.&lt;/li&gt;&lt;li&gt; exceptionnellement le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; n'a pas de couleur d'arri&#232;re plan et est compl&#233;tement transparent&lt;/li&gt;&lt;li&gt; le texte du contenu est donc en blanc, l'ent&#234;te et le pied de page reprenant les couleurs de fond et de texte de la barre d'outils de Gnome 3.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span class='spip_document_234 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH270/verne-f5836.jpg?1771618584' width='500' height='270' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;L'ic&#244;ne du bloc d&#233;pliant &#034;zone_tags&#034; contenant la liste des tags li&#233;s &#224; l'article est celle &#034;par d&#233;faut&#034; indiqu&#233;e dans le css commun, et situ&#233;e &#224; la racine des th&#232;mes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;le bloc &#034;logo&#034; &#233;tant d&#233;fini dans mon squelette Zpip, il ne l'est pas dans les th&#232;mes, pour des raisons d'unicit&#233; de l'identifiant du div.&lt;/strong&gt;&lt;/p&gt;
&lt;dl class='spip_document_240 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/7z/theme_fedora16.7z' title='7 Zip - 170.8 kio' type=&#034;application/x-7z-compressed&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/7z-91dc2.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Th&#232;me ZenGarden Fedora 16 (Verne)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;dl class='spip_document_236 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L50xH28/tagcloud-349f0.png?1771618584' width='50' height='28' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Ic&#244;ne mots-cl&#233;s&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_237 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/css/commun.css' title='Cascading Style Sheet - 15 kio' type=&#034;text/css&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Feuille de style commune (site vader-fr)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Th&#232;me ZenGarden Pingouins de Madagascar</title>
		<link>https://vader-fr.fr/spip.php?article132</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article132</guid>
		<dc:date>2013-11-20T09:35:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Th&#232;mes</dc:subject>

		<description>
&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi ici). En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : bckg, filtre et page Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (par commun.css) de mani&#232;re absolute &#224; une distance des bords &#233;gale &#224; 0 , mais : bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan. filtre a pour index Z = -1, il sert de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique38" rel="directory"&gt;Th&#232;mes ZenGarden&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot11" rel="tag"&gt;Th&#232;mes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://vader-fr.fr/local/cache-vignettes/L150xH132/arton132-6da0a.jpg?1771618584' class='spip_logo spip_logo_right' width='150' height='132' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce th&#232;me utilise un syst&#232;me de page &#224; 3 couches (voir aussi &lt;a href='https://vader-fr.fr/spip.php?article108' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt;).&lt;br class='autobr' /&gt;
En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt;&lt;br class='autobr' /&gt;
Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;par commun.css&lt;/strong&gt;) de mani&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;absolute&lt;/code&gt; &#224; une distance des bords &#233;gale &#224; 0 , mais :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; filtre a pour index Z = -1, il sert de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond et une opacit&#233; variable qui vont &#034;att&#233;nuer&#034; les contrastes de couleur de l'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; page a pour index Z = 0 (valeur par d&#233;faut), son fond est transparent, ses &#233;l&#233;ments opaques car n'&#233;tant pas affect&#233;s par l'opacit&#233; variable du bloc filtre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce th&#232;me est un th&#232;me Zengarden, &lt;strong class=&#034;caractencadre-spip spip&#034;&gt;mais il est &#034;l&#233;ger&#034; et se base sur une feuille de style commune&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt; est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes &lt;/code&gt;du site&lt;/li&gt;&lt;li&gt; ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; la feuille de style du th&#232;me se contente de modifier les couleurs, les images, &#233;ventuellement la police, la taille et la &#034;d&#233;coration&#034; des textes
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le th&#232;me n'a donc pas besoin de d&#233;clarer toutes les propri&#233;t&#233;s, ce qui rend sa conception et sa maintenance plus simples.&lt;/li&gt;&lt;li&gt; si besoin est, le th&#232;me peut remplacer les propri&#233;t&#233;s d&#233;finies dans la feuille commune.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Ce syst&#232;me permet une plus grande compatibilit&#233; des th&#232;mes avec diff&#233;rents sites et donc diff&#233;rents squelettes Zpip.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Graphiquement, ce th&#232;me se pr&#233;sente sous la forme d'un arri&#232;re plan avec le commando sur fond blanc, texte noir et orange.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une image avec le commando sur fond blanc sert d'arri&#232;re plan au site, dans le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;. Cette image est centr&#233;e dans le bloc et compl&#233;t&#233;e par une couleur d'arri&#232;re plan de la m&#234;me couleur que le fond de l'image.&lt;/li&gt;&lt;li&gt; le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; a une couleur d'arri&#232;re plan, en l'occurrence blanc, avec une opacit&#233; &#233;lev&#233;e.&lt;/li&gt;&lt;li&gt; le texte du contenu est donc en noir et orange/marron, ou plus pr&#233;cis&#233;ment de la couleur du bec pour l'ent&#234;te, de la couleur des pattes pour le pied de page et de la couleur du dos pour le texte.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;span class='spip_document_233 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH270/commando-9a9e1.jpg?1771618584' width='500' height='270' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;L'ic&#244;ne du bloc d&#233;pliant &#034;zone_tags&#034; contenant la liste des tags li&#233;s &#224; l'article est celle &#034;par d&#233;faut&#034; indiqu&#233;e dans le css commun, et situ&#233;e &#224; la racine des th&#232;mes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;le bloc &#034;logo&#034; &#233;tant d&#233;fini dans mon squelette Zpip, il ne l'est pas dans les th&#232;mes, pour des raisons d'unicit&#233; de l'identifiant du div.&lt;/strong&gt;&lt;/p&gt;
&lt;dl class='spip_document_239 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/7z/theme_commando.7z' title='7 Zip - 77.5 kio' type=&#034;application/x-7z-compressed&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/7z-91dc2.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Th&#232;me ZenGarden Pingouins de Madagascar&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_236 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L50xH28/tagcloud-349f0.png?1771618584' width='50' height='28' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Ic&#244;ne mots-cl&#233;s&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_237 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/css/commun.css' title='Cascading Style Sheet - 15 kio' type=&#034;text/css&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Feuille de style commune (site vader-fr)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Th&#232;mes ZenGarden No&#235;l</title>
		<link>https://vader-fr.fr/spip.php?article131</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article131</guid>
		<dc:date>2013-11-20T09:22:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Th&#232;mes</dc:subject>

		<description>
&lt;p&gt;G&#233;n&#233;ralit&#233;s &lt;br class='autobr' /&gt;
Deux th&#232;mes sur No&#235;l, avec pour chacun une variante. &lt;br class='autobr' /&gt;
Ces th&#232;mes sont des th&#232;mes Zengarden, mais ils sont &#034;l&#233;gers&#034; et se basent sur une feuille de style commune. &lt;br class='autobr' /&gt;
Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple : une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes. commun.css est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire themes du site ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique38" rel="directory"&gt;Th&#232;mes ZenGarden&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot11" rel="tag"&gt;Th&#232;mes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://vader-fr.fr/local/cache-vignettes/L150xH82/arton131-bc8ab.png?1771618584' class='spip_logo spip_logo_right' width='150' height='82' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;G&#233;n&#233;ralit&#233;s&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Deux th&#232;mes sur No&#235;l, avec pour chacun une variante.&lt;/p&gt;
&lt;p&gt;Ces th&#232;mes sont des th&#232;mes Zengarden, &lt;strong class=&#034;caractencadre-spip spip&#034;&gt;mais ils sont &#034;l&#233;gers&#034; et se basent sur une feuille de style commune&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt; est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes &lt;/code&gt;du site&lt;/li&gt;&lt;li&gt; ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; la feuille de style du th&#232;me se contente de modifier les couleurs, les images, &#233;ventuellement la police, la taille et la &#034;d&#233;coration&#034; des textes
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le th&#232;me n'a donc pas besoin de d&#233;clarer toutes les propri&#233;t&#233;s, ce qui rend sa conception et sa maintenance plus simples.&lt;/li&gt;&lt;li&gt; si besoin est, le th&#232;me peut remplacer les propri&#233;t&#233;s d&#233;finies dans la feuille commune.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Ce syst&#232;me permet une plus grande compatibilit&#233; des th&#232;mes avec diff&#233;rents sites et donc diff&#233;rents squelettes Zpip.&lt;/strong&gt;&lt;br class='autobr' /&gt;
Par exemple, les th&#232;mes No&#235;l sont valables pour le squelette Zpip-vad tout autant que le squelette Zpip-hpe, ce dernier ayant pourtant des blocs qui n'existent pas dans le pr&#233;c&#233;dent.&lt;/p&gt;
&lt;p&gt;Ces th&#232;mes utilisent un syst&#232;me de page &#224; 3 couches (voir aussi &lt;a href='https://vader-fr.fr/spip.php?article108' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt;).&lt;br class='autobr' /&gt;
En effet, 3 blocs de position et taille identiques sont d&#233;clar&#233;s : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;page&lt;/code&gt;&lt;br class='autobr' /&gt;
Ces 3 blocs s'&#233;tendent sur toute la page puisqu'ils sont positionn&#233;s (&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;par commun.css&lt;/strong&gt;) de mani&#232;re &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;absolute&lt;/code&gt; &#224; une distance des bords &#233;gale &#224; 0 , mais :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; bckg a pour index Z = -2, il sera donc situ&#233; tout &#224; l'arri&#232;re. Il sera utilis&#233; pour mettre une image d'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; filtre a pour index Z = -1, il sert de &#034;filtre&#034; gr&#226;ce &#224; une couleur de fond et une opacit&#233; variable qui vont &#034;att&#233;nuer&#034; les contrastes de couleur de l'arri&#232;re plan.&lt;/li&gt;&lt;li&gt; page a pour index Z = 0 (valeur par d&#233;faut), son fond est transparent, ses &#233;l&#233;ments opaques car n'&#233;tant pas affect&#233;s par l'opacit&#233; variable du bloc filtre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces th&#232;mes red&#233;finissent les couleurs de mise en &#233;vidence &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.caractencadre-spip&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.caractencadre2-spip&lt;/code&gt; du plugin enluminures typographiques, car elles sont trop claires, cependant le css du plugin peut &#234;tre charg&#233; apr&#232;s celui du th&#232;me. Il faudra donc &#233;diter le plugin afin d'enlever les couleurs, et d&#233;clarer les couleurs &#034;par d&#233;faut&#034; dans le css commun.&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;le bloc &#034;logo&#034; &#233;tant d&#233;fini dans mon squelette Zpip, il ne l'est pas dans les th&#232;mes, pour des raisons d'unicit&#233; de l'identifiant du div.&lt;/strong&gt;&lt;/p&gt;
&lt;dl class='spip_document_238 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/7z/themes_noel.7z' title='7 Zip - 835.7 kio' type=&#034;application/x-7z-compressed&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/7z-91dc2.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Pack th&#232;mes ZenGarden No&#235;l&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_237 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/css/commun.css' title='Cascading Style Sheet - 15 kio' type=&#034;text/css&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1783518903' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Feuille de style commune (site vader-fr)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Th&#232;me No&#235;l 1&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une image rouge et blanche avec un sapin sur des collines, quelques (gros) flocons de neiges et de la d&#233;coration sert d'arri&#232;re plan au site, dans le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;. Cette image est &#233;tendue aux dimensions du bloc (et donc de la page), ce qui peut &#233;ventuellement la d&#233;former.&lt;/li&gt;&lt;li&gt; une image anim&#233;e GIF, r&#233;p&#233;t&#233;e, permet de faire tomber de la neige devant cet arri&#232;re plan. L'image anim&#233;e a un fond transparent, et le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; peut donc avoir une couleur d'arri&#232;re plan, en l'occurrence rouge sombre avec une opacit&#233; &#233;lev&#233;e.&lt;/li&gt;&lt;li&gt; le texte du contenu est donc en blanc et or, le bloc &#034;extra&#034; des articles (articles de la m&#234;me rubrique, mots-cl&#233;s) &#233;tant rouge sur un fond couleur neige (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;snow&lt;/code&gt;), et les ic&#244;nes habituelles sont remplac&#233;es par des ic&#244;nes de No&#235;l.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une variante permet de ne pas avoir l'animation de la neige.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_230 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH269/noel1-b1c07.jpg?1771618584' width='500' height='269' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Th&#232;me No&#235;l 2&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Une image rouge et blanche avec un calendrier et de la d&#233;coration sert d'arri&#232;re plan au site, dans le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bckg&lt;/code&gt;. Cette image est &#233;tendue aux dimensions du bloc (et donc de la page), ce qui peut &#233;ventuellement la d&#233;former.&lt;/li&gt;&lt;li&gt; une image anim&#233;e GIF, r&#233;p&#233;t&#233;e, permet de faire tomber de la neige devant cet arri&#232;re plan. L'image anim&#233;e a un fond transparent, et le bloc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;filtre&lt;/code&gt; peut donc avoir une couleur d'arri&#232;re plan, en l'occurrence rouge sombre avec une opacit&#233; &#233;lev&#233;e.&lt;/li&gt;&lt;li&gt; le texte du contenu est donc en blanc et or, le bloc &#034;extra&#034; des articles (articles de la m&#234;me rubrique, mots-cl&#233;s) &#233;tant rouge sur un fond couleur neige (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;snow&lt;/code&gt;), et les ic&#244;nes habituelles sont remplac&#233;es par des ic&#244;nes de No&#235;l.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une variante permet de ne pas avoir l'animation de la neige.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_231 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH269/noel2-456aa.jpg?1771618584' width='500' height='269' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Th&#232;me ZenGarden ciel bleu</title>
		<link>https://vader-fr.fr/spip.php?article106</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article106</guid>
		<dc:date>2013-11-20T09:12:47Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Th&#232;mes</dc:subject>

		<description>
&lt;p&gt;Basiquement, ce th&#232;me est une modification du th&#232;me que j'avais fait pour ce site. &lt;br class='autobr' /&gt;
Exceptionnellement, ce th&#232;me n'utilise pas de syst&#232;me de page &#224; 3 couches. C'est un th&#232;me &#034;simple&#034;. En effet, l'image d'arri&#232;re plan, en blanc et bleu clair, contraste suffisamment avec les couleurs sombres (noir, violet, marron) du contenu et il n'est donc pas n&#233;cessaire d'att&#233;nuer l'arri&#232;re plan par un bloc filtre. &lt;br class='autobr' /&gt;
Graphiquement, ce th&#232;me se pr&#233;sente sous la forme d'un arri&#232;re plan ciel bleu avec (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique38" rel="directory"&gt;Th&#232;mes ZenGarden&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://vader-fr.fr/spip.php?mot11" rel="tag"&gt;Th&#232;mes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://vader-fr.fr/local/cache-vignettes/L150xH81/arton106-cd292.jpg?1771618584' class='spip_logo spip_logo_right' width='150' height='81' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Basiquement, ce th&#232;me est une modification du th&#232;me que j'avais fait pour &lt;a href=&#034;http://essencedivine.fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ce site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Exceptionnellement, ce th&#232;me n'utilise pas de syst&#232;me de page &#224; 3 couches. C'est un th&#232;me &#034;simple&#034;.&lt;br class='autobr' /&gt;
En effet, l'image d'arri&#232;re plan, en blanc et bleu clair, contraste suffisamment avec les couleurs sombres (noir, violet, marron) du contenu et il n'est donc pas n&#233;cessaire d'att&#233;nuer l'arri&#232;re plan par un bloc filtre.&lt;/p&gt;
&lt;p&gt;Graphiquement, ce th&#232;me se pr&#233;sente sous la forme d'un arri&#232;re plan ciel bleu avec quelques nuages, texte noir, liens et titres rouge bordeaux...sans oublier un ti zoziau &#224; la place de la fl&#232;che pour d&#233;plier le cadre &#034;dans la m&#234;me rubrique&#034;.&lt;/p&gt;
&lt;p&gt;Ce th&#232;me est un th&#232;me Zengarden, &lt;strong class=&#034;caractencadre-spip spip&#034;&gt;mais il est &#034;l&#233;ger&#034; et se base sur une feuille de style commune&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Le principe de &#034;mes&#034; th&#232;mes est en fait tr&#232;s simple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une feuille de style commune g&#232;re le positionnement et la taille des &#233;l&#233;ments, qui sont globalement communs &#224; tous les th&#232;mes.
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt; est &#224; la racine des th&#232;mes, donc dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes &lt;/code&gt;du site&lt;/li&gt;&lt;li&gt; ce fichier est inclut par celui du th&#232;me gr&#226;ce &#224; l'instruction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;@import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; la feuille de style du th&#232;me se contente de modifier les couleurs, les images, &#233;ventuellement la police, la taille et la &#034;d&#233;coration&#034; des textes
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le th&#232;me n'a donc pas besoin de d&#233;clarer toutes les propri&#233;t&#233;s, ce qui rend sa conception et sa maintenance plus simples.&lt;/li&gt;&lt;li&gt; si besoin est, le th&#232;me peut remplacer les propri&#233;t&#233;s d&#233;finies dans la feuille commune.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Ce syst&#232;me permet une plus grande compatibilit&#233; des th&#232;mes avec diff&#233;rents sites et donc diff&#233;rents squelettes Zpip.&lt;/strong&gt;&lt;br class='autobr' /&gt;
Par exemple, le th&#232;me ciel est valable pour le squelette Zpip-vad tout autant que le squelette Zpip-hpe, ce dernier ayant pourtant des blocs qui n'existent pas dans le pr&#233;c&#233;dent.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_229 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH270/ciel-a34a0.jpg?1771618584' width='500' height='270' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;L'ic&#244;ne du bloc d&#233;pliant &#034;zone_tags&#034; contenant la liste des tags li&#233;s &#224; l'article est celle &#034;par d&#233;faut&#034; indiqu&#233;e dans le css commun, et situ&#233;e &#224; la racine des th&#232;mes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;le bloc &#034;logo&#034; &#233;tant d&#233;fini dans mon squelette Zpip, il ne l'est pas dans les th&#232;mes, pour des raisons d'unicit&#233; de l'identifiant du div.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le th&#232;me red&#233;finit les couleurs de mise en &#233;vidence &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.caractencadre-spip&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.caractencadre2-spip&lt;/code&gt; du plugin enluminures typographiques, car elles sont trop claires, cependant le css du plugin peut &#234;tre charg&#233; apr&#232;s celui du th&#232;me. Il faudra donc &#233;diter le plugin afin d'enlever les couleurs, et d&#233;clarer les couleurs &#034;par d&#233;faut&#034; dans le css commun.&lt;/p&gt;
&lt;dl class='spip_document_235 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/7z/theme_ciel.7z' title='7 Zip - 732.3 kio' type=&#034;application/x-7z-compressed&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/7z-91dc2.svg?1779541449' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Th&#232;me ZenGarden ciel bleu&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_236 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L50xH28/tagcloud-349f0.png?1771618584' width='50' height='28' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Ic&#244;ne mots-cl&#233;s&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt; &lt;dl class='spip_document_237 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/css/commun.css' title='Cascading Style Sheet - 15 kio' type=&#034;text/css&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1779541674' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Feuille de style commune (site vader-fr)&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Tuto SPIP/Zpip - cr&#233;ation de th&#232;me</title>
		<link>https://vader-fr.fr/spip.php?article129</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article129</guid>
		<dc:date>2013-10-22T11:24:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


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

		<description>
&lt;p&gt;Les sites SPIP utilisant des squelettes de type Zpip peuvent utiliser des th&#232;mes Zengarden. Vous trouverez plus d'informations &#224; ce sujet ici et sur les forums de SPIP. &lt;br class='autobr' /&gt;
1) Pr&#233;requis un site SPIP avec plugin squelette Zpip et le plugin Zengarden Firefox et ses outils de d&#233;veloppement web &#233;ventuellement le module compl&#233;mentaire ColorZilla pour Firefox Notepad++ sous Windows, Gedit ou autre &#233;diteur de texte sous Linux &lt;br class='autobr' /&gt;
2) Cr&#233;ation du th&#232;me &lt;br class='autobr' /&gt;
Le plus simple pour cr&#233;er un th&#232;me est d'utiliser (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique11" rel="directory"&gt;SPIP&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Les sites SPIP utilisant des squelettes de type Zpip peuvent utiliser des th&#232;mes Zengarden.&lt;br class='autobr' /&gt;
Vous trouverez plus d'informations &#224; ce sujet &lt;a href='https://vader-fr.fr/spip.php?article75' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt; et sur les forums de SPIP.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;1) Pr&#233;requis&lt;/h3&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un site SPIP avec plugin squelette Zpip et le plugin Zengarden&lt;/li&gt;&lt;li&gt; Firefox et ses outils de d&#233;veloppement web&lt;/li&gt;&lt;li&gt; &#233;ventuellement le module compl&#233;mentaire ColorZilla pour Firefox&lt;/li&gt;&lt;li&gt; Notepad++ sous Windows, Gedit ou autre &#233;diteur de texte sous Linux&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&#034;spip&#034;&gt;2) Cr&#233;ation du th&#232;me&lt;/h3&gt;
&lt;p&gt;Le plus simple pour cr&#233;er un th&#232;me est d'utiliser un th&#232;me existant, contenant d&#233;j&#224; le &#034;squelette&#034;, surtout en cas de squelette Zpip personnalis&#233;.&lt;br class='autobr' /&gt;
Les diff&#233;rents blocs et classes existant sur les pages du site (ent&#234;te, pied de page, navigation, contenu, zone droite...) &#233;tant d&#233;j&#224; d&#233;clar&#233;s et ne devant &#224; priori pas changer, cela facilitera les choses.&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Pour cr&#233;er un th&#232;me de A &#224; Z, c'est la m&#234;me chose : cr&#233;er un dossier pour le th&#232;me, identifier avec l'inspecteur (outils de d&#233;veloppement web) les &#233;l&#233;ments de la page, leur appliquer un style.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Il faudra alors renommer le dossier du (nouveau) th&#232;me et &#233;diter le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin.xml&lt;/code&gt; comme expliqu&#233; dans &lt;a href='https://vader-fr.fr/spip.php?article75' class=&#034;spip_in&#034;&gt;cet article&lt;/a&gt; afin de d&#233;clarer le nouveau th&#232;me.&lt;/p&gt;
&lt;p&gt;Quand &#224; la vignette illustrant le th&#232;me (champ &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;icon&gt; &lt;/icon&gt;&lt;/code&gt; du fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;plugin.xml&lt;/code&gt;), elle doit avoir 250px de large.&lt;/p&gt;
&lt;p&gt;Il est possible et recommand&#233; (pour simplifier la gestion des th&#232;mes) d'avoir &#224; la racine des th&#232;mes (donc dans le dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;themes&lt;/code&gt; &#224; la racine du site) un fichier de style commun, pour la position et la taille des blocs ainsi que le texte.&lt;br class='autobr' /&gt;
Le fichier en question sera ensuite import&#233; par le fichier css du th&#232;me.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;/* import de la feuille commune des positions de blocs et tailles de texte */ @import url(&#034;../commun.css&#034;);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;3) &#201;dition du style&lt;/h3&gt;
&lt;p&gt;Une fois le th&#232;me d&#233;clar&#233;, le style peut &#234;tre cr&#233;&#233; en exp&#233;rimentant avec les &lt;a href='https://vader-fr.fr/spip.php?article32' class=&#034;spip_in&#034;&gt;outils de d&#233;veloppement web de Firefox&lt;/a&gt;.&lt;br class='autobr' /&gt;
Cela permet de naviguer dans la page et de voir dans le cadre de droite le style associ&#233; aux &#233;l&#233;ments situ&#233;s dans l'arborescence du cadre de gauche.&lt;br class='autobr' /&gt;
Il est alors possible d'&#233;diter en temps r&#233;el les propri&#233;t&#233;s de style.&lt;/p&gt;
&lt;p&gt;Cela permet aussi de voir l'ensemble des propri&#233;t&#233;s valables pour l'&#233;l&#233;ment (onglets Calcul&#233; et DOM), la taille et l'espacement des &#233;l&#233;ments (onglet Apparence), ainsi que le style associ&#233; aux &#233;v&#232;nements par l'onglet Style, menu d&#233;roulant, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:hover&lt;/code&gt; pour le style lorsque la souris passe au dessus, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:active&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;:focus&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il faudra ensuite &#233;diter le fichier CSS (voir &lt;a href='https://vader-fr.fr/spip.php?article37' class=&#034;spip_in&#034;&gt;ici&lt;/a&gt; et &lt;a href='https://vader-fr.fr/spip.php?article38' class=&#034;spip_in&#034;&gt;l&#224;&lt;/a&gt;) &#224; la ligne indiqu&#233;e par l'inspecteur pour y mettre les propri&#233;t&#233;s css.&lt;/p&gt;
&lt;dl class='spip_document_228 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH272/themefirebug-001f7.jpg?1771624585' width='500' height='272' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Edition du th&#232;me par Firebug&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;
&lt;p&gt;Par exemple, dans l'illustration ci-dessus, l'inspecteur (outils de d&#233;veloppement web de Firefox) permet de voir que le style associ&#233; aux blocs d&#233;pliants situ&#233;s &#224; droite des articles est d&#233;clar&#233; dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;habillage.css&lt;/code&gt; (du th&#232;me), ligne 45, et que les propri&#233;t&#233;s de style &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;background-image&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;opacity&lt;/code&gt; surchargent en compl&#233;tant les propri&#233;t&#233;s de positionnement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;bottom&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;top&lt;/code&gt; d&#233;clar&#233;es dans le fichier commun &#224; tous les th&#232;mes &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;commun.css&lt;/code&gt;, ligne 321.&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;La compression du CSS par SPIP rend ce genre de &#034;d&#233;bogage&#034; impossible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La propri&#233;t&#233; d'image d'arri&#232;re plan a &#233;t&#233; d&#233;sactiv&#233;e dans l'inspecteur, et une propri&#233;t&#233; de couleur a &#233;t&#233; ajout&#233;e. En tapant &#034;darkg&#034; l'outil propose de compl&#233;ter pour avoir &#034;darkgray&#034;.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Tuto Spip - Cr&#233;ation galerie d'images</title>
		<link>https://vader-fr.fr/spip.php?article128</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article128</guid>
		<dc:date>2013-09-22T12:39:38Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


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

		<description>
&lt;p&gt;Il peut &#234;tre int&#233;ressant, pour illustrer un site et attirer plus de visiteurs, de cr&#233;er une ou plusieurs galeries d'images. &lt;br class='autobr' /&gt;
SPIP est capable de proposer des &#034;galeries d'image&#034; au format d'un portfolio li&#233; &#224; un article. &lt;br class='autobr' /&gt;
Mais en cas d'un grand nombre d'images, il sera pr&#233;f&#233;rable de diviser la galerie en onglets. &lt;br class='autobr' /&gt;
Malheureusement cela peut s'av&#233;rer fastidieux si on ne sait pas comment s'y prendre. &lt;br class='autobr' /&gt;
1) G&#233;n&#233;ration des vignettes par SPIP &lt;br class='autobr' /&gt;
1) G&#233;n&#233;ration des vignettes par SPIP &lt;br class='autobr' /&gt;
Tout d'abord, (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique11" rel="directory"&gt;SPIP&lt;/a&gt;

/ 
&lt;a href="https://vader-fr.fr/spip.php?mot10" rel="tag"&gt;SPIP&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Il peut &#234;tre int&#233;ressant, pour illustrer un site et attirer plus de visiteurs, de cr&#233;er une ou plusieurs galeries d'images.&lt;/p&gt;
&lt;p&gt;SPIP est capable de proposer des &#034;galeries d'image&#034; au format d'un portfolio li&#233; &#224; un article.&lt;/p&gt;
&lt;p&gt;Mais en cas d'un grand nombre d'images, il sera pr&#233;f&#233;rable de diviser la galerie en onglets.&lt;/p&gt;
&lt;p&gt;Malheureusement cela peut s'av&#233;rer fastidieux si on ne sait pas comment s'y prendre.&lt;/p&gt;
&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;1) G&#233;n&#233;ration des vignettes par SPIP&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;1) G&#233;n&#233;ration des vignettes par SPIP&lt;/h3&gt;
&lt;p&gt;Tout d'abord, afin d'all&#233;ger - aussi bien techniquement que visuellement - la page charg&#233;e par l'utilisateur, on mettra dans l'article non pas les images grande taille, mais des vignettes.&lt;br class='autobr' /&gt;
Ces vignettes seront automatiquement g&#233;n&#233;r&#233;es par SPIP. Il suffit pour cela d'aller dans le menu &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Configuration&gt; Fonctions avanc&#233;es&lt;/code&gt; du site, dans l'espace priv&#233;.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_223 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH203/spip_vignettes-f5562.jpg?1771624585' width='500' height='203' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cliquer sur la vignette de meilleure qualit&#233; dans la page de configuration permet de choisir la m&#233;thode de fabrication des vignettes.&lt;/p&gt;
&lt;p&gt;Ensuite, il faudra indiquer la taille maximale des vignettes g&#233;n&#233;r&#233;es, et bien s&#251;r s&#233;lectionner le bouton radio &#034;G&#233;n&#233;rer automatiquement les miniatures des images&#034;.&lt;/p&gt;
&lt;p&gt;Un bouton situ&#233; en bas &#224; droite du cadre, non visible sur la capture d'&#233;cran, permet d'enregistrer les modifications.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;2) Envoi des images sur le serveur&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;2) Envoi des images sur le serveur&lt;/h3&gt;
&lt;p&gt;Envoyer un grand nombre d'images en m&#234;me temps sur le serveur en passant par le formulaire SPIP peut &#234;tre tr&#232;s long, et m&#234;me &#233;chouer si l'on envoie trop d'images de trop grande taille.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Afin de ne pas se perdre dans les images il est pr&#233;f&#233;rable :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; de les envoyer par paquets de 50 maximum.&lt;/li&gt;&lt;li&gt; de nommer les images avec un num&#233;ro croissant pour pouvoir plus facilement les identifier dans une s&#233;rie plus tard. Des noms comme &#034;Capture01, Capture02&#034;.... ne sont pas des plus pratiques.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Et pour aller (beaucoup) plus vite :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; il faut envoyer les images par FTP dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/upload&lt;/code&gt; du site, en utilisant un client FTP comme FileZilla&lt;/li&gt;&lt;li&gt; puis dans l'interface web de SPIP, choisir de t&#233;l&#233;verser les images depuis &#034;le serveur&#034;.&lt;br class='autobr' /&gt;
&lt;span class='spip_document_224 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L202xH286/spip_charger_serveur-a90fb.jpg?1771624585' width='202' height='286' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;S'il y a des images dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/upload&lt;/code&gt;, SPIP proposera une liste d&#233;roulante des fichiers, avec en plus une option pour tout charger.&lt;/p&gt;
&lt;p&gt;Une fois les images charg&#233;es, il ne reste plus qu'a les int&#233;grer &#224; l'article dans l'ordre, les organiser et les commenter.&lt;/p&gt;
&lt;p&gt;Pour int&#233;grer les images plus rapidement, voici une petite page html avec un script JavaScript permettant de g&#233;n&#233;rer tous les liens de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;docXXX|left&gt;&lt;/code&gt;, qu'il suffira de copier-coller ensuite.&lt;/p&gt;
&lt;dl class='spip_document_452 spip_documents spip_documents_center'&gt;
&lt;dt&gt;&lt;a href='https://vader-fr.fr/IMG/html/generateur_liendoc_spip.html' title='HTML - 2.8 kio' type=&#034;text/html&#034;&gt;&lt;img src='https://vader-fr.fr/local/cache-vignettes/L64xH64/html-25d7d.svg?1783518904' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;G&#233;n&#233;rateur de liens de documents pour SPIP&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;3) Organisation des images dans l'article&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;3) Organisation des images dans l'article&lt;/h3&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Afin d'all&#233;ger visuellement la page, il est recommand&#233; d'utiliser la fonctionnalit&#233; d'onglets du&lt;/strong&gt; &lt;a href='https://vader-fr.fr/spip.php?article113' class=&#034;spip_in&#034;&gt;plugin Couteau suisse&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La fonction recherche (CTRL+F) du navigateur permettra d'aller image par image dans le bon ordre, avant de cliquer sur le lien &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;imgXXX|alignement&gt;&lt;/code&gt; propos&#233; par SPIP.&lt;br class='autobr' /&gt;
Il faudra choisir l'alignement &#034;left&#034;.&lt;br class='autobr' /&gt;
La zone de recherche restant active dans la page, il suffit de changer un num&#233;ro et de cliquer sur &#034;suivant&#034; pour aller &#224; l'image suivante dans la s&#233;rie.&lt;br class='autobr' /&gt;
&lt;span class='spip_document_225 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH16/ffrecherche-fd229.jpg?1771624585' width='500' height='16' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les images n'ayant pas de titre, le seul lien propos&#233; pour le moment est &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;img&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Or, les images ajout&#233;es devront appara&#238;tre sous forme de vignette et non en grande taille, c'est pourquoi le code &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;imgXXX|left&gt;&lt;/code&gt; devra &#234;tre transform&#233; en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;docXXX|left&gt;&lt;/code&gt;.&lt;br class='autobr' /&gt;
Cela peut ais&#233;ment se faire en copiant tout le texte de l'article (CTRL+A dans la zone de saisie puis CTRL+C) et en le collant (CTRL+V) dans un &#233;diteur de texte comme Notepad++ (Windows) ou Gedit (Linux).&lt;br class='autobr' /&gt;
Ensuite, la fonction rechercher et remplacer (habituellement CTRL+H, ou situ&#233;e dans le menu &#233;dition) de l'&#233;diteur de texte permettra de remplacer tous les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;img&lt;/code&gt; par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;doc&lt;/code&gt;.&lt;br class='autobr' /&gt;
Copier-Coller &#224; nouveau, cette fois depuis l'&#233;diteur de texte vers l'article, et le tour est jou&#233;.&lt;/p&gt;
&lt;p&gt;A ce moment, il est possible d'enregistrer l'article, en gardant &#233;ventuellement une copie de son texte dans l'&#233;diteur pr&#233;c&#233;demment utilis&#233;, au cas o&#249; l'enregistrement &#233;chouerait.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;img&lt;/code&gt; affiche l'image en grand, sans titre ni descriptif&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;emb&lt;/code&gt; affiche l'image en grand, avec titre&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;doc&lt;/code&gt; affiche la vignette&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;4) Titrer les vignettes&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;4) Titrer les vignettes&lt;/h3&gt;
&lt;p&gt;Afin de mieux r&#233;f&#233;rencer les images et pour les d&#233;crire bri&#232;vement &#224; un visiteur n&#233;ophye, il est ensuite recommand&#233; de les titrer.&lt;br class='autobr' /&gt;
Cela &#233;tant long et fastidieux dans la fen&#234;tre d'&#233;dition de l'article, il sera plus simple d'aller dans le menu &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Edition &gt; Documents&lt;/code&gt; de SPIP.&lt;/p&gt;
&lt;p&gt;Une bo&#238;te de recherche sp&#233;cifique &#224; la m&#233;diath&#232;que (&#224; ne pas confondre avec la bo&#238;te de recherche g&#233;n&#233;rale du site, situ&#233;e dans l'ent&#234;te) permettra de n'afficher que les images de la s&#233;rie.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_226 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH241/edition_recherche-25dc0.jpg?1771624585' width='500' height='241' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Par d&#233;faut et ce que je conseille, l'affichage se fait&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; par identifiant d&#233;croissant, et donc en mettant les images les plus r&#233;centes (et pas encore titr&#233;es) d'abord.&lt;/li&gt;&lt;li&gt; en paginant les images par 10&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il suffit alors de cliquer &lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;avec la molette de la souris&lt;/strong&gt; (= ouvrir dans un nouvel onglet) sur les 10 liens &#034;Modifier&#034; des images non titr&#233;es, puis dans chaque onglet, de mettre un titre, valider, passer &#224; l'onglet suivant pendant que l'onglet courant recharge et faire de m&#234;me.&lt;br class='autobr' /&gt;
Une fois qu'un onglet a recharg&#233;, il est possible de le fermer en cliquant sur sa petite croix.&lt;br class='autobr' /&gt;
Lorsque les 10 premi&#232;res images sont titr&#233;es, on clique sur le lien de pagination pour aller aux 10 suivantes, et ainsi de suite.&lt;/p&gt;
&lt;p&gt;Une fois les images envoy&#233;es au serveur, tri&#233;es et organis&#233;es dans l'article, et titr&#233;es, il ne reste plus qu'&#224; publier l'article.&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_227 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH206/edition_document-92e1a.jpg?1771624585' width='500' height='206' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
