<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Iptima &#187; Hypertext Preprocessor</title>
	<atom:link href="http://www.iptima.com/tag/hypertext-preprocessor/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iptima.com</link>
	<description>... Miscellanées multimedia ®</description>
	<lastBuildDate>Tue, 08 Jun 2010 10:42:20 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Afficher un site Internet sur un téléphone mobile en pratique</title>
		<link>http://www.iptima.com/2010/02/24/afficher-un-site-internet-sur-un-telephone-mobile-en-pratique/</link>
		<comments>http://www.iptima.com/2010/02/24/afficher-un-site-internet-sur-un-telephone-mobile-en-pratique/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 22:54:24 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[accessibilité]]></category>
		<category><![CDATA[Acrobat Reader]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[contenu alternatif]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[Detect Mobile Browsers]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[Global System for Mobile Communications]]></category>
		<category><![CDATA[Gsm]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Portable Document Format]]></category>
		<category><![CDATA[référencement]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[sémantique]]></category>
		<category><![CDATA[Seo]]></category>
		<category><![CDATA[Sitemap]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=426</guid>
		<description><![CDATA[Nous allons présenter ici un moyen rudimentaire de servir un contenu alternatif, sémantique, sans altérer le contenu principal. L&#8217;objectif est didactique. Si notre exemple ne sera évidemment pas utilisable en production (!), il constituera, le cas échéant, une piste de réflexion sur un développement. Nous utiliserons Php par commodité, mais le raisonnement pourra être repris [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons présenter ici un moyen rudimentaire de servir un contenu alternatif, sémantique, sans altérer le contenu principal. L&#8217;objectif est didactique. Si notre exemple ne sera évidemment pas utilisable en production (!), il constituera, le cas échéant, une piste de réflexion sur un développement. Nous utiliserons <acronym title="pre-hypertext processing">Php</acronym> par commodité, mais le raisonnement pourra être repris avec d&#8217;autres langages de programmation.</p>
<p><span id="more-426"></span></p>
<p>D&#8217;abord, rendons-nous sur le site <a href="http://detectmobilebrowsers.mobi/" onclick="window.open(this.href); return false;" title="aller sur le site Detect Mobile Browsers (s'ouvre dans une nouvelle fenêtre)">Detect Mobile Browsers</a>, afin de télécharger le répertoire <em>mobile_detect_device</em>. Ce dossier contient le fichier <em>mobile_device_detect.php</em>. Son fonctionnement est sommaire, mais efficace&#8230; Il détecte le logiciel du navigateur&#160;: s&#8217;il se trouve dans la liste des agents utilisateurs des périphériques mobiles, il propose un traitement comme une direction. En revanche, il convient de maintenir à jour le fichier pour prendre en compte les nouveaux téléphones et les navigateurs correspondants.</p>
<p>Plaçons à la <em>racine</em> du site <em>mobile_detect_device</em>.</p>
<p>Nous disposons, à présent, de trois solutions pour rediriger vers un contenu alternatif&#160;:</p>
<ol>
<li>proposer un changement dynamique de la feuille de style avec l&#8217;<acronym title="Uniform Ressource Locator">Url</acronym>,</li>
<li>aiguiller vers un site alternatif, par exemple en sous-domaine,</li>
<li>concevoir des pages à double contenu, l&#8217;un pour le contenu principal (<em>ordinateurs classiques</em>), l&#8217;autre pour le contenu alternatif (<em>périphériques mobiles</em>).</li>
</ol>
<p>Dans le premier cas, il convient d&#8217;utiliser la syntaxe&#8230;</p>
<p class="left"><code>&#60;?php<br />
include('mobile_device_detect.php');<br />
&#36;mobile = mobile_device_detect();<br />
if (&#36;mobile == true)<br />
{<br />
&#160;&#160;header('Location: http://your-website.com/?css=mobile_style') ;<br />
}<br />
?&#62;<br />
</code></p>
<p>Cette solution conduit à ré-écrire une feuille de style, par exemple en cachant certains éléments avec la propriété <em>display: none</em>.</p>
<p>Dans le deuxième cas, il convient d&#8217;utiliser la syntaxe&#8230;</p>
<p class="left"><code>&#60;?php<br />
include('mobile_device_detect.php');<br />
&#36;mobile = mobile_device_detect();<br />
if (&#36;mobile == true)<br />
{<br />
&#160;&#160;header('http://www.monsite.com/mobile/') ;<br />
}<br />
?&#62;<br />
</code></p>
<p>Avec cette solution, plus simple et moins aléatoire, le site alternatif est autonome.</p>
<p>Dans le troisième cas, il convient d&#8217;utiliser la syntaxe&#8230;</p>
<p class="left"><code>&#60;?php<br />
include('mobile_device_detect.php');<br />
&#36;mobile = mobile_device_detect();<br />
if (&#36;mobile == true)<br />
{<br />
&#160;&#160;/***** contenu alternatif pour les périphériques mobiles *****/<br />
}<br />
else {<br />
&#160;&#160;/***** contenu principal pour les ordinateurs classiques *****/<br />
}<br />
?&#62;<br />
</code></p>
<p>Cette solution emporte notre préférence, car elle permet d&#8217;utiliser la même <acronym title="Uniform Ressource Locator">Url</acronym> pour les pages, et donc de simplifier le référencement. Un <em>Sitemap</em> spécifique sera notamment inutile.</p>
<p>On peut raffiner la condition et utiliser, par exemple, une redirection spécifique pour l&#8217;affichage sur <a href="www.apple.com/fr/iphone/" onclick="window.open(this.href); return false;" title ="aller sur le site de l'iPhone (s'ouvre dans une nouvelle fenêtre)">iPhone</a> (<em>http://www.monsite.com/iphone/</em>) et une autre pour l&#8217;affichage sur les autres périphériques de poche (<em>http://www.monsite.com/mobile/</em>)&#160;:</p>
<p class="left"><code>&#60;?php<br />
include('mobile_device_detect.php');<br />
mobile_device_detect('http://www.monsite.com/iphone/',true,true,true,true,true,false,'http://www.monsite.com/mobile/');<br />
?&#62;<br />
</code></p>
<p>Le code a été généré par <a href="http://detectmobilebrowsers.mobi/" onclick="window.open(this.href); return false;" title="aller sur le site Detect Mobile Browsers (s'ouvre dans une nouvelle fenêtre)">Detect Mobile Browsers</a>, mais nous préférons les syntaxes plus <em>lisibles</em> (et <em>bavardes</em>&#8230;)&#160;!</p>
<p>Voyons, en pratique, comment servir deux contenus dans la même page pour optimiser la <acronym title="Search Engine Optimization">Seo</acronym>. Notre contenu principal contiendra un titre, une animation en <a hreflang="en" href="http://www.adobe.com/products/flashplayer/" onclick="window.open(this.href); return false;" title ="aller sur le site de Flash Player (s'ouvre dans une nouvelle fenêtre)">Flash</a>, une image et un texte. Notre contenu alternatif contiendra les mêmes éléments, mais l&#8217;animation sera remplacée par un texte&#8230;</p>
<p class="left"><code>&#60;?php header(&#34;Content-Type: application/xhtml+xml&#34;);<br />
// Permet d'envoyer un format 'Multipurpose Internet Mail Extensions' (Mime) adapté à la consultation sur les périphériques mobiles, et doit être placé dès la première ligne avant toute autre instruction.<br />
include('mobile_device_detect.php');<br />
&#36;mobile = mobile_device_detect();<br />
if (&#36;mobile == true)<br />
// Le 'if' puis le 'else' comporte des répétitions, mais permet de ne demander qu'une requête Php.<br />
{<br />
/***** Génération du contenu pour les périphériques mobiles *****/<br />
?&#62;<br />
&#160;&#160;&#60;?= '&#60;' . '?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?' . '&#62;' ?&#62;<br />
&#160;&#160;&#60;!-- Envoie un encodage spécifique pour les périphériques mobiles --&#62;<br />
&#160;&#160;&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML Basic 1.1//EN&#34; &#34;http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd&#34;&#62;<br />
&#160;&#160;&#60;!-- Prologue spécifique pour les périphériques mobiles --&#62;<br />
&#160;&#160;&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;<br />
&#160;&#160;&#60;head&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Cache-Control&#34; content=&#34;max-age=200&#34; /&#62;<br />
&#160;&#160;&#60;!-- Mise en cache des données de l'en-tête pendant 200 secondes pour éviter les nouvelles requêtes et ralentir la navigation --&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62;<br />
&#160;&#160;&#60;link rel=&#34;stylesheet&#34; href=&#34;../phone/css/mobile.css&#34; type=&#34;text/css&#34; media=&#34;screen&#34; /&#62;<br />
&#160;&#160;&#60;!-- Si 'hanled' est introuvable, 'screen' est retenu par défaut. --&#62;<br />
&#160;&#160;&#60;!-- On peut se passer de l'appel à certains scripts destinés aux pages 'classiques'. --&#62;<br />
&#160;&#160;&#60;title&#62;Nuages&#60;/title&#62;<br />
&#160;&#160;&#60;meta name=&#34;description&#34; content=&#34;Nuages et stratocumulus&#34; /&#62;<br />
&#160;&#160;&#60;meta name=&#34;keywords&#34; content=&#34;ciel, stratocumulus, nuages, météo&#34; /&#62;<br />
&#160;&#160;&#60;/head&#62;<br />
&#160;&#160;&#60;body&#62;<br />
&#160;&#160;&#60;h1&#62;Nuages&#60;/h1&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Un nuage est formé d'un ensemble de gouttelettes d'eau (ou de cristaux de glace) en suspension dans l'air. L'aspect du nuage dépend de la lumière qu'il reçoit, de la nature, de la dimension, du nombre et de la répartition des particules qui le constituent.&#60;/p&#62;<br />
&#160;&#160;&#60;h2&#62;Stratocumulus&#60;/h2&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;image&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#60;img src=&#34;../phone/media/clouds_thumb.jpg&#34; alt=&#34;stratocumulus&#34; title=&#34;stratocumulus&#34; /&#62;<br />
&#160;&#160;&#160;&#160;&#60;!-- Le nom des images peut être modifié dynamiquement pour afficher une dimension spécifique pour les périphériques mobiles avec une expression régulière ou un 'str_replace()', à partir du moment où elles sont présentes sur le serveur en plusieurs tailles et portent un nom logique. Par exemple, on peut renommer 'image.jpg' en 'image_thumb'.jpg. On peut aussi créer des miniatures à la volée avec 'imagecopyresampled'.--&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Le stratocumulus est un genre de nuage appartenant à l'étage inférieur et situé à une altitude comprise entre 500 et 2500 mètres. Son épaisseur est de 600 mètres. Il est d'origine convective, mais son extension verticale est immédiatement limitée par la stabilité de la couche supérieure. Visuellement, ce sont de larges masses sombres et arrondies, habituellement en groupe, lignes ou vagues. Pris isolément, ces nuages sont plus gros que ceux du type altocumulus et l'ensemble se situe à plus basse altitude (habituellement en dessous de 2000 mètres).&#60;/p&#62;<br />
&#160;&#160;&#60;/body&#62;<br />
&#160;&#160;&#60;/html&#62;<br />
&#60;?php<br />
}<br />
/***** Fin de la génération du contenu pour les périphériques mobiles *****/<br />
else<br />
{<br />
/***** Génération du contenu pour les ordinateurs classiques *****/<br />
?&#62;<br />
&#160;&#160;&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;<br />
&#160;&#160;&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;<br />
&#160;&#160;&#60;head&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8 &#34; /&#62;<br />
&#160;&#160;&#60;link rel=&#34;stylesheet&#34; href=&#34;../phone/css/default.css&#34; type=&#34;text/css&#34; media=&#34;screen&#34; /&#62;<br />
&#160;&#160;&#60;title&#62;Nuages&#60;/title&#62;<br />
&#160;&#160;&#60;meta name=&#34;description&#34; content=&#34;Nuages et stratocumulus&#34; /&#62;<br />
&#160;&#160;&#60;meta name=&#34;keywords&#34; content=&#34;ciel, stratocumulus, nuages, météo&#34; /&#62;<br />
&#160;&#160;&#60;/head&#62;<br />
&#160;&#160;&#60;body&#62;<br />
&#160;&#160;&#60;!-- On peut aussi renvoyer le contenu vers une autre page, l'en-tête étant alors optionnel !!! --&#62;<br />
&#160;&#160;&#60;h1&#62;Nuages&#60;/h1&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;anim&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;object type=&#34;application/x-shockwave-flash&#34; data=&#34;../phone/media/clouds.swf&#34; width=&#34;400&#34; height=&#34;300&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;param name=&#34;movie&#34; value=&#34;clouds.swf&#34; /&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;/object&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;h2&#62;Stratocumulus&#60;/h2&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;image&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#60;a href=&#34;../phone/media/clouds_default.jpg&#34; onclick=&#34;window.open(this.href, 'Clouds', 'height=384, width=640, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=yes, scrollbars=no, status=no'); return false;&#34;&#62;&#60;img src=&#34;../phone/media/clouds_thumb.jpg&#34; alt=&#34;stratocumulus&#34; title=&#34;stratocumulus&#34; /&#62;&#60;/a&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Le stratocumulus est un genre de nuage appartenant à l'étage inférieur et situé à une altitude comprise entre 500 et 2500 mètres. Son épaisseur est de 600 mètres. Il est d'origine convective, mais son extension verticale est immédiatement limitée par la stabilité de la couche supérieure. Visuellement, ce sont de larges masses sombres et arrondies, habituellement en groupe, lignes ou vagues. Pris isolément, ces nuages sont plus gros que ceux du type altocumulus et l'ensemble se situe à plus basse altitude (habituellement en dessous de 2000 mètres).&#60;/p&#62;<br />
&#160;&#160;&#60;/body&#62;<br />
&#160;&#160;&#60;/html&#62;<br />
&#60;?php<br />
}<br />
/***** Fin de la génération du contenu pour les ordinateurs classiques *****/<br />
?&#62;<br />
</code></p>
<p>Ou sans commentaires&#8230;</p>
<p class="left"><code>&#60;?php header(&#34;Content-Type: application/xhtml+xml&#34;);<br />
include('mobile_device_detect.php');<br />
&#36;mobile = mobile_device_detect();<br />
if (&#36;mobile == true)<br />
{<br />
?&#62;<br />
&#160;&#160;&#60;?= '&#60;' . '?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?' . '&#62;' ?&#62;<br />
&#160;&#160;&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML Basic 1.1//EN&#34; &#34;http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd&#34;&#62;<br />
&#160;&#160;&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;<br />
&#160;&#160;&#60;head&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Cache-Control&#34; content=&#34;max-age=200&#34; /&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62;<br />
&#160;&#160;&#60;link rel=&#34;stylesheet&#34; href=&#34;../phone/css/mobile.css&#34; type=&#34;text/css&#34; media=&#34;screen&#34; /&#62;<br />
&#160;&#160;&#60;title&#62;Nuages&#60;/title&#62;<br />
&#160;&#160;&#60;meta name=&#34;description&#34; content=&#34;Nuages et stratocumulus&#34; /&#62;<br />
&#160;&#160;&#60;meta name=&#34;keywords&#34; content=&#34;ciel, stratocumulus, nuages, météo&#34; /&#62;<br />
&#160;&#160;&#60;/head&#62;<br />
&#160;&#160;&#60;body&#62;<br />
&#160;&#160;&#60;h1&#62;Nuages&#60;/h1&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Un nuage est formé d'un ensemble de gouttelettes d'eau (ou de cristaux de glace) en suspension dans l’air. L'aspect du nuage dépend de la lumière qu'il reçoit, de la nature, de la dimension, du nombre et de la répartition des particules qui le constituent.&#60;/p&#62;<br />
&#160;&#160;&#60;h2&#62;Stratocumulus&#60;/h2&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;image&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#60;img src=&#34;../phone/media/clouds_thumb.jpg&#34; alt=&#34;stratocumulus&#34; title=&#34;stratocumulus&#34; /&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Le stratocumulus est un genre de nuage appartenant à l'étage inférieur et situé à une altitude comprise entre 500 et 2500 mètres. Son épaisseur est de 600 mètres. Il est d'origine convective, mais son extension verticale est immédiatement limitée par la stabilité de la couche supérieure. Visuellement, ce sont de larges masses sombres et arrondies, habituellement en groupe, lignes ou vagues. Pris isolément, ces nuages sont plus gros que ceux du type altocumulus et l'ensemble se situe à plus basse altitude (habituellement en dessous de 2000 mètres).&#60;/p&#62;<br />
&#160;&#160;&#60;/body&#62;<br />
&#160;&#160;&#60;/html&#62;<br />
&#60;?php<br />
}<br />
else<br />
{<br />
?&#62;<br />
&#160;&#160;&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&#34;&#62;<br />
&#160;&#160;&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62;<br />
&#160;&#160;&#60;head&#62;<br />
&#160;&#160;&#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8 &#34; /&#62;<br />
&#160;&#160;&#60;link rel=&#34;stylesheet&#34; href=&#34;../phone/css/default.css&#34; type=&#34;text/css&#34; media=&#34;screen&#34; /&#62;<br />
&#160;&#160;&#60;title&#62;Nuages&#60;/title&#62;<br />
&#160;&#160;&#60;meta name=&#34;description&#34; content=&#34;Nuages et stratocumulus&#34; /&#62;<br />
&#160;&#160;&#60;meta name=&#34;keywords&#34; content=&#34;ciel, stratocumulus, nuages, météo&#34; /&#62;<br />
&#160;&#160;&#60;/head&#62;<br />
&#160;&#160;&#60;body&#62;<br />
&#160;&#160;&#60;h1&#62;Nuages&#60;/h1&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;anim&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;object type=&#34;application/x-shockwave-flash&#34; data=&#34;../phone/media/clouds.swf&#34; width=&#34;400&#34; height=&#34;300&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;param name=&#34;movie&#34; value=&#34;clouds.swf&#34; /&#62;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#60;/object&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;h2&#62;Stratocumulus&#60;/h2&#62;<br />
&#160;&#160;&#160;&#160;&#60;div id=&#34;image&#34;&#62;<br />
&#160;&#160;&#160;&#160;&#60;a href=&#34;../phone/media/clouds_default.jpg&#34; onclick=&#34;window.open(this.href, 'Clouds', 'height=384, width=640, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=yes, scrollbars=no, status=no'); return false;&#34;&#62;&#60;img src=&#34;../phone/media/clouds_thumb.jpg&#34; alt=&#34;stratocumulus&#34; title=&#34;stratocumulus&#34; /&#62;&#60;/a&#62;<br />
&#160;&#160;&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#160;&#160;&#60;p&#62;Le stratocumulus est un genre de nuage appartenant à l'étage inférieur et situé à une altitude comprise entre 500 et 2500 mètres. Son épaisseur est de 600 mètres. Il est d'origine convective, mais son extension verticale est immédiatement limitée par la stabilité de la couche supérieure. Visuellement, ce sont de larges masses sombres et arrondies, habituellement en groupe, lignes ou vagues. Pris isolément, ces nuages sont plus gros que ceux du type altocumulus et l'ensemble se situe à plus basse altitude (habituellement en dessous de 2000 mètres).&#60;/p&#62;<br />
&#160;&#160;&#60;/body&#62;<br />
&#160;&#160;&#60;/html&#62;<br />
&#60;?php<br />
}<br />
?&#62;<br />
</code></p>
<p>Le résultat peut être affiché sur une page de <a href="http://demo.iptima.com/phone/phone.php" onclick="window.open(this.href); return false;" title="aller sur le site Wikipedia (s'ouvre dans une nouvelle fenêtre)">démonstration</a>, et sa version mobile visualisée à l&#8217;adresse <em>http://demo.iptima.com/phone/phone.php</em>, par exemple avec <a href="http://www.opera.com/mini/demo/" onclick="window.open(this.href); return false;" title ="aller sur le site d'Opera Mini Demo (s'ouvre dans une nouvelle fenêtre)">Opera Mini Demo</a>.</p>
<p>Nous avons utilisé <a hreflang="en" href="http://www.adobe.com/products/flashplayer/" onclick="window.open(this.href); return false;" title ="aller sur le site de Flash Player (s'ouvre dans une nouvelle fenêtre)">Flash</a> comme exemple, mais le contenu pourrait aussi être servi avec des documents au format <acronym title="Portable Document Format">Pdf</acronym>.</p>
<p><em>Nota</em>. Les textes et l&#8217;image de démonstration viennent de <a href="http://fr.wikipedia.org/" onclick="window.open(this.href); return false;" title="aller sur le site Wikipedia (s'ouvre dans une nouvelle fenêtre)">Wikipedia</a>. L&#8217;animation en <a hreflang="en" href="http://www.adobe.com/products/flashplayer/" onclick="window.open(this.href); return false;" title ="aller sur le site de Flash Player (s'ouvre dans une nouvelle fenêtre)">Flash</a> a été téléchargée sur <a href="http://www.amarasoftware.com/" onclick="window.open(this.href); return false;" title="aller sur le site Amara Software (s'ouvre dans une nouvelle fenêtre)">Amara Software</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/24/afficher-un-site-internet-sur-un-telephone-mobile-en-pratique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centrer parfaitement une galerie d&#8217;images</title>
		<link>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/</link>
		<comments>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 11:39:59 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Galerie]]></category>
		<category><![CDATA[get_option]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mark Newhouse]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=284</guid>
		<description><![CDATA[Nous nous sommes longtemps interrogé sur la manière de centrer parfaitement  la dernière ligne d&#8217;une galerie, quel que soit le nombre d&#8217;images. En effet, sur la plupart des sites n&#8217;utilisant pas des effets dynamiques comme JavaScript ou Flash, les images restantes d&#8217;une dernière ligne incomplète sont inexorablement alignées à gauche&#160;: les exemples sont nombreux.

Voici [...]]]></description>
			<content:encoded><![CDATA[<p>Nous nous sommes longtemps interrogé sur la manière de centrer parfaitement  la dernière ligne d&#8217;une galerie, quel que soit le nombre d&#8217;images. En effet, sur la plupart des sites n&#8217;utilisant pas des effets dynamiques comme JavaScript ou <a hreflang="en" href="http://www.adobe.com/products/flashplayer/" onclick="window.open(this.href); return false;" title ="aller sur le site de Flash Player (s'ouvre dans une nouvelle fenêtre)">Flash</a>, les images restantes d&#8217;une dernière ligne incomplète sont inexorablement alignées à gauche&#160;: les exemples sont nombreux.</p>
<p><span id="more-284"></span></p>
<p>Voici un problème relativement simple à formuler, mais dont la solution ne saute pas aux yeux. Après avoir parcouru en vain les arcanes du <em>Web</em> francophone puis anglophone, nous avons développé notre propre technique, que nous présentons ici.</p>
<p><em>Nota</em>. Dans notre présentation, par commodité, <em>O</em> désignera une image, tandis que <em>X</em> désignera une espace. (C&#8217;est notre modeste contribution à  l&#8217;<em><acronym title="American Standard Code for Information Interchange">Ascii</acronym> Art</em>&#160;!) Nous partirons aussi du postulat qu&#8217;une galerie correspond à des images de petites tailles alignées les unes avec les autres sur une page, dont leur largeur (et, idéalement, leur hauteur&#160;!) est équivalente.</p>
<p>Ainsi, pour cinq images, l&#8217;affichage sur une colonne s&#8217;effectue ainsi&#8230;</p>
<p class="center"><code>OXOXOXOXO</code></p>
<p>Pour les images restantes, le navigateur renvoie <em>logiquement</em>, sauf instruction contraire, les images restantes les unes à la suite des autres&#8230;</p>
<p>S&#8217;il reste quatre images&#8230;</p>
<p class="center"><code>OXOXOXOXX</code></p>
<p>S&#8217;il reste trois images&#8230;</p>
<p class="center"><code>OXOXOXXXX</code></p>
<p>S&#8217;il reste deux images&#8230;</p>
<p class="center"><code>OXOXXXXXX</code></p>
<p>S&#8217;il reste une image&#8230;</p>
<p class="center"><code>OXXXXXXXX</code></p>
<p>Or, ce résultat ne nous semble pas satisfaisant sur le plan visuel, car nous avons une fâcheuse tendance à cultiver la symétrie (&#8230; qui peut expliquer certains choix esthétiques&#8230; étonnants&#160;!).</p>
<p>Nous voulons obtenir l&#8217;affichage suivant&#8230;</p>
<p>S&#8217;il reste quatre images&#8230;</p>
<p class="center"><code>XOXOXOXOX</code></p>
<p>S&#8217;il reste trois images&#8230;</p>
<p class="center"><code>XXOXOXOXX</code></p>
<p>S&#8217;il reste deux images&#8230;</p>
<p class="center"><code>XXXOXOXXX</code></p>
<p>S&#8217;il reste une image&#8230;</p>
<p class="center"><code>XXXXOXXXX</code></p>
<p>Ainsi l&#8217;affichage nous semblera harmonieux, puisque les espaces seront équilibrés. Il ressemblera à&#160;:</p>
<p class="center"><code>OXOXOXOXO<br />
XOXOXOXOX<br />
XXOXOXOXX<br />
XXXOXOXXX<br />
XXXXOXXXX</code></p>
<p>Autrement posé, il s&#8217;agit de styler différemment les lignes complètes et la ligne incomplète, <em>orpheline</em>.</p>
<p>Aussi allons-nous <em>motoriser</em> les images. Nous utilisons <acronym title="pre-hypertext processing">Php</acronym>, mais le raisonnement peut être transposé à d&#8217;autres langages de programmation.</p>
<h3>Programmons les images</h3>
<p>Retournons à l&#8217;école pour un raisonnement arithmétique simple&#8230; Le nombre d&#8217;images à afficher (inconnu à l&#8217;avance - sinon, l&#8217;effort serait inutile&#160;!) est-il divisible par <em>3</em>, dans l&#8217;ensemble des nombres entiers <strong>Z</strong>&#160;? Dans l&#8217;<strong>affirmative</strong>, des lignes <em>pleines</em> s&#8217;afficheront. Dans la <strong>négative</strong>, quel sera le reste de la division&#160;? <em>2</em> ou <em>1</em>.</p>
<p>Ainsi&#8230;</p>
<ul>
<li>&#8230; pour 58 images, 58/3 = 19 images, reste 1 image&#160;;</li>
<li>&#8230; pour 104 images, 104/3 = 34 images, restent 2 images.</li>
</ul>
<p>(Pour une ligne de cinq images, le même raisonnement conduirait à avoir cinq cas possibles.)</p>
<p>Voici un exemple de code&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;images = array('paris.jpg', 'marseille.jpg', 'lyon.jpg', 'lille.jpg', 'strasbourg.jpg');<br />
&#36;result = count(&#36;images);<br />
&#36;target = 3;<br />
/* La &#34;cible&#34; (c'est-à-dire une ligne &#34;pleine&#34;) est de trois images */<br />
&#36;orphans = fmod(&#36;result, &#36;target); // &#34;orphans&#34; comme &#34;orphelines&#34;<br />
/* 'fmod' retourne le reste d'une division */<br />
&#36;total = (&#36;result - &#36;orphans); // &#34;total&#34; pour une ligne pleine<br />
foreach(&#36;images as &#36;key =&#62; &#36;image)<br />
/* Nous utilisons la deuxième forme d'une boucle 'foreach' qui permet d'utiliser la valeur &#36;key utile dans les calculs. */<br />
{<br />
&#160;&#160;if ((&#36;key + 1) &#60;= &#36;total) // Pour trois images<br />
/* La valeur + 1 permet d'éviter que le résultat soit égal à zéro à la fin de la boucle. Nous aurions pu assigner la valeur au début des instructions... pour ne pas avoir à la ré-écrire ensuite dans les deux conditions suivantes ! Tant que le total n'est pas dépassé, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;'; // On créée la liste de définition &#34;gallery_c&#34; (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 2)) // Pour deux images<br />
/* La première condition permet de vérifier que le total est dépassé. S'il ne reste plus de lignes pleines et que le nombre d'images restantes est de deux, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;'; // On créée la liste de définition &#34;gallery_b&#34;, (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 1)) // Pour une image<br />
/* La première condition permet de vérifier que le total est dépassé. S'il ne reste plus de lignes pleines et que le nombre d'image restante est de une, l'instruction s'applique. */<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;'; // On créée la  liste de définition &#34;gallery_a&#34; (voir ci-dessous)<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo &#36;image;<br />
/* La boucle 'foreach' affiche ensuite chaque image tour à tour. */<br />
&#160;&#160;echo '&#60;/dl&#62;'; // On ferme la liste de définitions<br />
}<br />
?&#62;</code></p>
<p>Ou sans les commentaires&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;images = array('paris.jpg', 'marseille.jpg', 'lyon.jpg', 'lille.jpg', 'strasbourg.jpg');<br />
&#36;result = count(&#36;images);<br />
&#36;target = 3;<br />
&#36;orphans = fmod(&#36;result, &#36;target);<br />
&#36;total = (&#36;result - &#36;orphans);<br />
foreach(&#36;images as &#36;key =&#62; &#36;image)<br />
{<br />
&#160;&#160;if ((&#36;key + 1) &#60;= &#36;total)<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;else<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;total) &#38;&#38; (&#36;orphans == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo &#36;image;<br />
&#160;&#160;echo '&#60;/dl&#62;';<br />
}<br />
?&#62;</code></p>
<p>Les images ont été placées dans un tableau à titre didactique. Naturellement, en production, il faudra recourir à une méthode plus simple.</p>
<p>C&#8217;est pourquoi, nous présentons le code utilisé avec <em>WordPress</em>, mais qui peut être utilisé dans n&#8217;importe quel environnement&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;gallery_bottom = get_post_meta(&#36;post-&#62;ID, 'gallery_bottom', false);<br />
/* Avec WordPress, 'get_post_meta' permet de récupérer le(s) enregistrements correspondant dans une table MySql. Ensuite, on retrouve l'interaction habituelle entre Php et MySql. Les enregistrements des images sont enregistrées dans une table sous la forme : source, titre, légende (optionnel), Copyright (optionnel)...<br />
http://www.monsite.com/uploads/france.jpg,france,photo de la France,© Wikimedia Commons<br />
http://www.monsite.com/uploads/suisse.jpg,suisse,photo de la Suisse,© Wikimedia Commons<br />
http://www.monsite.com/uploads/portugal.jpg,portugal,photo du Portugal,© Wikimedia Commons<br />
http://www.monsite.com/uploads/danemark.jpg,danemark,photo du Danemark,© Wikimedia Commons<br />
 */<br />
if (&#36;gallery_bottom)<br />
{<br />
&#160;&#160;&#36;resulttgb = count(&#36;gallery_bottom); // &#34;tgb&#34; comme &#34;Temporary Gallery Bottom&#34; pour individualiser le processus<br />
&#160;&#160;&#36;targettgb = 3;<br />
&#160;&#160;&#36;orphanstgb = fmod(&#36;resulttgb, &#36;targettgb);<br />
&#160;&#160;&#36;totaltgb = (&#36;resulttgb - &#36;orphanstgb);<br />
&#160;&#160;foreach(&#36;gallery_bottom as &#36;key =&#62; &#36;tgb)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;&#160;list(&#36;fulltgb, &#36;alttgb, &#36;txtatgb, &#36;txtbtgb) = explode(&#34;,&#34;, &#36;tgb);<br />
&#160;&#160;&#160;&#160;/* On coupe la chaîne en segments pour récupérer chaque élément. */<br />
&#160;&#160;&#160;&#160;&#36;extfull = array(&#34;.jpg&#34;, &#34;.jpeg&#34;, &#34;.png&#34;, &#34;.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;extthumb = array(&#34;-100x100.jpg&#34;, &#34;-100x100.jpeg&#34;, &#34;-100x100.png&#34;, &#34;-100x100.gif&#34;);<br />
&#160;&#160;&#160;&#160;/* Chaque élément est remplacé dans l'ordre des deux tableaux. On convertit le nom de l'image pour afficher le nom de sa vignette, et éviter une double saisie de l'utilisateur. Naturellement, les images &#34;-100x100.jpg&#34; sont déjà stockées ! Ainsi, 'france.jpg' devient 'france-100x100.jpg'. */<br />
&#160;&#160;&#160;&#160;&#36;srctgb = str_ireplace(&#36;extfull, &#36;extthumb, &#36;fulltgb);<br />
&#160;&#160;&#160;&#160;/* 'str_ireplace' n'est pas sensible à la casse, et permet, par exemple, de transformer &#34;.GIF&#34; en &#34;.gif&#34;. */<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;if ((&#36;key + 1) &#60;= &#36;totaltgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;else<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dt&#62;&#60;a href=&#34;'.&#36;fulltgb.'&#34; title=&#34;'.&#36;alttgb.'&#34;&#62;&#60;img src=&#34;'.&#36;srctgb.'&#34; alt=&#34;'.&#36;alttgb.'&#34; title=&#34;'.&#36;alttgb.'&#34; /&#62;&#60;/a&#62;&#60;/dt&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;/* On concatène chaque élément récupéré tout à l'heure avec 'explode' dans une chaîne Html pour provoquer l'affichage de la vignette et du lien vers l'image. Par commodité, on utilise la même valeur pour les champs 'alt' et 'title'.*/<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtatgb) // Puisque le champ est optionnel<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtatgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtbtgb) // Puisque le champ est optionnel<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtbtgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;/dl&#62;';<br />
&#160;&#160;&#160;&#160;}<br />
&#160;&#160;}<br />
&#160;&#160;echo '&#60;div class=&#34;spacer&#34;&#62;&#60;/div&#62;'; // Pour éviter le flottement d'un élément adjacent avec la propriété Css 'clear: both;' chère à Mark Newhouse<br />
}<br />
?&#62;</code></p>
<p>Ou sans les commentaires&#8230;</p>
<p class="left"><code>&#60;?php<br />
&#36;gallery_bottom = get_post_meta(&#36;post-&#62;ID, 'gallery_bottom', false);<br />
if (&#36;gallery_bottom)<br />
{<br />
&#160;&#160;&#36;resulttgb = count(&#36;gallery_bottom);<br />
&#160;&#160;&#36;targettgb = 3;<br />
&#160;&#160;&#36;orphanstgb = fmod(&#36;resulttgb, &#36;targettgb);<br />
&#160;&#160;&#36;totaltgb = (&#36;resulttgb - &#36;orphanstgb);<br />
&#160;&#160;foreach(&#36;gallery_bottom as &#36;key =&#62; &#36;tgb)<br />
&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#9;list(&#36;fulltgb, &#36;alttgb, &#36;txtatgb, &#36;txtbtgb) = explode(&#34;,&#34;, &#36;tgb);<br />
&#160;&#160;&#160;&#160;&#36;extfull = array(&#34;.jpg&#34;, &#34;.jpeg&#34;, &#34;.png&#34;, &#34;.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;extthumb = array(&#34;-100x100.jpg&#34;, &#34;-100x100.jpeg&#34;, &#160;&#160;&#160;&#160;&#34;-100x100.png&#34;, &#34;-100x100.gif&#34;);<br />
&#160;&#160;&#160;&#160;&#36;srctgb = str_ireplace(&#36;extfull, &#36;extthumb, &#36;fulltgb);<br />
&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;if ((&#36;key + 1) &#60;= &#36;totaltgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_c&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;else<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 2))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_b&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (((&#36;key + 1) &#62; &#36;totaltgb) &#38;&#38; (&#36;orphanstgb == 1))<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dl class=&#34;gallery_a&#34;&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dt&#62;&#60;a href=&#34;'.&#36;fulltgb.'&#34; title=&#34;'.&#36;alttgb.'&#34;&#62;&#60;img src=&#34;'.&#36;srctgb.'&#34; alt=&#34;'.&#36;alttgb.'&#34; title=&#34;'.&#36;alttgb.'&#34; /&#62;&#60;/a&#62;&#60;/dt&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtatgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtatgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;if (&#36;txtbtgb)<br />
&#160;&#160;&#160;&#160;&#160;&#160;{<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;dd&#62;'.&#36;txtbtgb.'&#60;/dd&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '&#60;/dl&#62;';<br />
&#160;&#160;&#160;&#160;&#160;&#160;}<br />
&#160;}<br />
&#160;echo '&#60;div class=&#34;spacer&#34;&#62;&#60;/div&#62;';<br />
}<br />
?&#62;</code></p>
<p><em>Nota.</em> Depuis que <em>WordPress</em> intègre la gestion des vignettes, nous n&#8217;utilisons plus les champs personnalisés&#160;!</p>
<h3>Stylons les images</h3>
<p>Nous avons utilisé les listes de définition pour afficher les images. La structure de ces listes est commode, grâce à l&#8217;attribut &#60;dd&#62;, optionnel, qui permet ou non d&#8217;ajouter une légende, en restant compatible <acronym title="eXtensible HyperText Markup Language">Xhtml</acronym> Strict. Un exemple d&#8217;utilisation est donné dans l&#8217;excellent article <a href="http://www.pompage.net/pompe/listesdefinitions/" onclick="window.open(this.href); return false;" title="lire l'article Les listes de définitions : mal utilisées ou mal comprises ? (s'ouvre dans une nouvelle fenêtre)"><em>Les listes de définitions&#160;: mal utilisées ou mal comprises&#160;?</em></a></p>
<p>Si une ligne est complète, c&#8217;est-à-dire comporte trois images, l&#8217;attribut <em>gallery_c</em> est utilisé pour les images. Si une ligne est incomplète et comporte deux images, l&#8217;attribut <em>gallery_b</em> est utilisé pour les images. Si une ligne est incomplète et comporte une image, l&#8217;attribut <em>gallery_c</em> est utilisé pour l&#8217;image.</p>
<p class="left"><code>dl.gallery_a, dl.gallery_b {<br />
&#160;&#160;float: left /* Inutile de provoquer le flottement de la dernière galerie, puisqu'il n'y a qu'une image ! */<br />
}<br />
dl.gallery_a dt, dl.gallery_b dt, dl.gallery_c dt, dl.gallery_a dd, dl.gallery_b dd, dl.gallery_c dd {<br />
&#160;&#160;text-align: center<br />
}<br />
dl.gallery_a dd, dl.gallery_b dd, dl.gallery_c dd {<br />
&#160;&#160;font-weight: bold<br />
}<br />
dl.gallery_a {<br />
&#160;&#160;width: 33.33% /* Nous fûmes longtemps persuadé que la version 5.5 d'Internet Explorer interprétait mal les décimales, à tort ! */<br />
}<br />
dl.gallery_b {<br />
&#160;&#160;width: 50%<br />
}<br />
dl.gallery_c {<br />
&#160;&#160;display: block;<br />
&#160;&#160;margin-left: auto;<br />
&#160;&#160;margin-right: auto;<br />
&#160;&#160;width: 100%<br />
}<br />
</code></p>
<p>Avec les largeurs fixes, il devient plus délicat d&#8217;aligner correctement les images, et le code est nettement moins élégant.</p>
<p>Ainsi, soit une feuille de style qui comporte les propriétés suivantes, sachant que la largeur du conteneur est de 625 pixels et celle d&#8217;une image est de 129 pixels avec ses bordures et ses marges&#8230;</p>
<p class="left"><code>dl.gallery_a, dl.gallery_b, dl.gallery_c {<br />
&#160;&#160;float: left<br />
}<br />
dl.gallery_a {<br />
&#160;&#160;margin: 15px 248px /* 248 pixels + 129 pixels + 248 pixels = 625 pixels */<br />
}<br />
dl.gallery_b {<br />
&#160;&#160;margin: 15px 91px /* 91 pixels + 129 pixels + 91 pixels + 91 pixels + 129 pixels + 91 pixels = 622 pixels - on doit se contenter de cette approximation - 91 pixels + 91 pixels, puisque les marges se juxtaposent */<br />
}<br />
dl.gallery_c {<br />
&#160;&#160;margin: 15px 39px; /* 39 pixels + 129 pixels + 39 pixels + 39 pixels + 129 pixels + 39 pixels + 39 pixels + 129 pixels + 39 pixels = 621 pixels - on doit se contenter de cette approximation - 39 pixels + 39 pixels, puisque les marges se juxtaposent */<br />
}<br />
</code></p>
<p><em>Nota</em>. Pour déterminer facilement, la largeur des espaces entre les images, il suffit d&#8217;appliquer le calcul&#160;:</p>
<p class="center"><code>(((largeur du conteneur ou de la page - (nombre d'images x largeur de chaque image))/((nombre d'images + 1) x 2)))</code></p>
<p>Par exemple, la largeur d&#8217;un conteneur est de 618 pixels (cette valeur simple est arbitraire&#160;!). Nous voulons y placer trois images de 150 pixels.</p>
<ul>
<li>Largeur du conteneur ou de la page&#160;: 618 pixels.</li>
<li>Nombre d&#8217;images&#160;: 3.</li>
<li>Largeur de chaque image&#160;: 150 pixels.</li>
<li>150 pixels x 3 images = 450 pixels.</li>
<li>Nombre d&#8217;espaces nécessaires&#160;: 3 images + 1.</li>
<li>Soient <em>(((618 - (3 x 150))/((3 + 1) x 2))) = <strong>21</strong></em>.</li>
<li>Soient (((618 pixels - (3 images x 150 pixels))/((3 espaces + 1) x 2))) = <strong>21 pixels</strong>.</li>
</ul>
<p>Nous avons utilisé des listes de définitions pour centrer nos images, mais notre solution peut s&#8217;adapter à d&#8217;autres types de balises et de contenu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2010/02/18/centrer-une-galerie-dimages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Désactiver le suivi des versions de WordPress</title>
		<link>http://www.iptima.com/2008/10/29/desactiver-le-suivi-des-versions-de-wordpress/</link>
		<comments>http://www.iptima.com/2008/10/29/desactiver-le-suivi-des-versions-de-wordpress/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 10:30:57 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Notes de lecture]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[administration de WordPress]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Standard Query Language]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=271</guid>
		<description><![CDATA[Korben explique sur son weblogue comment désactiver le suivi des versions de WordPress en modifiant le fichier wp-config.php, après purge préalable de la base de données. Thomas revient sur ce propos en donnant la procédure détaillée pour nettoyer en profondeur les tables. Il est certain que cette fonctionnalité de WordPress est inutile lorsqu&#8217;on est seul [...]]]></description>
			<content:encoded><![CDATA[<p>Korben explique sur son <a href="http://www.korben.info/comment-desactiver-le-suivi-des-versions-sous-wordpress-26.html" onclick="window.open(this.href); return false;" title="lire l'article de Korben sur la désactivation des suivi de versions de WordPress(s'ouvre dans une nouvelle fenêtre)">weblogue</a> comment désactiver le suivi des versions de <em>WordPress</em> en modifiant le fichier <em>wp-config.php</em>, après purge préalable de la base de données. Thomas revient sur ce propos en donnant la <a href="http://blog.newbie-project.net/2008/10/30/astuce-wp-donnez-un-bon-coup-de-balai-a-votre-bdd.html" onclick="window.open(this.href); return false;" title="lire l'article de Thomas sur la nettoyage en profondeur des tables de WordPress(s'ouvre dans une nouvelle fenêtre)">procédure</a> détaillée pour nettoyer en profondeur les tables. Il est certain que cette fonctionnalité de <em>WordPress</em> est inutile lorsqu&#8217;on est seul rédacteur et alourdit inutilement le contenu de la table <em>wp_posts</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/10/29/desactiver-le-suivi-des-versions-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>000webhost, un hébergeur performant et gratuit</title>
		<link>http://www.iptima.com/2008/08/24/memo-000webhost-un-hebergeur-performant-et-gratuit/</link>
		<comments>http://www.iptima.com/2008/08/24/memo-000webhost-un-hebergeur-performant-et-gratuit/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 17:14:27 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[000webhost]]></category>
		<category><![CDATA[b2evolution]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[File Transfert Protocol]]></category>
		<category><![CDATA[Ftp]]></category>
		<category><![CDATA[hébergeur]]></category>
		<category><![CDATA[Hosting24]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Nucleus]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Sgc]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Standard Query Language]]></category>
		<category><![CDATA[Système de Gestion de Contenu]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=228</guid>
		<description><![CDATA[&#60;addendum&#62;
15/09/2009.
Nous laissons cet article en l&#8217;état cet article, pour mémoire&#160;: à l&#8217;usage, les services de 000webhost constituent une anarque, et fonctionnent plutôt mal, mais ils sont idéals pour héberger des sites expérimentaux ou poubelles. En cas de problème, les services payants de Hosting24 sont proposés, mais il ne valent guère mieux. Autant être prévenu&#160;! 
&#60;/addendum&#62;
Avec [...]]]></description>
			<content:encoded><![CDATA[<p><strong>&#60;addendum&#62;</strong></p>
<p><em>15/09/2009.</em></p>
<p>Nous laissons cet article en l&#8217;état cet article, pour mémoire&#160;: à l&#8217;usage, les services de <a href="http://www.000webhost.com/69994.html" onclick="window.open(this.href); return false;" title="aller sur le site de 000webhost (s'ouvre dans une nouvelle fenêtre)">000webhost</a> constituent une </em>anarque</em>, et fonctionnent plutôt mal, mais ils sont idéals pour héberger des sites expérimentaux ou <em>poubelles</em>. En cas de problème, les services payants de <a href="http://www.hosting24.com/" onclick="window.open(this.href); return false;" title="aller sur le site d'Hosting24 (s'ouvre dans une nouvelle fenêtre)">Hosting24</a> sont proposés, mais il ne valent guère mieux. Autant être prévenu&#160;! </p>
<p><strong>&#60;/addendum&#62;</strong></p>
<p>Avec <a href="http://www.000webhost.com/69994.html" onclick="window.open(this.href); return false;" title="aller sur le site de 000webhost (s'ouvre dans une nouvelle fenêtre)">000webhost</a>, nous pensons avoir trouvé l&#8217;hébergeur idéal&#160;:<br />
<span id="more-228"></span></p>
<ul>
<li>350 Mega-octets d&#8217;espace disque,</li>
<li>100 Giga-octets de bande passante,</li>
<li><acronym title="pre-hypertext processing">Php</acronym> et MySql en version 5,</li>
<li>activation immédiate du compte, y compris de l&#8217;accès <acronym title="File Transfert Protocol">Ftp</acronym> et de la base MySql,</li>
<li>hébergement en nom de domaine, ou en sous domaine avec une adresse comme <em>http://chezmoi.site40.net</em>,</li>
<li>installation en un clic des plates-formes de weblogue (<em>WordPress</em>, <em>Nucleus</em>, <em>b2evolution</em>&#8230;), de <acronym title="Système de Gestion de Contenu (Content Management System - Cms - en anglais)">Sgc</acronym> (<em>Drupal</em>, <em>Joomla</em>, <em>Typo3</em>&#8230;) <em>et cetera</em> pour les moins chevronnés,</li>
<li>haute disponibilité,</li>
<li>sans publicité,</li>
<li>serveur de mel,</li>
<li>gratuit.</li>
</ul>
<p>Autrement dit, ce service propose l&#8217;ensemble des fonctionnalités d&#8217;un hébergeur classique, mais il est gratuit. Le modèle économique repose sur les dons et, essentiellement, sur les souscriptions payantes à des services supplémentaires.  </p>
<p>Les serveurs sont situés aux États-Unis d&#8217;Amérique, mais les temps de réponse sont comparables à ceux d&#8217;un hébergeur situé (au hasard&#8230;) en Allemagne&#160;!</p>
<p>L&#8217;assistance technique est limitée à un forum de discussion, mais semble aussi réactive que les <em>hotliners</em> des hébergements classiques à l&#8217;entendement parfois limité.</p>
<p>Cette offre est idéale pour débutants, par exemple sous <em>WordPress</em>&#160;: plutôt qu&#8217;installer une version du weblogue en <em>local</em> au risque de ne pas savoir exporter la base de données avec la mise en production, il est plus utile d&#8217;utiliser un serveur dès ses premiers pas. </p>
<p>Sont parfois à déplorer certaines <em>sautes</em> du serveur, qui durent le plus souvent quelques secondes. Cet écueil n&#8217;est guère gênant pour les sites amateurs.</p>
<p>Désormais, nous ne connaissons plus d&#8217;erreur <em>500</em> sur nos sites ni de problème d&#8217;allocation de mémoire <acronym title="pre-hypertext processing">Php</acronym>. Notre vie de concepteur de sites a changé grâce à <a href="http://www.000webhost.com/69994.html" onclick="window.open(this.href); return false;" title="aller sur le site de 000webhost (s'ouvre dans une nouvelle fenêtre)">000webhost</a>&#160;!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/08/24/memo-000webhost-un-hebergeur-performant-et-gratuit/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Accéder aux options de WordPress depuis l&#8217;interface d&#8217;administration</title>
		<link>http://www.iptima.com/2008/08/23/acceder-aux-options-de-wordpress-depuis-linterface-dadministration/</link>
		<comments>http://www.iptima.com/2008/08/23/acceder-aux-options-de-wordpress-depuis-linterface-dadministration/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 17:34:56 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[administration de WordPress]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Standard Query Language]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=213</guid>
		<description><![CDATA[Pour accéder aux options de WordPress, il suffit de taper l&#8217;adresse http://www.site.com/wp-admin/options.php. L&#8217;équivalent de la table wp_options s&#8217;affiche, et elle permet de modifier d&#8217;un clic de souris les caractéristiques de son weblogue. Curieusement, ce lien n&#8217;est pas disponible en clair depuis l&#8217;interface d&#8217;administration de WordPress&#160;!
]]></description>
			<content:encoded><![CDATA[<p>Pour accéder aux options de WordPress, il suffit de taper l&#8217;adresse <em>http://www.site.com/wp-admin/options.php</em>. L&#8217;équivalent de la table <em>wp_options</em> s&#8217;affiche, et elle permet de modifier d&#8217;un clic de souris les caractéristiques de son weblogue. Curieusement, ce lien n&#8217;est pas disponible <em>en clair</em> depuis l&#8217;interface d&#8217;administration de <em>WordPress</em>&#160;!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/08/23/acceder-aux-options-de-wordpress-depuis-linterface-dadministration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ajouter des «&#160;Widgets&#160;» à un thème WordPress</title>
		<link>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/</link>
		<comments>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 17:55:40 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[Conception]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Style Sheets]]></category>
		<category><![CDATA[Css]]></category>
		<category><![CDATA[Extensible HyperText Markup Language]]></category>
		<category><![CDATA[feuilles de style]]></category>
		<category><![CDATA[Html]]></category>
		<category><![CDATA[HyperText Markup Language]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[Xhtml]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=152</guid>
		<description><![CDATA[Dans WordPress, il est désormais possible d&#8217;ajouter des Widgets dans quatre zones&#160;:

l&#8217;en-tête,
le contenu,
la colonne latérale,
le pied de page.


Le nombre de zones n&#8217;est pas limité&#160;: on peut très bien imaginer un thème avec deux colonnes latérales de Widgets et un pied de page avec trois zones de Widgets&#160;!
La plupart des thèmes disponibles se contente de proposer [...]]]></description>
			<content:encoded><![CDATA[<p>Dans <em>WordPress</em>, il est désormais possible d&#8217;ajouter des <em>Widgets</em> dans quatre zones&#160;:</p>
<ul>
<li>l&#8217;en-tête,</li>
<li>le contenu,</li>
<li>la colonne latérale,</li>
<li>le pied de page.</li>
</ul>
<p><span id="more-152"></span></p>
<p>Le nombre de zones n&#8217;est pas limité&#160;: on peut très bien imaginer un thème avec deux colonnes latérales de <em>Widgets</em> et un pied de page avec trois zones de <em>Widgets</em>&#160;!</p>
<p>La plupart des thèmes disponibles se contente de proposer une ou plusieurs colonnes latérales <em>Widget Ready</em>. Or, pour des raisons esthétiques ou de séméiologie (!), on peut vouloir afficher <em>WordPress</em> sur une colonne, avec les informations complémentaires dans le pied de page.</p>
<p>Nous allons donc voir ici, à travers quelques codes simples que nous avons développés (nous préfèrerons ici la pratique à la théorie, car <em>c&#8217;est en forgeant qu&#8217;on devient forgeron</em>), comment ajouter des <em>Widgets</em> à un thème dans une colonne ou dans un pied de page. Leur adaptation demandera un minimum d&#8217;effort, nous en sommes persuadé&#8230;</p>
<p>Dans notre premier thème, nous nous contenterons d&#8217;afficher une deuxième colonne latérale dans le corps de la page affichant des <em>Widgets</em>&#160;; dans le deuxième, nous créerons un pied de page développé, qui comprendra trois zones de <em>Widgets</em>. </p>
<p>Précisions au préalable que la <em>widgetization</em> d&#8217;un thème demande la modification de trois fichiers&#160;:</p>
<ul>
<li>le fichier <em>functions.php</em>,</li>
<li>la feuille de style que nous appellerons par commodité <em>styles.css</em>,</li>
<li>le fichier de destination, <em>sidebar.php</em> ou <em>footer.php</em>, selon la zone de destination des <em>widgets</em> dans nos exemples présentés ici.</li>
</ul>
<h3>Le fichier <em>functions.php</em></h3>
<p>Le fichier <em>functions.php</em> comportera l&#8217;instruction suivante pour notre thème à la deuxième colonne&#160;:</p>
<p><code>&#60;?php<br />
if (function_exists('register_sidebar'))<br />
register_sidebar(array('name'=&#62;'barre',<br />
&#160;&#160;'before_widget' =&#62; '&#60;div id=&#34;%1&#36;s&#34; class=&#34;widget_sidebar %2&#36;s&#34;&#62;',<br />
&#160;&#160;'after_widget' =&#62; '&#60;/div&#62;',<br />
&#160;&#160;'before_title' =&#62; '&#60;h2 class=&#34;widgettitle&#34;&#62;',<br />
&#160;&#160;'after_title' =&#62; '&#60;/h2&#62;',<br />
 ));<br />
 ?&#62;</code></p>
<p>Ici, <em>sidebar</em> a été utilisé au singulier, car nous demandons la création d&#8217;une seule zone. </p>
<p>Pour notre pied de page développé, nous écrirons&#160;:</p>
<p><code>&#60;?php<br />
if (function_exists('register_sidebar'))<br />
register_sidebars(3,array(<br />
&#160;&#160;'before_widget' =&#62; '&#60;div id=&#34;%1&#36;s&#34; class=&#34;widget_sidebar %2&#36;s&#34;&#62;',<br />
&#160;&#160;'after_widget' =&#62; '&#60;/div&#62;',<br />
&#160;&#160;'before_title' =&#62; '&#60;h2 class=&#34;widgettitle&#34;&#62;',<br />
&#160;&#160;'after_title' =&#62; '&#60;/h2&#62;',<br />
));</code></p>
<p>Ici, la déclaration est la même que précédemment, à l&#8217;exception du chiffre <strong>3</strong> qui précise le nombre de <em>Sidebars</em> attendu et de l&#8217;ajout de la marque du <strong>pluriel</strong> à <em>sidebar</em>.</p>
<p>Cette solution présente un inconvénient ergonomique&#160;: aucun nom ne sera donné à la zone, au risque de créer une confusion dans l&#8217;esprit de l&#8217;utilisateur. Aussi vaut-il mieux déclarer un par un chaque <em>widget</em>, en leur attribuant un nom significatif&#160;: par exemple, <em>pied_gauche</em>, <em>pied_centre</em> et <em>pied_droit</em>.</p>
<h3>Le fichier <em>style.css</em></h3>
<p>Après avoir déclaré les <em>Widgets</em> et le formatage attendu, nous pouvons les styliser dans le fichier <em>style.css</em> comme suit dans notre thème à la colonne&#160;:</p>
<p><code>#sidebar {<br />
/* 8 juin 2010. La syntaxe de cette feuille de style est laide comme les suivantes dans l'article, car nous avons progressé depuis la rédaction de l'article. Cependant, nous laissons l'article en l'état... qui pourra peut-être éclairer les débutants. */<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin: 0 0 0 20px;<br />
&#160;&#160;padding: 0<br />
&#160;&#160;width: 320px<br />
}<br />
#sidebar ul {<br />
&#160;&#160;margin-bottom: 20px<br />
}<br />
#sidebar a {<br />
&#160;&#160;color: #000<br />
}<br />
.widget_sidebar {<br />
&#160;&#160;display: block;<br />
&#160;&#160;float: left;<br />
&#160;&#160;font-size:1em;<br />
&#160;&#160;margin: 0 0 5px 0;<br />
&#160;&#160;padding: 0;<br />
&#160;&#160;width: 320px<br />
}<br />
.widget_sidebar h1, .widget_sidebar h2, .widget_sidebar h3 {<br />
&#160;&#160;background: #ffe6e6;<br />
&#160;&#160;border-bottom: 1px solid #000;<br />
&#160;&#160;border-top: 1px solid #000;<br />
&#160;&#160;color: #fff;<br />
&#160;&#160;margin: 0;<br />
&#160;&#160;padding : 2px 0px 2px 5px<br />
}<br />
.widget_sidebar ul h2 {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.5em;<br />
&#160;&#160;padding-bottom: 10px<br />
}<br />
.widget_sidebar ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.1em;<br />
&#160;&#160;line-height: 1.6em;<br />
&#160;&#160;list-style: none<br />
}<br />
.widget_sidebar ul ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000<br />
}<br />
#sidebar a:hover {<br />
&#160;&#160;text-decoration: underline<br />
}<br />
.widget_sidebar p {<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;padding: 10px;<br />
&#160;&#160;text-align: center<br />
}<br />
/*--------------Widgets--------------*/<br />
li.widget h2 {<br />
&#160;&#160;color: #000;<br />
}<br />
/*-------------Calendar-----------------*/<br />
#wp-calendar {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;text-align: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#wp-calendar th {<br />
&#160;&#160;margin-top: 5px<br />
}<br />
#wp-calendar caption {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;font-size: 1.2em<br />
</code></p>
<p>Pour le pied de page, nous le styliserons ainsi&#8230;</p>
<p><code>#footer_sidebar {<br />
&#160;&#160;display: block;<br />
&#160;&#160;height: 260px;<br />
&#160;&#160;margin-left: 25px;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;padding-top: 25px<br />
}<br />
#footer_sidebar_1 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer_sidebar_2 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;margin-right: 25px;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer_sidebar_3 {<br />
&#160;&#160;float: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#footer ul {<br />
&#160;&#160;margin-bottom: 20px<br />
}<br />
.widget_sidebar h1, .widget_sidebar h2, .widget_sidebar h3 {<br />
&#160;&#160;color: #000;<br />
&#160;&#160;border-bottom: 1px solid #000;<br />
&#160;&#160;border-top: 1px solid #000;<br />
&#160;&#160;margin: 0;<br />
&#160;&#160;padding: 2px 0px 2px 0px;<br />
&#160;&#160;text-align: center<br />
}<br />
.widget_sidebar ul h2 {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.5em;<br />
&#160;&#160;padding-bottom: 10px<br />
}<br />
.widget_sidebar ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000;<br />
&#160;&#160;font-size: 1.1em;<br />
&#160;&#160;list-style: none;<br />
&#160;&#160;line-height: 1.6em<br />
}<br />
.widget_sidebar ul ul li {<br />
&#160;&#160;border-bottom: dashed 1px #000<br />
}<br />
#sidebar a:hover {<br />
&#160;&#160;text-decoration: underline<br />
}<br />
.widget_sidebar p {<br />
&#160;&#160;color: #000;<br />
&#160;&#160;font-size: 1em;<br />
&#160;&#160;padding: 10px;<br />
&#160;&#160;text-align: center<br />
}<br />
/*--------------Widgets--------------*/<br />
li.widget h2 {<br />
&#160;&#160;color: #000<br />
}<br />
/*-------------Calendar-----------------*/<br />
#wp-calendar {<br />
&#160;&#160;margin-top: 5px;<br />
&#160;&#160;text-align: left;<br />
&#160;&#160;width: 180px<br />
}<br />
#wp-calendar th {<br />
&#160;&#160;margin-top: 5px<br />
}<br />
#wp-calendar caption {<br />
&#160;&#160;font-size: 1.2em;<br />
&#160;&#160;margin-top: 5px<br />
</code></p>
<p>(<em>Nota</em>. Pour les exemples, nous nous sommes contenté de la couleur noire, qui n&#8217;affichera pas grand&#8217;chose&#160;!)</p>
<h3>Déclaration des <em>Widgets</em> dans les fichiers de destination</h3>
<p>Enfin, il reste à déclarer les <em>Widgets</em> dans la colonne de notre premier thème. Il suffit d&#8217;ajouter à notre fichier <em>sidebar.php</em> la déclaration&#8230;<br />
<code>&#60;?php<br />
if ( !function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(1) ) : ?&#62;<br />
&#60;?php endif; ?&#62;</code></p>
<p>Pour notre fichier <em>footer.php</em> du deuxième thème, l&#8217;instruction sera&#160;:</p>
<p><code>&#60;div id=&#34;footer_sidebar&#34;&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_1&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(1)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_2&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(2)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#160;&#160;&#60;div id=&#34;footer_sidebar_3&#34;&#62;<br />
&#160;&#160;&#60;?php if (!function_exists('dynamic_sidebar')<br />
|| !dynamic_sidebar(3)) : ?&#62;<br />
&#160;&#160;&#60;?php endif; ?&#62;<br />
&#160;&#160;&#60;/div&#62;<br />
&#60;/div&#62;</code></p>
<p>Traditionnellement, cette déclaration est placée en tête du fichier, le restant étant laissé vide. Néanmoins, il est possible de coder <em>en dur</em> certains éléments, et d&#8217;ajouter la déclaration à la suite. Ainsi, l&#8217;ajout de <em>Widgets</em> dans l&#8217;interface d&#8217;administration de <em>WordPress</em> n&#8217;affectera pas le codage.</p>
<p>À l&#8217;usage, nous avons noté un dysfonctionnement. Si trois zones de <em>widgets</em> sont prévues dans le pied de page à gauche, au centre et à droite, la zone centrale ne peut être laissée vide&#160;: sinon, les <em>Widgets</em> placés dans la zone de droite occupent le centre. Pour obvier à cet inconvénient, il suffit d&#8217;ajouter un <em>Widget</em> texte vide dans la zone centrale, avec un espace insécable.</p>
<p>(<em>Nota</em>. Nous prions nos lecteurs de nous excuser pour les anglicismes, plus ou moins incontournables en la matière&#160;!)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/08/19/ajouter-des-%c2%ab-widgets-%c2%bb-a-un-theme-wordpress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Optimiser ses requêtes Sql avec WordPress</title>
		<link>http://www.iptima.com/2008/08/06/optimiser-ses-requetes-sql-avec-wordpress/</link>
		<comments>http://www.iptima.com/2008/08/06/optimiser-ses-requetes-sql-avec-wordpress/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 17:47:36 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Sql]]></category>
		<category><![CDATA[Standard Query Language]]></category>

		<guid isPermaLink="false">http://www.iptima.com/?p=135</guid>
		<description><![CDATA[Thomas a commis un article passionnant, Optimisez vos requêtes Sql avec WordPress 2.5. Est expliqué comment afficher dans le pied de page le nombre de requêtes Sql et leur temps d&#8217;exécution. Ces renseignements sont d&#8217;un intérêt fort théorique, mais peuvent combler les technophiles.
]]></description>
			<content:encoded><![CDATA[<p>Thomas a commis un article passionnant, <a href="http://blog.newbie-project.net/2008/03/24/optimisez-vos-requetes-sql-avec-wordpress-25.html" onclick="window.open(this.href); return false;" title="lire l'article Optimisez vos requêtes Sql avec WordPress 2.5 (s'ouvre dans une nouvelle fenêtre)">Optimisez vos requêtes Sql avec WordPress 2.5</a>. Est expliqué comment afficher dans le pied de page le nombre de requêtes <acronym title="Standard Query Language">Sql</acronym> et leur temps d&#8217;exécution. Ces renseignements sont d&#8217;un intérêt fort théorique, mais peuvent combler les technophiles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2008/08/06/optimiser-ses-requetes-sql-avec-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Versions successives de WordPress&#8230;</title>
		<link>http://www.iptima.com/2007/10/06/versions-successives-de-wordpress/</link>
		<comments>http://www.iptima.com/2007/10/06/versions-successives-de-wordpress/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 16:02:46 +0000</pubDate>
		<dc:creator>Vincent Roulet</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cms]]></category>
		<category><![CDATA[Content Management System]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[Hypertext Preprocessor]]></category>
		<category><![CDATA[mises à jour]]></category>
		<category><![CDATA[modules d'extension]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[plugiciels]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Sgc]]></category>
		<category><![CDATA[Système de Gestion de Contenu]]></category>
		<category><![CDATA[thèmes]]></category>

		<guid isPermaLink="false">http://www.iptima.com/2007/10/06/passage-a-wordpress-23/</guid>
		<description><![CDATA[Il paraît parfois urgent d&#8217;attendre avant de se précipiter vers les mises à jour de WordPress, sous peine de déconvenues&#160;! Chaque version apporte son lot de dysfonctionnements, la plupart étant résolue dans les jours qui suivent après le retour des premiers utilisateurs&#8230; inconscients, courageux ou technophiles via notamment le support francophone de WordPress.

Néanmoins, critiquable est [...]]]></description>
			<content:encoded><![CDATA[<p>Il paraît parfois urgent d&#8217;attendre avant de se précipiter vers les mises à jour de <em>WordPress</em>, sous peine de déconvenues&#160;! Chaque version apporte son lot de dysfonctionnements, la plupart étant résolue dans les jours qui suivent après le <em>retour</em> des premiers utilisateurs&#8230; inconscients, courageux ou technophiles <em>via</em> notamment le support francophone de <em>WordPress</em>.</p>
<p><span id="more-64"></span></p>
<p>Néanmoins, critiquable est une prudence excessive&#160;: l&#8217;attentisme ne contribue pas à améliorer le fonctionnement du logiciel, et chaque utilisateur a l&#8217;obligation morale de participer à l&#8217;essor de <em>WordPress</em>.</p>
<p>Aussi avons-nous défini un <em>poids moyen</em>, selon l&#8217;audience de nos weblogues. Comme notre site principal ne saurait souffrir d&#8217;interruptions ou de dysfonctionnements, nous attendons. Pour les autres, nous mettons à jour la version de <em>WordPress</em> sans tarder.</p>
<p>Au-delà des dysfonctionnements intrinsèques d&#8217;une nouvelle version, se pose aussi le problème des fichiers <em>natifs</em> de <em>WordPress</em> personnalisés&#160;: certaines modifications peuvent être irrémédiablement perdues, si l&#8217;on a pas songé à une sauvegarde (d&#8217;expérience, le phénomène se produit souvent&#160;!). C&#8217;est pourquoi, nous ne sommes pas favorable à une personnalisation à l&#8217;outrance des fonctions de <em>WordPress</em>&#160;: il vaut mieux obtenir une fonctionnalité par l&#8217;intermédiaire d&#8217;un thème ou d&#8217;une extension, plus facile à maintenir <em>mutatis mutandis</em>&#8230; et noter sa réflexion (le cheminement de certaines idées lumineuses mises aussitôt en application peut disparaître à jamais)&#160;!</p>
<p>D&#8217;ailleurs, la maintenance des plugiciels reste périlleuse, surtout lorsqu&#8217;ils ont nécessité une adaptation. Changement de version ou non de <em>WordPress</em>, la fonctionnalité de mise à jour automatique est tentante (et c&#8217;est un réel progrès de ne plus devoir passer par un logiciel de <acronym title="File Transfert Protocol">Ftp</acronym>), mais un <em>clic</em> malheureux ou irréfléchi sur le lien peut réduire à néant plusieurs heures d&#8217;effort.</p>
<p>Si <em>WordPress</em> a vocation d&#8217;être un <acronym title="Système de Gestion de Contenu (Content Management System - Cms - en anglais)">Sgc</acronym> <em>prêt à l&#8217;emploi</em>, un weblogueur consciencieux doit accepter l&#8217;augure de passer un cinquième de son temps à la gestion technique de son site. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.iptima.com/2007/10/06/versions-successives-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
