<?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=3&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>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>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>AJAX - Affichage en temps r&#233;el de temp&#233;rature relev&#233;e par une sonde.</title>
		<link>https://vader-fr.fr/spip.php?article116</link>
		<guid isPermaLink="true">https://vader-fr.fr/spip.php?article116</guid>
		<dc:date>2013-05-05T16:51:40Z</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>HTML</dc:subject>

		<description>
&lt;p&gt;A la demande de absolut_man sur jeuxvideopc.com, qui &#233;tait int&#233;ress&#233; par ma proposition d'aide pour r&#233;aliser un site web, &lt;br class='autobr' /&gt;
Description &lt;br class='autobr' /&gt;
Le projet de bac sp&#233; ISN consiste en un robot qui mesure la temp&#233;rature et qui la communique sur un site internet. Pas d'une grande utilit&#233; &#224; priori mais cela permet de balayer tout le programme de l'ann&#233;e. &lt;br class='autobr' /&gt;
Deux cartes arduinos sont utilis&#233;es pour la mesure m&#233;t&#233;orologique : une sur le robot une connect&#233;e &#224; l'ordinateur qui communiquera &#224; intervalle (&#8230;)&lt;/p&gt;


-
&lt;a href="https://vader-fr.fr/spip.php?rubrique3" rel="directory"&gt;D&#233;veloppement web&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?mot3" rel="tag"&gt;HTML&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;A la demande de absolut_man sur jeuxvideopc.com, qui &#233;tait int&#233;ress&#233; par ma &lt;a href=&#034;http://vader-fr.fr/spip.php?article9&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;proposition d'aide pour r&#233;aliser un site web&lt;/a&gt;,&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;Description&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Le projet de bac sp&#233; ISN consiste en un robot qui mesure la temp&#233;rature et qui la communique sur un site internet. Pas d'une grande utilit&#233; &#224; priori mais cela permet de balayer tout le programme de l'ann&#233;e.&lt;/p&gt;
&lt;p&gt;Deux cartes arduinos sont utilis&#233;es pour la mesure m&#233;t&#233;orologique :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une sur le robot&lt;/li&gt;&lt;li&gt; une connect&#233;e &#224; l'ordinateur qui communiquera &#224; intervalle r&#233;gulier les donn&#233;es transmise par l'autre carte&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le probl&#232;me &#233;tait : comment faire pour mettre &#224; jour automatiquement les donn&#233;es sur le site internet ?&lt;/p&gt;
&lt;p&gt;en fait c'est assez facile&lt;br class='autobr' /&gt;
il faut sur le serveur :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une base de donn&#233;es&lt;/li&gt;&lt;li&gt; un script php qui fait la mise &#224; jour, script appel&#233; par un programme sur le PC qui envoie les informations &#224; mettre en base (sonde, date, temp&#233;rature...).&lt;/li&gt;&lt;li&gt; une page html avec un script JavaScript mettant &#224; jour les donn&#233;es affich&#233;es gr&#226;ce &#224; l'AJAX.&lt;/li&gt;&lt;li&gt; un script php fournissant au script AJAX les donn&#233;es contenues en base.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;sur le pc, il suffit d'utiliser la librairie python permettant de faire des requ&#234;tes HTTP.&lt;/p&gt;
&lt;p&gt;voir &lt;a href=&#034;http://www.commentcamarche.net/forum/affich-481904-requete-http-en-python-debutant&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;l&#224;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;la requ&#234;te sera donc du type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://le_site/page_php.php?param&#232;tre1=valeur1&amp;param&#232;tre2=valeur2&lt;/code&gt;.&lt;br class='autobr' /&gt;
la page php permettra de mettre &#224; jour la base de donn&#233;es.&lt;br class='autobr' /&gt;
python ne cr&#233;&#233; pas de liste, il envoie les donn&#233;es 1 par 1 &#224; un script php, qui ins&#232;re les donn&#233;es dans une base.&lt;/p&gt;
&lt;p&gt;un script php affichera ensuite une donn&#233;e unique ou une liste, selon ce qui est pr&#233;vu. donn&#233;e unique mise &#224; jour par l'AJAX, liste &#233;ventuellement sous forme graphique pour pr&#233;senter l'&#233;volution.&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;Base de donn&#233;es&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;la base n'a besoin que d'une seule table : &lt;strong&gt;releves&lt;/strong&gt;, contenant 3 champs&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; num&#233;ro identifiant de la sonde - champ &lt;strong&gt;sonde&lt;/strong&gt; de type &lt;strong&gt;int&lt;/strong&gt;, entier.&lt;/li&gt;&lt;li&gt; date + heure du relev&#233; de temp&#233;rature - champ &lt;strong&gt;date&lt;/strong&gt; de type &lt;strong&gt;datetime&lt;/strong&gt;, contenant donc date et heure.&lt;/li&gt;&lt;li&gt; temp&#233;rature relev&#233;e - champ &lt;strong&gt;temperature&lt;/strong&gt; de type &lt;strong&gt;float&lt;/strong&gt;, un nombre &#034;flottant&#034; donc &#224; virgule, appartenant &#224; l'ensemble math&#233;matique des nombres r&#233;els &#8477;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;tous ces champs sont non nuls, non uniques.&lt;/p&gt;
&lt;p&gt;l'index &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;PRIMARY KEY&lt;/code&gt; (cl&#233; primaire, permettant d'identifier de mani&#232;re unique une ligne de la table) sera la combinaison du num&#233;ro de sonde et de la date/heure du relev&#233; de temp&#233;rature.&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;Script PHP mise &#224; jour BDD&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Ce script est extr&#234;mement simple : Il re&#231;oit en entr&#233;e plusieurs variables et les ins&#232;re dans la base.&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 if (isset($_GET[&#034;sonde&#034;])){ $sonde=$_GET[&#034;sonde&#034;]; }else{ $sonde=1; // par d&#233;faut } if (isset($_GET[&#034;temper&#034;])){ $temper=$_GET[&#034;temper&#034;]; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;le script PHP &#233;tant appel&#233; par un script python, l'envoi des donn&#233;es se fait dans l'url de la requ&#234;te html g&#233;n&#233;r&#233;e par le script python.&lt;/p&gt;
&lt;p&gt;la m&#233;thode est donc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;GET&lt;/code&gt;.&lt;br class='autobr' /&gt;
la r&#233;cup&#233;ration des variables se fait alors par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$_GET[&#034;variable&#034;]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;par s&#233;curit&#233; autant que par simplicit&#233;, on v&#233;rifie l'existence de la variable (dans la requ&#234;te) avant d'essayer de r&#233;cup&#233;rer sa valeur, avec la fonction &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;isset(variable)&lt;/code&gt;.&lt;br class='autobr' /&gt;
Et pour simplifier encore plus, on rend certaines variables optionnelles en pr&#233;voyant des valeurs par d&#233;faut.&lt;/p&gt;
&lt;p&gt;Ainsi, s'il n'y a qu'une seule sonde et/ou qu'on ne souhaite pas se compliquer en envoyant la date/heure sous un format complexe, le script php s'en charge.&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;quand&#034;])){ $quand=$_GET[&#034;quand&#034;]; }else{ $quand=date(&#034;Y-m-d H:i:s&#034;); // par d&#233;faut, date actuelle // format YYYY-MM-DD HH:MM:SS ===&gt; datetime en MYSQL }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;la date/heure, justement, doit &#234;tre au format &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;datetime&lt;/code&gt; de MySQL pour &#234;tre ins&#233;r&#233;e en base, &#224; savoir de type YYYY-MM-DD HH:MM:SS&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;	// connexion &#224; la base SQL et insertion des donn&#233;es include_once &#034;connect.php&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour se connecter &#224; la base, on fait appel &#224; un autre script, ce qui permet d'avoir plusieurs scripts PHP diff&#233;rents utilisant la m&#234;me m&#233;thode de connexion, rendant les changements et corrections plus faciles.&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;?php&lt;/code&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt; mysql_connect('&lt;/code&gt;&lt;i&gt;adresse serveur MySQL&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;','&lt;/code&gt;&lt;i&gt;utilisateur MySQL&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;','&lt;/code&gt;&lt;i&gt;mot de passe&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;','MYSQL');&lt;/code&gt;&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt; mysql_select_db(&#034;&lt;/code&gt;&lt;i&gt;nom de la base&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&#034;);&lt;/code&gt; &lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;?&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puis, si la temp&#233;rature est d&#233;finie et que la variable contient une valeur, on ins&#232;re les 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;	if (isset($temper)&amp;&amp;$temper!=null){ $reki=&#034;insert into releves (sonde,date,temperature) values ($sonde,'$quand',$temper)&#034;; $resi=mysql_query($reki); }
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;null&lt;/code&gt; est un mot cl&#233; signifiant &#034;rien&#034;. Pas z&#233;ro, pas cha&#238;ne vide, mais rien, pas de valeur. la variable existe mais n'est pas initialis&#233;e. C'est un peu comme s'il y avait un feu tricolore, mais &#233;teint. Il est l&#224;, il existe, mais il n'est pas vert, orange ou rouge et n'a donc pas de &#034;valeur&#034;.&lt;/p&gt;
&lt;p&gt;la requ&#234;te SQL est tr&#232;s simple, l'ordre &#233;tant &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;insert&lt;/code&gt; dans la table &lt;strong&gt;releves&lt;/strong&gt; dans les champs correspondants &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sonde, date, temperature&lt;/code&gt; des valeurs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$sonde, $quand, $temper&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par s&#233;curit&#233;, on aurait pu ajouter un syst&#232;me de cl&#233; ou autre moyen d'authentifier le &#034;client&#034; envoyant la requ&#234;te de mise &#224; jour, que ce soit au niveau du script php, au niveau du serveur web Apache (SSL), ou m&#234;me ou niveau du pare-feu iptables (cha&#238;ne &lt;i&gt;mangle&lt;/i&gt;) sous Linux.&lt;br class='autobr' /&gt;
Le probl&#232;me ne se posant pas sur ce projet et par souci de simplicit&#233;, cela n'a pas &#233;t&#233; envisag&#233;.&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;Page HTML&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;La page html est assez simple&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;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt;
&lt;html lang=&#034;fr&#034; dir=&#034;ltr&#034; xml:lang=&#034;fr&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On indique :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le type de document &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;xhtml1 transitionnal&lt;/code&gt;. Les types de documents normalis&#233;s &lt;a href=&#034;http://vader-fr.fr/spip.php?article68&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;W3C&lt;/a&gt; d&#233;finissent le contenu utilisable et permettent un traitement homog&#232;ne par les navigateurs respectant ces normes.&lt;/li&gt;&lt;li&gt; la langue&lt;/li&gt;&lt;li&gt; la direction d'affichage : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;dir = ltr&lt;/code&gt;, left-to-right, de gauche &#224; droite&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;head&gt; &lt;title&gt;Projet Celcius (ISN)&lt;/title&gt; &lt;meta http-equiv=&#034;content-Type&#034; content=&#034;text/html; charset=UTF-8&#034;/&gt; &lt;meta name=&#034;description&#034; content=&#034;Projet Celcius&#034;/&gt; &lt;link media=&#034;all&#034; type=&#034;text/css&#034; href=&#034;style.css&#034; rel=&#034;stylesheet&#034;/&gt; &lt;script type=&#034;text/javascript&#034; src=&#034;absolut.js&#034;&gt; &lt;/script&gt; &lt;/head&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;en ent&#234;te de page, on fournit d'autres informations comme le titre de la page, l'encodage des caract&#232;res, la description rapide du contenu.&lt;br class='autobr' /&gt;
Une feuille de style CSS et un fichier de script JavaScript sont &#233;galement appel&#233;s.&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;body onload=&#034;AuChargement();&#034;&gt; &lt;div id=&#034;head&#034;&gt; &lt;h1&gt;Projet Celcius - Mesure de la temp&#233;rature&lt;/h1&gt; &lt;/div&gt;&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;le 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;body { margin-top: 0px; margin:0; background-image:url(&#034;ciel2.jpg&#034;); background-repeat:repeat; font-family: Helvetica, sans-serif; font-size: 1em; color: black;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le corps de page n'a pas de marge, poss&#232;de une image d'arri&#232;re plan qui sera r&#233;p&#233;t&#233;e (et non &#233;tir&#233;e ou fix&#233;e), on utilise la police d'&#233;criture Helvetica, de taille 1em et la couleur du texte sera le noir.&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;body a, body a:visited { color: brown; cursor:pointer; text-decoration:underline;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;les liens seront en marron et soulign&#233;s, qu'ils aient &#233;t&#233; visit&#233;s ou non.&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;body a:hover { color: darkred;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Au survol de la souris (&#233;v&#232;nement &#034;hover&#034;), les liens passeront en rouge sombre.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;La page se divise en 2 blocs : ent&#234;te et 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&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;#head, #content h2, #content h3, #temperature { text-align:center;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans l'ent&#234;te, le texte est centr&#233;. &lt;br class='autobr' /&gt;
De m&#234;me que pour les titres (entre balises &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;h2&gt;&lt;/h2&gt;&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;h3&gt;&lt;/h3&gt;&lt;/code&gt;) dans le contenu et le contenu du bloc &#034;temp&#233;rature&#034;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;le bloc contenu contiendra un petit texte explicatif ainsi que le bloc &#034;temp&#233;rature&#034;, dont le contenu sera mis &#224; jour et d&#233;di&#233; &#224; l'affichage de la temp&#233;rature.&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 id=&#034;content&#034;&gt; &lt;h2&gt;&amp;curren; Bienvenue sur le site de notre Projet ISN &amp;curren;&lt;/h2&gt; &lt;p&gt;&lt;b&gt;Intitul&#233; du projet :&lt;/b&gt; R&#233;aliser un programme et mettre en oeuvre des &#233;quipements permettant &#224; un robot Mindstorm NXT de se d&#233;placer dans une pi&#232;ce en &#233;vitant les obstacles et de transmettre des
mesures de temp&#233;rature rafra&amp;icirc;chies automatiquement sur un site internet.&lt;/p&gt; &lt;h3&gt;Temp&#233;rature en temps r&#233;el :&lt;/h3&gt;&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;style CSS&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;
&lt;p&gt;Pour que le texte soit lisible et non coll&#233; aux bords de la page, une propri&#233;t&#233; de style inclut une marge &#224; l'int&#233;rieur du bloc entre les bords du bloc et le contenu.&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;#content { padding:5px;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&#034;padding&#034; repr&#233;sente un espace &#224; l'int&#233;rieur, entre le bord du contenant et son contenu. &#034;margin&#034; repr&#233;sente un espace &#224; l'ext&#233;rieur, entre le bord d'un &#233;l&#233;ment et les &#233;l&#233;ments qui l'entourent.&lt;br class='autobr' /&gt;
Des propri&#233;t&#233;s diff&#233;rentes peuvent &#234;tre d&#233;clar&#233;es pour les bords gauche, haut, droit et bas : padding-left, padding-top, padding-right, padding-bottom, margin-left, ...&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Le bloc &#034;temp&#233;rature&#034; contient par d&#233;faut une valeur quelconque, qui sera ensuite mise &#224; jour par le script JavaScript qui demandera &#224; un script PHP une valeur en base de donn&#233;es, avant d'ins&#233;rer ladite valeur 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; &lt;div id=&#034;temperature&#034;&gt;&lt;i&gt;en attente de mise &#224; jour&lt;/i&gt;&lt;/div&gt;&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;style CSS&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;#temperature{ font-size:1.5em; color:darkred;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Au cas o&#249; l'utilisateur aurait d&#233;sactiv&#233; JavaScript, un bloc sera par d&#233;faut affich&#233;. Si Javascript est activ&#233;, une fonction cachera ce bloc.&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 id=&#034;jsornotjs&#034;&gt; Vous avez d&#233;sactiv&#233; JavaScript. JavaScript est requis pour le rafra&amp;icirc;chissement des donn&amp;eacute;es de temp&amp;eacute;rature relev&amp;eacute;es par le robot sur le site. &lt;/div&gt;&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;style CSS&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;#jsornotjs{ color:darkred; font-weight:bold;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Puis on ferme le bloc contenu, le corps de page et 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; &lt;/div&gt; &lt;/body&gt;
&lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce qui donne ceci :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_185 spip_documents spip_documents_center'&gt;
&lt;img src='https://vader-fr.fr/local/cache-vignettes/L500xH118/projetsite-d5411.jpg?1771653422' width='500' height='118' 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;Script JS de mise &#224; jour de la page en AJAX&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;AJAX consiste &#224; envoyer de mani&#232;re asynchrone une requ&#234;te de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;XMLHttpRequest&lt;/code&gt; et d'effectuer ensuite un traitement du document XML fourni en r&#233;ponse.&lt;/p&gt;
&lt;p&gt;Il faut donc d'abord une fonction pour cr&#233;er l'objet &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;XMLHttpRequest&lt;/code&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;cr&#233;ation de l'objet XMlHttpRequest&lt;/h3&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_maj_temp(){ var requete_maj_temp=null;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, la variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;requete_maj_temp&lt;/code&gt; est initialis&#233; &#224; vide. Si la fonction s'ex&#233;cute correctement, elle contiendra un objet de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;XMLHttpRequest&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Selon le navigateur, la fonction &#224; utiliser est diff&#233;rente :&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;window.XMLHttpRequest&lt;/code&gt; sous Firefox&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;new ActiveXObject(&#034;Msxml12.XMLHTTP&#034;)&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;new ActiveXObject(&#034;Microsoft.XMLHTTP&#034;)&lt;/code&gt; sous IE, selon la version.&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 (window.XMLHttpRequest){ // Firefox requete_maj_temp=new XMLHttpRequest(); }else if (window.ActiveXObject){ // IE&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;des blocs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;try { } catch (&lt;/code&gt;&lt;i&gt;erreur&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;) { }&lt;/code&gt; permettent &#034;d'essayer&#034; de r&#233;aliser certaines actions, et de r&#233;cup&#233;rer le code/message d'erreur dans la variable &lt;i&gt;erreur&lt;/i&gt; avant d'ex&#233;cuter d'autres actions en cas d'&#233;chec de l'essai.&lt;br class='autobr' /&gt;
Cela permet dans cette fonction de tester les diff&#233;rentes versions d'Internet Explorer.&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; try{ requete_maj_temp=new ActiveXObject(&#034;Msxml12.XMLHTTP&#034;); }catch(e){ try{ requete_maj_temp=new ActiveXObject(&#034;Microsoft.XMLHTTP&#034;); }catch(e1){ requete_maj_temp=null; } } }else{ // non supporte alert(&#034;Votre navigateur ne supporte pas les XMLHTTPRequest.&#034;); }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois fini, que l'objet soit cr&#233;&#233; ou non, on retourne la variable. &lt;br class='autobr' /&gt;
Celle-ci contient &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;null&lt;/code&gt; si on n'a pas pu cr&#233;er d'objet &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;XMLHttpRequest&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	return requete_maj_temp;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, cet objet doit &#234;tre envoy&#233; &#224; un script sur un serveur&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;cr&#233;ation et envoi de la requ&#234;te&lt;/h3&gt;
&lt;p&gt;On fournit &#224; cette fonction l'adresse o&#249; envoyer 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;function requete_requete_maj_temp(url){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On tente de cr&#233;er la requ&#234;te en utilisant la fonction d&#233;clar&#233;e pr&#233;c&#233;demment.&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_maj_temp=get_requete_maj_temp();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si la variable n'existe pas ou si elle contient &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;null&lt;/code&gt;, on affiche un message d'erreur et on quitte la fonction par la directive &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;return&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;	if ((!requete_maj_temp)&amp;&amp;(requete_maj_temp!=null)){ alert(&#034;Votre navigateur ne peut creer de requete AJAX.&#034;); return; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sinon, on d&#233;finit la fonction JavaScript charg&#233;e de traiter la r&#233;ponse et on envoie 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;	requete_maj_temp.onreadystatechange=function(){traitementReponse_requete_maj_temp(requete_maj_temp)} requete_maj_temp.open(&#034;GET&#034;,url,true); requete_maj_temp.send(null);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;traitement de la r&#233;ponse&lt;/h3&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_maj_temp(requete_maj_temp){ var contenu;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;la variable &lt;contenu&lt;/code&gt; contiendra le document r&#233;ponse XML.&lt;/p&gt;
&lt;p&gt;Lorsque la requ&#234;te sera dans l'&#233;tat &#034;4&#034;, &#224; savoir pr&#233;sence d'une r&#233;ponse, le traitement sera effectu&#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;	if (requete_maj_temp.readyState==4){&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On charge le contenu du document XML de r&#233;ponse dans la variable&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;contenu=requete_maj_temp.responseXML;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Puis on r&#233;cup&#232;re une par une les valeurs des diff&#233;rentes balises XML (tag) avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;getElementsByTagName(&lt;/code&gt;&lt;i&gt;code_balise&lt;/i&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;)&lt;/code&gt;, qui renvoie un tableau de tous les &#233;l&#233;ments ayant ce tag Html/XML.&lt;br class='autobr' /&gt;
On cherche g&#233;n&#233;ralement le premier &#233;l&#233;ment du tableau,&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre [0]&lt;/code class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; dont on r&#233;cup&#232;re la valeur. &lt;code&gt; temper=contenu.getElementsByTagName(&#034;temperature&#034;)[0].firstChild.nodeValue; dater=contenu.getElementsByTagName(&#034;date&#034;)[0].firstChild.nodeValue; heurer=contenu.getElementsByTagName(&#034;heure&#034;)[0].firstChild.nodeValue; sonde=contenu.getElementsByTagName(&#034;sonde&#034;)[0].firstChild.nodeValue;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, si le bloc d&#233;di&#233; &#224; l'affichage des donn&#233;es existe dans la page Html affich&#233;e, on le met dans une variable afin de pouvoir y &#233;crire les donn&#233;es re&#231;ues avec la directive &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;variable_bloc.innerHTML=cha&#238;ne texte&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; if (this.document.getElementById('temperature')!=null){ var div_temp=this.document.getElementById('temperature'); // le div div_temp.innerHTML=&#034;sonde &#034;+sonde+&#034; : &#034;+temper+&#034;&#176;C le &#034;+dater+&#034; &#224; &#034;+heurer;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, pour continuer de mettre &#224; jour les donn&#233;es affich&#233;es, on d&#233;finit un compte &#224; rebours, ici de 10 secondes (10 000 milli-secondes) avec la directive &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;SetTimeout&lt;/code&gt; pour appeler la fonction lan&#231;ant la mise &#224; jour et d&#233;finie juste apr&#232;s.&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; setTimeout(&#034;maj_temp()&#034;,10000); } }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 class=&#034;spip&#034;&gt;fonction de chargement de la temp&#233;rature &lt;/h3&gt;
&lt;p&gt;il aurait &#233;t&#233; possible de faire appel direct &#224; function requete_requete_maj_temp(url) mais cette fonction encapsule l'url pour faire un appel plus simple&lt;br class='autobr' /&gt;
on pourrait aussi accepter des param&#232;tres de maj_temp.php, comme le num&#233;ro de sonde&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 maj_temp(){ if (this.document.getElementById('temperature')!=null){ requete_requete_maj_temp('maj_temp.php'); }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La fonction de mise &#224; jour est lanc&#233;e au chargement de la page (&#233;v&#232;nement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;onLoad&lt;/code&gt; de l'&#233;l&#233;ment &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body&lt;/code&gt;), via cette fonction AuChargement, qui permet de lancer plusieurs traitements.&lt;br class='autobr' /&gt;
Cette fois, le compte &#224; rebours est de 1 seconde, pour initialiser dans la page une valeur de 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;// fonction pour les scripts a lancer au chargement de la page =&gt; body onLoad
function AuChargement(){ pisteIE(); cacherjs(); setTimeout(&#034;maj_temp()&#034;,1000); // 1 seconde
}&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 envoyant les donn&#233;es au script JS&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Ce script, appel&#233; par la fonction JavaScript, est extr&#234;mement simple.&lt;br class='autobr' /&gt;
Il r&#233;cup&#232;re en base la derni&#232;re valeur de temp&#233;rature pour une sonde donn&#233;e, la sonde &#034;par d&#233;faut&#034; &#233;tant la 1.&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 // recuperation des champs if (isset($_GET[&#034;sonde&#034;])){ $id=$_GET[&#034;sonde&#034;]; }else{ $id=1; /* sonde par defaut */ }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On g&#233;n&#232;re ensuite l'ent&#234;te du document 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; header('content-Type:text/xml,charset=UTF-8');&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;...avant de se connecter &#224; la base, r&#233;cup&#233;rer les valeurs...&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;	include_once &#034;connect.php&#034;; $rek=&#034;select sonde,DATE_FORMAT(date,'%d/%m/%Y') as date, DATE_FORMAT(date,'%H:%i:%s') as heure,temperature from releves where sonde=$id order by date DESC limit 0,1&#034;; $res=mysql_query($rek); $row=mysql_fetch_array($res,MYSQL_ASSOC); $sonde=$row[&#034;sonde&#034;]; $date=$row[&#034;date&#034;]; // a transformer en texte $heure=$row[&#034;heure&#034;]; // de meme $temperature=$row[&#034;temperature&#034;];&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;... et de les mettre dans le document XML.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; d'abord, cr&#233;er le document par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;new DOMDocument(&#034;1.0&#034;,&#034;utf-8&#034;);&lt;/code&gt;&lt;/li&gt;&lt;li&gt; puis y mettre la balise racine &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;createElement('root');&lt;/code&gt; suivi de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;appendChild();&lt;/code&gt;&lt;/li&gt;&lt;li&gt; ajouter les &#233;l&#233;ments par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;createElement(nom_balise, valeur);&lt;/code&gt; suivi de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;appendChild();&lt;/code&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;	$doc=new DOMDocument(&#034;1.0&#034;,&#034;utf-8&#034;); $racine=$doc-&gt;createElement('root'); $doc-&gt;appendChild($racine); $xmlsonde=$doc-&gt;createElement('sonde',$sonde); $racine-&gt;appendChild($xmlsonde); $xmldate=$doc-&gt;createElement('date',$date); $racine-&gt;appendChild($xmldate); $xmlheure=$doc-&gt;createElement('heure',$heure); $racine-&gt;appendChild($xmlheure); $xmltemp=$doc-&gt;createElement('temperature',$temperature); $racine-&gt;appendChild($xmltemp);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;et enfin envoyer le 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;	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;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
