<?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>Développement Web, Webdesign, SEO, Multimédia - Guillaume Voisin, Ingénieur Web</title>
	<atom:link href="http://www.guillaumevoisin.fr/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.guillaumevoisin.fr/blog</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Tue, 02 Feb 2010 15:35:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutoriel: Apprendre les feuilles de style XSL(T)</title>
		<link>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-apprendre-les-feuilles-de-style-xslt</link>
		<comments>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-apprendre-les-feuilles-de-style-xslt#comments</comments>
		<pubDate>Tue, 02 Feb 2010 15:35:26 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[transformation XML]]></category>
		<category><![CDATA[xsl]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=431</guid>
		<description><![CDATA[
Le XML est un format très répandu, utilisable dans de nombreuses applications:

Site Internet
Application Mobile
Progiciel
Application Flash
&#8230;

Il est donc très intéressant de penser à stocker ses données ou les exporter si celles-ci sont préalablement stockées dans une base de données, dans ce format là.
Mais les données sont alors brutes, sans mise en page particulière. C&#8217;est ici qu&#8217;intervient [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2010/01/xml.jpg"><img class="size-full wp-image-433 aligncenter" title="XML: Apprendre les feuilles de style XSL" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2010/01/xml.jpg" alt="" width="542" height="119" /></a></p>
<p>Le <strong>XML </strong>est un format très répandu, utilisable dans de nombreuses applications:</p>
<ul>
<li>Site Internet</li>
<li>Application Mobile</li>
<li>Progiciel</li>
<li>Application Flash</li>
<li>&#8230;</li>
</ul>
<p>Il est donc très intéressant de penser à stocker ses données ou les exporter si celles-ci sont préalablement stockées dans une base de données, dans ce format là.</p>
<p>Mais les données sont alors brutes, sans mise en page particulière. C&#8217;est ici qu&#8217;intervient <strong><acronym title="Extensible Stylesheet Language (Transformations)">XSL(T)</acronym></strong>.</p>
<p class="btns_action"><a class="btn_tut btn_demo" href="http://tuts.guillaumevoisin.fr/xml/resume.xml" target="_blank">DEMO</a> <a class="btn_tut btn_download" href="http://tuts.guillaumevoisin.fr/xml/resume_xml.zip">DOWNLOAD</a></p>
<p><span id="more-431"></span>XSL(T) est un <strong>langage de transformation XML</strong> qui permet d&#8217;<strong>extraire </strong>les informations contenues dans un fichier XML, soit de manière graphique (vers un affichage HTML le plus souvent) soit de manière texte ou binaire (pour des utilisations tierces).</p>
<p>Nous allons donc voir dans ce tutoriel comment réaliser une page web simple à partir d&#8217;un document XML en s&#8217;appuyant sur une feuille de style XSL. Nous allons créer un CV en ligne.</p>
<h2>Création du fichier XML</h2>
<p>Tout d&#8217;abord, nous allons créer un fichier XML simple <em><strong>resume.xml</strong></em> avec le contenu suivant :</p>
<pre class="brush: xml;">
&lt; ?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt; ?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;resume.xsl&quot;?&gt;
&lt;resume&gt;

	&lt;title&gt;Spy&lt;/title&gt;

	&lt;identity&gt;
		&lt;firstname&gt;John&lt;/firstname&gt;
		&lt;lastname&gt;Doe&lt;/lastname&gt;
		&lt;address&gt;
			&lt;street&gt;7, Lombard Street&lt;/street&gt;
			&lt;zip&gt;90210&lt;/zip&gt;
			&lt;city&gt;Los Angeles&lt;/city&gt;
		&lt;/address&gt;
	&lt;/identity&gt;

	&lt;educations&gt;

		&lt;education from=&quot;2003&quot; to=&quot;2005&quot;&gt;
			&lt;school&gt;Université UCLA&lt;/school&gt;
			&lt;degree&gt;Diplôme d'ingénieur en informatique&lt;/degree&gt;
		&lt;/education&gt;

		&lt;education from=&quot;2005&quot; to=&quot;2008&quot;&gt;
			&lt;school&gt;Université de Boston&lt;/school&gt;
			&lt;degree&gt;License de marketing&lt;/degree&gt;
		&lt;/education&gt;

	&lt;/educations&gt;

&lt;/resume&gt;
</pre>
<p>Pour plus d&#8217;informations concernant la création  de documents XML, suivez ce lien: <a href="http://www.commentcamarche.net/contents/xml/xmlstruc.php3" target="_blank">Création de document XML</a>.</p>
<p>Nous avons défini dans ce document différents <strong><em>noeuds</em> </strong>XML:</p>
<ul>
<li><strong>&lt;resume&gt;</strong> correspond à la racine du document</li>
<li><strong>&lt;identity&gt;</strong> reprend les informations générales sur la personne</li>
<li><strong>&lt;educations&gt;</strong> correspond aux différentes formations suivies</li>
</ul>
<p>Vous avez sans doute remarqué la ligne :</p>
<pre class="brush: xml;">
&lt; ?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;resume.xsl&quot;?&gt;
</pre>
<p>Celle-ci permet de lier le document XML à une feuille de style XSL(T).</p>
<h2>Création de la feuille de style XSL(T)</h2>
<p>Nous allons donc créer un fichier <em><strong>resume.xsl</strong></em> et renseigner le type de document dont il s&#8217;agit ainsi que du format d&#8217;encodage :</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
</pre>
<p>Ensuite, nous allons informer le navigateur que nous utilisons une feuille de style XSL</p>
<pre class="brush: xml;">
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;/xsl:stylesheet&gt;
</pre>
<p>Cette balise fonctionne comme la balise &laquo;&nbsp;html&nbsp;&raquo;, elle encadre tout le contenu que l&#8217;on va mettre dans le fichier.</p>
<p>De la même façon que l&#8217;on définir une <strong>doctype </strong>pour un fichier <strong>XHTML</strong>, ici nous pouvons définir une doctype pour notre feuille de style :</p>
<pre class="brush: xml;">
&lt;xsl:output doctype-public=&quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; doctype-system=&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;/&gt;
</pre>
<p>Maintenant, nous pouvons commencer la transformation/extraction des données XML pour l&#8217;afficher en XHTML !</p>
<h2>Transformation</h2>
<p>Nous allons donc commencer à extraire les données du document XML. Pour cela, nous définissons un noeud <em><strong>template </strong></em>:</p>
<pre class="brush: xml;">
&lt;xsl:template match=&quot;/&quot;&gt;

&lt;/xsl:template&gt;
</pre>
<p>L&#8217;attribut <strong><em>match</em> </strong>indique que la transformation s&#8217;applique à partir de la racine du document XML.</p>
<p>Nous pouvons ensuite ajouter un peu de <em>markup </em>pour habiller la page.</p>
<h3>Extraction de valeur</h3>
<pre class="brush: xml;">
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;&lt;xsl:value-of select=&quot;resume/title&quot;/&gt;&lt;/title&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot;/&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div class=&quot;resume&quot;&gt;
</pre>
<p>Nous avons extrait le titre de la page à partir du fichier XML via la balise  <strong><em>&lt;xsl:value-of&gt;</em></strong> dont on précise le noeud à partir duquel il doit récupérer l&#8217;information <em><strong>select=&nbsp;&raquo;resume/title&nbsp;&raquo;</strong></em>.</p>
<p>Il est important de toujours préciser le chemin vers la balise concernée depuis la racine du document <em><strong>resume/</strong></em>.</p>
<pre class="brush: xml;">
&lt;h2&gt;&lt;xsl:value-of select=&quot;resume/identity/firstname&quot; /&gt; &lt;xsl:value-of select=&quot;resume/identity/lastname&quot; /&gt;&lt;/h2&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;resume/identity/address/street&quot; /&gt;, &lt;xsl:value-of select=&quot;resume/identity/address/zip&quot; /&gt;, &lt;xsl:value-of select=&quot;resume/identity/address/city&quot; /&gt;&lt;/p&gt;
</pre>
<h3>Boucles</h3>
<p>Il est possible d&#8217;utiliser des <strong>boucles </strong>en XLS(T). Dans notre exemple, pour afficher les différentes formations, il nous faut <strong>parcourir </strong>les noeuds contenus dans <em><strong>&lt;educations&gt;</strong></em>.</p>
<p>On peut donc pour ça utiliser la syntaxe suivante :</p>
<pre class="brush: xml;">
&lt;xsl:for-each select=&quot;resume/educations/education&quot;&gt;

&lt;/xsl:for-each&gt;
</pre>
<p>Comme toujours, l&#8217;attribut select permet de <strong>cibler </strong>le noeud qui nous intéresse. Ici, nous allons itérer sur le noeud <em><strong>&lt;education&gt;</strong></em>.</p>
<h3>Tri</h3>
<p>Nous pouvons également trier selon un attribut grâce à la commande suivante :</p>
<pre class="brush: xml;">
&lt;xsl:sort select=&quot;@from&quot; data-type=&quot;number&quot; order=&quot;descending&quot;/&gt;
</pre>
<p>L&#8217;attribut &lt;<em><strong>select&gt;</strong></em> permet de sélectionner le paramètre de tri, qui est dans notre cas l&#8217;attribut &laquo;&nbsp;from&nbsp;&raquo;. On définit que ce paramètre est un nombre <em><strong>data-type=&nbsp;&raquo;number&nbsp;&raquo;</strong></em> et que l&#8217;on tri de manière décroissante <em><strong>order=&nbsp;&raquo;descending&nbsp;&raquo;</strong></em>.</p>
<h3>Conditions</h3>
<p>Il est possible de faire des tests conditionnels grâce à la méthode <em><strong>&lt;xsl:choose&gt;</strong></em>.</p>
<pre class="brush: xml;">
&lt;xsl:choose&gt;

	&lt;xsl:when test=&quot;position() mod 2 = 0&quot;&gt;
		&lt;li class=&quot;even&quot;&gt;From &lt;xsl:value-of select=&quot;@from&quot;/&gt; to &lt;xsl:value-of select=&quot;@to&quot;/&gt;, &lt;xsl:value-of select=&quot;school&quot;/&gt;, &lt;xsl:value-of select=&quot;degree&quot;/&gt;&lt;/li&gt;
	&lt;/xsl:when&gt;

	&lt;xsl:otherwise&gt;
		&lt;li class=&quot;odd&quot;&gt;From &lt;xsl:value-of select=&quot;@from&quot;/&gt; to &lt;xsl:value-of select=&quot;@to&quot;/&gt;, &lt;xsl:value-of select=&quot;school&quot;/&gt;, &lt;xsl:value-of select=&quot;degree&quot;/&gt;&lt;/li&gt;
	&lt;/xsl:otherwise&gt;

&lt;/xsl:choose&gt;
</pre>
<p>L&#8217;équivalent XSL(T) du <em><strong>if() else()</strong></em> est donc <em><strong>&lt;xsl:when&gt; &lt;xsl:otherwise&gt;</strong></em>.</p>
<p>Ici, nous voulons simplement zébrer la liste des formations, grâce au test modulaire <em><strong>position() mod 2 = 0</strong></em> qui renvoit 0 ou 1.</p>
<h2>Conclusion</h2>
<p>Et voilà, notre fichier XML et sa feuille de style sont prêts !</p>
<p>C&#8217;est ici pour la <a href="http://www.guillaumevoisin.fr/tuts/xml/resume.xml" target="_blank">demo</a> ou ici pour les <a href="http://www.guillaumevoisin.fr/tuts/xml/resume_xml.zip">sources</a>.</p>
<h2>Aller plus loin</h2>
<ul>
<li><a href="http://www.w3.org/TR/xslt" target="_blank">Documentation officielle du W3C</a></li>
<li><a href="http://www.w3schools.com/xsl/" target="_blank">Tutoriel W3Schools</a></li>
<li><a href="http://www.commentcamarche.net/contents/xml/xmlxslt.php3" target="_blank">XSL: Comment ça marche ?</a></li>
<li><a href="http://haypo.developpez.com/tutoriel/xml/xslt/" target="_blank">Introduction à XSLT sur developpez.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-apprendre-les-feuilles-de-style-xslt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel: Réaliser un diaporama simple avec JQuery</title>
		<link>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-realiser-un-diaporama-simple-avec-jquery</link>
		<comments>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-realiser-un-diaporama-simple-avec-jquery#comments</comments>
		<pubDate>Thu, 29 Oct 2009 13:59:10 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[diaporama]]></category>
		<category><![CDATA[plugin jquery]]></category>
		<category><![CDATA[tutoriel jquery]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=393</guid>
		<description><![CDATA[JQuery est devenu rapidement un framework de développement javascript indispensable, très pratique que ce soit pour développer de simples fonctionnalités ou des sites complets.
Souvent, lors de la création d&#8217;un site internet, on rencontre les mêmes fonctionnalités de base (des rollover sur les images, un menu déroulant, un diaporama &#8230;), et pour chacun d&#8217;entre eux, il [...]]]></description>
			<content:encoded><![CDATA[<p>JQuery est devenu rapidement un framework de développement javascript indispensable, très pratique que ce soit pour développer de simples fonctionnalités ou des sites complets.</p>
<p>Souvent, lors de la création d&#8217;un site internet, on rencontre les <strong>mêmes fonctionnalités de base</strong> (des rollover sur les images, un menu déroulant, un diaporama &#8230;), et pour chacun d&#8217;entre eux, il existe quasiment un plugin JQuery qui répond à ces attentes.</p>
<p>Il peut être également utile de <strong>développer un plugin</strong> pour une <strong>fonctionnalité simple</strong> mais à laquelle on se trouve souvent confronté et dont on veut <strong>maîtriser le fonctionnement</strong>.</p>
<p>Mon premier tutoriel s&#8217;articulera donc autour de la mise en place d&#8217;un plugin JQuery simple: un <strong>diaporama Photo</strong>.</p>
<p style="text-align: center;"><img class="size-full wp-image-424 aligncenter" title="Diaporama simple avec JQuery" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/10/diaporama1.jpg" alt="Diaporama simple avec JQuery" width="500" height="273" /></p>
<p class="btns_action"><a class="btn_tut btn_demo" href="http://tuts.guillaumevoisin.fr/jquery/diaporama/" target="_blank">DEMO</a> <a class="btn_tut btn_download" href="http://tuts.guillaumevoisin.fr/jquery/diaporama/jquery.diaporama.zip">DOWNLOAD</a></p>
<p><span id="more-393"></span></p>
<h2>Introduction</h2>
<p>Nous allons donc réaliser un diaporama de photos. Le principe étant que les photos défilent les unes après les autres avec une transition par fondu enchaîné. Nous allons aussi ajouter des boutons de contrôle pour mettre en pause le diaporama, accéder à la photo suivante ou précédente.</p>
<h2>Première étape: partie HTML</h2>
<p>Avant tout, il convient d&#8217;inclure la librairie JQuery dans notre page de test. Vous pouvez la trouver ici : <a title="Librairie JQuery" href="http://docs.jquery.com/Downloading_jQuery#Download_jQuery">Librairie JQuery</a></p>
<p>Ensuite, nous allons écrire une page HTML simple avec une liste de photos.</p>
<pre class="brush: xml;">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;fr&quot; lang=&quot;fr&quot;&gt;
	&lt;head&gt;
		&lt;title&gt;Diaporama Simple JQuery&lt;/title&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

		&lt;!-- Cascading Style Sheets --&gt;
		&lt;link href=&quot;page.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
		&lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;

		&lt;!-- Javascript --&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.diaporama.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/script.js&quot;&gt;&lt;/script&gt;
	&lt;/head&gt;

	&lt;body&gt;

		&lt;h1&gt;Diaporama Simple&lt;/h1&gt;

		&lt;ul class=&quot;diaporama&quot;&gt;
			&lt;li&gt;&lt;img src=&quot;img/galerie/image1.jpg&quot; alt=&quot;Image 1&quot; /&gt;&lt;/li&gt;
			&lt;li&gt;&lt;img src=&quot;img/galerie/image2.jpg&quot; alt=&quot;Image 2&quot; /&gt;&lt;/li&gt;
			&lt;li&gt;&lt;img src=&quot;img/galerie/image3.jpg&quot; alt=&quot;Image 3&quot; /&gt;&lt;/li&gt;
			&lt;li&gt;&lt;img src=&quot;img/galerie/image4.jpg&quot; alt=&quot;Image 4&quot; /&gt;&lt;/li&gt;
			&lt;li&gt;&lt;img src=&quot;img/galerie/image5.jpg&quot; alt=&quot;Image 5&quot; /&gt;&lt;/li&gt;
		&lt;/ul&gt;

	&lt;/body&gt;

&lt;/html&gt;
</pre>
<h2>Deuxième étape: partie CSS</h2>
<p>Le principe de base du diaporama est de superposer les images pour ensuite les faire défiler. Nous allons donc créer une feuille de style avec les propriétés suivantes :</p>
<pre class="brush: css;">
.diaporama{
	position:relative;
	width:512px; /* Largeur d'une photo */
	height:288px /* Hauteur d'une photo */
}

.diaporama li{
	list-style-type:none;
	overflow:hidden;
	position:absolute /* Les images seront positionnées toutes au même endroit */
}

.diaporama_controls{
	width:512px;
	margin:3px 0;
	padding:5px;
	clear:both;
	overflow:hidden;
}

.diaporama_controls .btns{
	float:right;
}

.diaporama_controls a{
	font-weight:normal;
	width:10px;
	height:13px;
	text-indent:-9999px;
	display:inline-block;
	margin:0 3px;
}

.diaporama_controls .prev{
	background:url(img/fleches_diapo.png) no-repeat top right;
}

.diaporama_controls .next{
	background:url(img/fleches_diapo.png) no-repeat top left;
}

.diaporama_controls .pause{
	background:url(img/fleches_diapo.png) no-repeat bottom right;
}

.diaporama_controls .play{
	background:url(img/fleches_diapo.png) no-repeat bottom left;
}
</pre>
<p>Je ne détaillerai pas le contenu de la feuille de style page.css, celle-ci n&#8217;est utilisée que pour la mise en page de l&#8217;index.html.</p>
<p>Voici le résultat que nous avons pour l&#8217;instant :</p>
<p><img class="size-full wp-image-402 alignnone" title="Diaporama simple avec JQuery" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/10/diaporama.jpg" alt="Diaporama simple avec JQuery" width="548" height="378" /></p>
<h2>Troisième étape: partie JQuery</h2>
<p>Nous allons avoir deux fichiers javascript :</p>
<ol>
<li>Notre fichier plugin <em>&laquo;&nbsp;<strong>jquery.diaporama.js</strong>&laquo;&nbsp;</em></li>
<li>Un fichier de script, pour exécuter le diaporama <em>&laquo;&nbsp;<strong>script.js</strong>&laquo;&nbsp;</em></li>
</ol>
<h3>Instanciation du plugin Diaporama</h3>
<p>La fonction Diaporama doit être appelée dans la page html, au chargement de la page, au moyen de la fonction JQuery <em>$(document).ready()</em></p>
<p>Cet appel sera effectué depuis le fichier script.js :</p>
<pre class="brush: jscript;">
$(document).ready(function(){

	$(&quot;.diaporama&quot;).diaporama({
		animationSpeed: &quot;slow&quot;,
		delay:2
	});

});
</pre>
<p>On va éxécuter la fonction diaporama sur tous les éléments qui ont une classe &laquo;&nbsp;diaporama&nbsp;&raquo;.</p>
<h3>Structure du plugin</h3>
<pre class="brush: jscript;">
(function($){ // 1
	$.fn.diaporama = function(options) {

		// 2 Appliquer le diaporama sur chacun des éléments ciblés
		this.each(function(){

		});

		return this;  // 3 Continuer le chainage JQuery
	};
})(jQuery);
</pre>
<p>Voici la structure de base d&#8217;un plugin JQuery :</p>
<ol>
<li>On utilise function($) pour <strong>explicitement dire</strong> qu&#8217;on va utiliser l&#8217;alias &laquo;&nbsp;$&nbsp;&raquo; dans notre fonction</li>
<li>La fonction diaporama va être appelée sur un élément ou un ensemble d&#8217;éléments. Il convient donc d&#8217;éxécuter pour <strong>chacun des éléments rencontrés</strong> la fonction diaporama</li>
<li>Le chaînage permet de continuer d&#8217;appliquer des fonctions à notre sélecteur, par exemple, $(&laquo;&nbsp;.diaporama&nbsp;&raquo;).diaporama().show.fadeOut() &#8230;</li>
</ol>
<h3>Paramètres</h3>
<p>Nous allons utiliser différents paramètres pour notre diaporama :</p>
<ol>
<li><strong>delay</strong>: le délai de balayage des images</li>
<li><strong>animationSpeed</strong>: la durée de l&#8217;effet de transition</li>
<li><strong>controls</strong>: affichage des boutons de contrôle</li>
</ol>
<p>Cela va se traduire dans notre script par :</p>
<pre class="brush: jscript;">
var defaults = {
	delay: 3,
	animationSpeed: &quot;normal&quot;,
	controls:true
};

var options = $.extend(defaults, options);  // 1
</pre>
<ol>
<li><strong>$.extend</strong> est une fonction JQuery qui permet de créer une variable <strong><em>options </em></strong>à partir, soit de la variable <strong><em>defaults</em></strong>, soit des paramètres spécifiés dans l&#8217;appel de la fonction <strong><em>$.fn.diaporama = function(options)<br />
</em></strong>De ce fait, les paramètres non spécifiés dans l&#8217;appel du plugin seront ceux par défaut.</li>
</ol>
<h3>Initialisation</h3>
<p>On va maintenant initialiser le diaporama:</p>
<ol>
<li>Vérifier que la liste contient au moins deux photos</li>
<li>Initialiser nos variables</li>
<li>Lancer la mécanique de rotation d&#8217;images</li>
</ol>
<pre class="brush: jscript;">
// On attribue à la variable obj, l'objet courant (le diaporama courant)
var obj = $(this);

// On teste si il y a plus d'une image, sinon le diaporama n'est pas nécessaire
if($(obj).find(&quot;li&quot;).length &gt; 1){

	// On va exécuter la fonction nextElt à chaque intervalle de temps
	var inter = setInterval(function(){nextElt(options)}, (options.delay*1000));

	// On enregistre le sens de rotation
	var sens = &quot;right&quot;;

	// Par défaut, le diaporama n'est pas en pause
	var pause = false;

	// On cache tous les éléments de la liste
	$(obj).find(&quot;li&quot;).hide();

	// Le premier élément s'affiche progressivement et se voit attribuer la classe &quot;active&quot;
	$(obj).find(&quot;li:first-child&quot;).addClass(&quot;active&quot;).fadeIn(options.animationSpeed);
}
</pre>
<p>Si le paramètre <strong><em>controls </em></strong>est défini à <strong><em>true</em></strong>, alors on ajoute les boutons de contrôle:</p>
<pre class="brush: jscript;">
// On veut ajouter des boutons de contrôle
if(options.controls)
{
	// On insère après la liste un &lt;div&gt; contenant les boutons &quot;précédent&quot;, &quot;suivant&quot; et &quot;pause&quot;
	$(obj).after(&quot;&lt;div class='diaporama_controls'&gt;&lt;div class='btns'&gt;&lt;a href='#' class='prev'&gt;Prec.&lt;/a&gt; &lt;a href='#' class='pause'&gt;Pause&lt;/a&gt; &lt;a href='#' class='next'&gt;Suiv.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&quot;);

	// On définit l'action click pour le bouton &quot;précédent&quot;
	// La méthode siblings() permet de trouver les éléments &quot;frères&quot; de l'élément courant
	$(obj).siblings().find(&quot;.prev&quot;).click(function(){
		// On supprime l'intervalle automatique de transition d'image
		clearInterval(inter);

		// On appelle la fonction qui affiche l'image précédente
		prevElt(options);

		// Si le diaporama n'est pas sur pause, on relance l'affichage automatique
		if(!pause)
			inter = setInterval(function(){prevElt(options)}, (options.delay*1000));

		// On définit le sens à gauche
		sens = &quot;left&quot;;
	});

	// On applique la même méthode ou presque au bouton &quot;suivant&quot; (dans l'autre sens)
	$(obj).siblings().find(&quot;.next&quot;).click(function(){
		clearInterval(inter);
		nextElt(options);
		if(!pause)
			inter = setInterval(function(){nextElt(options)}, (options.delay*1000));
		sens = &quot;right&quot;;
	});

	// Si on appuie sur &quot;pause&quot;, on définit deux actions
	$(obj).siblings().find(&quot;.pause&quot;).toggle(

		// On change l'image de fond du bouton via la classe &quot;play&quot;
		function(){
			$(this).removeClass(&quot;pause&quot;).addClass(&quot;play&quot;);

			// On supprime l'intervalle
			clearInterval(inter);

			// On positionne le booléen à true
			pause = true;
		},
		function(){

			// On remet l'image originale
			$(this).removeClass(&quot;play&quot;).addClass(&quot;pause&quot;);

			// On relance le diaporama dans le sens où il était
			inter = setInterval(function(){ (sens == &quot;right&quot;)?nextElt(options):prevElt(options)}, (options.delay*1000));
			pause = false;
		}
	);
}
</pre>
<p>Ensuite, nous allons développer la fonction qui permet de passer à l&#8217;image suivante:</p>
<pre class="brush: jscript;">
function nextElt(options)
{
	// On cache de manière progressive l'image active
	$(obj).find(&quot;li.active&quot;).fadeOut(options.animationSpeed);

	// Si l'image active courante n'est pas la dernière image de la liste
	if(!$(obj).find(&quot;li.active&quot;).is(&quot;:last-child&quot;))
	{
		// Alors on cherche l'image suivante (&quot;.next()&quot;), on lui ajoute la class &quot;active&quot;,
		// et on retire cette classe à l'image précedente (l'ancienne image active)
		$(obj).find(&quot;li.active&quot;).next().addClass(&quot;active&quot;).prev().removeClass(&quot;active&quot;);

		// On affiche la nouvelle image active progressivement
		$(obj).find(&quot;li.active&quot;).fadeIn(options.animationSpeed);
	}
	// L'image est la dernière de la liste
	else
	{
		// On fait la même chose mais en prenant la première image de la liste via le sélecteur &quot;first-child&quot;
		$(obj).find(&quot;li:first-child&quot;).addClass(&quot;active&quot;).fadeIn(options.animationSpeed);
		$(obj).find(&quot;li:last-child&quot;).removeClass(&quot;active&quot;);
	}
}
</pre>
<h2>Script final</h2>
<p>Et voilà, nous avons à présent tous les éléments dont nous avons besoin pour que le diaporama fonctionne.</p>
<p>Voici le script final diaporama.js :</p>
<pre class="brush: jscript;">
(function($){
	$.fn.diaporama = function(options) {

		var defaults = {
			delay: 3,
			animationSpeed: &quot;normal&quot;,
			controls:true
		};

		var options = $.extend(defaults, options);

		this.each(function(){

			var obj = $(this);

			if($(obj).find(&quot;li&quot;).length &gt; 1){
				var inter = setInterval(function(){nextElt(options)}, (options.delay*1000));
				var sens = &quot;right&quot;;
				var pause = false;

				$(obj).find(&quot;li&quot;).hide();
				$(obj).find(&quot;li:first-child&quot;).addClass(&quot;active&quot;).fadeIn(options.animationSpeed);

				// Controls

				if(options.controls)
				{
					$(obj).after(&quot;&lt;div class='diaporama_controls'&gt;&lt;div class='btns'&gt;&lt;a href='#' class='prev'&gt;Prec.&lt;/a&gt; &lt;a href='#' class='pause'&gt;Pause&lt;/a&gt; &lt;a href='#' class='next'&gt;Suiv.&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&quot;);

					$(obj).siblings().find(&quot;.prev&quot;).click(function(){
						clearInterval(inter);
						prevElt(options);
						if(!pause)
							inter = setInterval(function(){prevElt(options)}, (options.delay*1000));
						sens = &quot;left&quot;;
					});

					$(obj).siblings().find(&quot;.next&quot;).click(function(){
						clearInterval(inter);
						nextElt(options);
						if(!pause)
							inter = setInterval(function(){nextElt(options)}, (options.delay*1000));
						sens = &quot;right&quot;;
					});

					$(obj).siblings().find(&quot;.pause&quot;).toggle(
						function(){
							$(this).removeClass(&quot;pause&quot;).addClass(&quot;play&quot;);
							clearInterval(inter);
							pause = true;
						},
						function(){
							$(this).removeClass(&quot;play&quot;).addClass(&quot;pause&quot;);
							inter = setInterval(function(){ (sens == &quot;right&quot;)?nextElt(options):prevElt(options)}, (options.delay*1000));
							pause = false;
						}
					);
				}

				// Affiche l'élément suivant

				function nextElt(options)
				{
					$(obj).find(&quot;li.active&quot;).fadeOut(options.animationSpeed);

					if(!$(obj).find(&quot;li.active&quot;).is(&quot;:last-child&quot;))
					{
						$(obj).find(&quot;li.active&quot;).next().addClass(&quot;active&quot;).prev().removeClass(&quot;active&quot;);
						$(obj).find(&quot;li.active&quot;).fadeIn(options.animationSpeed);

					}
					else
					{
						$(obj).find(&quot;li:first-child&quot;).addClass(&quot;active&quot;).fadeIn(options.animationSpeed);
						$(obj).find(&quot;li:last-child&quot;).removeClass(&quot;active&quot;);
					}
				}

				// Affiche l'élément précédent

				function prevElt(options)
				{
					$(obj).find(&quot;li.active&quot;).fadeOut(options.animationSpeed);

					if(!$(obj).find(&quot;li.active&quot;).is(&quot;:first-child&quot;))
					{
						$(obj).find(&quot;li.active&quot;).prev().addClass(&quot;active&quot;).next().removeClass(&quot;active&quot;);
						$(obj).find(&quot;li.active&quot;).fadeIn(options.animationSpeed);

					}
					else
					{
						$(obj).find(&quot;li:last-child&quot;).addClass(&quot;active&quot;).fadeIn(options.animationSpeed);
						$(obj).find(&quot;li:first-child&quot;).removeClass(&quot;active&quot;);
					}
				}
			}
		});

		return this;
	};
})(jQuery);
</pre>
<h2>Téléchargements et Démo</h2>
<p>La démo est <a title="Diaporama simple avec Jquery" href="http://tuts.guillaumevoisin.fr/jquery/diaporama/" target="_self">disponible ici</a>.</p>
<p>Les fichiers sources : <a href="http://tuts.guillaumevoisin.fr/jquery/diaporama/jquery.diaporama.zip">télécharger les fichiers sources de l&#8217;example</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/developpement/tutoriel-realiser-un-diaporama-simple-avec-jquery/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Le CSS Orienté Objet</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/le-css-oriente-objet</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/le-css-oriente-objet#comments</comments>
		<pubDate>Thu, 24 Sep 2009 10:09:58 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[classes CSS]]></category>
		<category><![CDATA[CSS Orienté Objet]]></category>
		<category><![CDATA[héritage]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[structure]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=348</guid>
		<description><![CDATA[La Programmation Orientée Objet est un concept qui a fait ses preuves dans la conception de sites internet. En effet, elle permet d&#8217;avoir un code structuré, facilement réutilisable et dont la mise à jour est rapide et aisée.
Pourquoi ne pas l&#8217;adapter au CSS ?
A priori, le CSS n&#8217;a pas grand chose à voir avec de [...]]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet">Programmation Orientée Objet</a> est un <strong>concept qui a fait ses preuves</strong> dans la conception de sites internet. En effet, elle permet d&#8217;avoir un code <strong>structuré</strong>, <strong>facilement réutilisable et dont la mise à jour est rapide et aisée</strong>.</p>
<h2>Pourquoi ne pas l&#8217;adapter au CSS ?</h2>
<p>A priori, le CSS n&#8217;a pas grand chose à voir avec de la <acronym title="Programmation Orientée Objet">POO</acronym>. Pourtant, à y regarder de plus près, on y retrouve des concepts bien familiers:</p>
<ul>
<li>Système de Classes</li>
<li>Propriétés</li>
<li>Héritage</li>
</ul>
<p><span id="more-348"></span></p>
<h2>Comment l&#8217;appliquer au CSS</h2>
<h3>Les classes CSS</h3>
<p>Plutôt que d&#8217;attribuer à chaque élément de mise en page une classe CSS dont les propriétés sont <strong>spécifiques </strong>à cet élément précis, on peut tout à fait prévoir de créer des <strong>classes génériques</strong> que l&#8217;on utilisera au besoin selon la mise en page souhaitée.</p>
<p><span style="color: #ff6600;">Exemple ci-dessous d&#8217;une mise en page dite &laquo;&nbsp;spécifique&nbsp;&raquo;:</span></p>
<p><em>index.html</em></p>
<pre class="brush: xml;">
&lt;div class=&quot;photo&quot;&gt;
  &lt;p&gt;Une photo: &lt;img src=&quot;maphoto.jpg&quot; alt=&quot;Ma Photo&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>
<p><em>style.css</em></p>
<pre class="brush: css;">
.photo{
    float:left;
    font-style:italic;
    font-weight:bold;
    width:50%
}
</pre>
<p>Il est évident que le code CSS ci-dessous est <strong>exclusivement réservé</strong> à cet élément &laquo;&nbsp;photo&nbsp;&raquo;. Pour des éléments quasi <strong>similaires </strong>(correspondance de deux voire trois propriétés), le code CSS devient <strong>redondant</strong>, ce qui implique un <strong>alourdissement du poids </strong>de la feuille de style et la nécessité de passer dans chacune des classes concernées lors de mises à jour.</p>
<p><span style="color: #ff6600;">Exemple ci-dessous d&#8217;une mise en page dite &laquo;&nbsp;orientée objet&nbsp;&raquo;</span></p>
<p><em>index.html</em></p>
<pre class="brush: xml;">
&lt;div class=&quot;floatleft strong italic half&quot;&gt;
  &lt;p&gt;Une photo: &lt;img src=&quot;maphoto.jpg&quot; alt=&quot;Ma Photo&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
</pre>
<p><em>style.css</em></p>
<pre class="brush: css;">
.floatleft{
    float:left
}

.strong{
    font-weight:bold
}

.italic{
    font-style:italic
}

.half{
    width:50%
}
</pre>
<p>Ici au contraire, le code est:</p>
<ul>
<li>&laquo;&nbsp;générique&nbsp;&raquo;,</li>
<li>réutilisable sur d&#8217;autres éléments,</li>
<li>compréhensible,</li>
<li>explicite,</li>
<li>n&#8217;alourdit pas la feuille de style (seulement un peu l&#8217;index.html vous me direz &#8230;)</li>
</ul>
<p>La nomenclature des classes CSS est importante et doit être bien écrite pour être réutilisable. Ainsi, il ne faut pas écrire:</p>
<pre class="brush: css;">
p.chapeau span.lettrine{
    font-size:2.5em
}
</pre>
<p>Mais</p>
<pre class="brush: css;">
.chapeau .lettrine{
    font-size:2.5em
}
</pre>
<p>De cette façon, vous pouvez changer à souhait le code xhtml mais aussi utiliser ces classes sur d&#8217;autres éléments.</p>
<h3>L&#8217;héritage</h3>
<p>Quoique vous fassiez, vous l&#8217;utilisez. A partir du moment où vous définissez un <strong>sous ensemble</strong>, c&#8217;est de l&#8217;héritage. Par exemple :</p>
<pre class="brush: css;">
.mondiv .header p{
    margin:0 10px
}
</pre>
<p>Après, il convient de l&#8217;utiliser à bon escient.</p>
<p>Trop de détails encombre la feuille de style et oblige à redéfinir les propriétés par la suite.</p>
<p>Ainsi:</p>
<pre class="brush: css;">
#header #bandeau .top ul li a{
    text-decoration:underline
}
</pre>
<p>peut se réduire à :</p>
<pre class="brush: css;">
#header .top li a{
    text-decoration:underline
}
</pre>
<p>De manière générale, il est plus intéressant d&#8217;appliquer des styles par héritage que par définition de classes. De cette manière, il est plus simple de changer la structure sans devoir repasser sur chacun des éléments afin d&#8217;y changer la classe.</p>
<p>Exemple:</p>
<pre class="brush: xml;">
&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;p class=&quot;itemlist&quot;&gt;Item 1&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p class=&quot;itemlist&quot;&gt;Item 2&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>Avec comme feuille de style:</p>
<pre class="brush: css;">
.itemlist{
    padding:5px
}
</pre>
<p>peut être remplacé par:</p>
<pre class="brush: xml;">
&lt;div class=&quot;list&quot;&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;p&gt;Item 1&lt;/p&gt;&lt;/li&gt;
    &lt;li&gt;&lt;p&gt;Item 2&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>et</p>
<pre class="brush: css;">
.list li p{
    padding:5px
}
</pre>
<p>Enfin, sachez qu&#8217;en utilisant trop d&#8217;héritage vous pourriez rencontrer des problèmes de redéfinition de classe.</p>
<p>En effet, mettons que vous avez cette classe dans votre page principale:</p>
<pre class="brush: css;">
#content .header p{
    color:blue
}
</pre>
<p>Et que vous voulez qu&#8217;en règle générale tous les paragraphes du &laquo;&nbsp;header&nbsp;&raquo; soient de couleur rouge. Vous écririez logiquement :</p>
<pre class="brush: css;">
.header p{
    color:red
}
</pre>
<p>Eh bien, malheureusement, cette dernière propriété ne sera pas prise en compte car la définition précédente à l&#8217;aide d&#8217;un <strong>identifiant </strong>est <strong>prioritaire </strong>par rapport à la définition par la <strong>classe</strong>.</p>
<p>Vous pourriez toutefois ruser en écrivant :</p>
<pre class="brush: css;">
.header p{
    color:red !important /* Prend le pas sur toutes les définitions */
}
</pre>
<p>Mais ce n&#8217;est pas du joli joli !</p>
<h2>Conclusion</h2>
<p>Voici donc un aperçu du <strong>CSS Orienté Objet</strong>, une façon simple, logique et structurée d&#8217;améliorer votre intrégration xHTML, qui vous fera gagner du temps précieux, et rendra votre code nettement plus lisible et réutilisable !</p>
<h2>Aller plus loin &#8230;</h2>
<ul>
<li><a href="http://www.exotux.info/index.php?post/2009/03/01/OO-CSS-ou-CSS-orient%C3%A9-objet" target="_blank">Présentation du concept de CSS Orienté Objet</a></li>
<li><a href="http://www.alsacreations.com/tuto/lire/545-Comprendre-l-heritage-et-la-parente-des-styles-CSS.html" target="_blank">Comprendre l&#8217;héritage CSS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/le-css-oriente-objet/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Les iPhones gagnent du terrain sur le web !</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/les-iphones-gagnent-du-terrain-sur-le-web</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/les-iphones-gagnent-du-terrain-sur-le-web#comments</comments>
		<pubDate>Thu, 17 Sep 2009 12:58:32 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[affichage]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[fréquentation]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[téléphone portable]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=330</guid>
		<description><![CDATA[Qui aujourd&#8217;hui ne peut pas se connecter à Internet depuis son téléphone ?! L&#8217;offre est devenue presque &#171;&#160;basique&#160;&#187;. Les portables sont très performants, ergonomiques et disposent de grands écrans, seul le forfait adapté peut faire plancher le consommateur.

Source: AT Internet Institute
Il n&#8217;est donc pas surprenant de voir que la fréquentation des sites internet (du moins [...]]]></description>
			<content:encoded><![CDATA[<p>Qui aujourd&#8217;hui ne peut pas se connecter à Internet depuis son téléphone ?! L&#8217;offre est devenue presque &laquo;&nbsp;basique&nbsp;&raquo;. Les portables sont très <strong>performants</strong>, <strong>ergonomiques </strong>et disposent de <strong>grands écrans</strong>, seul le forfait adapté peut faire plancher le consommateur.</p>
<p style="text-align: center;"><img class="aligncenter" title="Part de marché des téléphones portables en consultation internet" src="http://www.atinternet-institute.com/Images/etudes/fr-FR/OS-200909-4.png" alt="" width="542" height="338" /></p>
<p><small>Source: <a href="http://www.xitimonitor.com/fr-fr/equipement-internaute/systemes-d-exploitation-aout-2009/index-1-1-7-176.html?xtor=11">AT Internet Institute</a></small></p>
<p><img class="alignleft" title="iPhone" src="http://www.meilleurtarif.fr/wp-content/uploads/2009/03/iphone.jpg" alt="" width="121" height="144" />Il n&#8217;est donc pas surprenant de voir que la <strong>fréquentation </strong>des sites internet (du moins sur la période estivale) depuis un <a href="http://www.apple.com/fr/iphone/"><strong>iPhone</strong></a>, qui est sans doute à l&#8217;heure actuelle, le smartphone le plus abouti et le plus apprécié, représente presque <strong>1 % des visites totales</strong> !</p>
<p>Il faudra donc dans un avenir proche penser à <strong>concevoir vos sites internet pour les téléphones</strong> portables aussi, en terme d&#8217;interaction et d&#8217;affichage.</p>
<blockquote><p>Par ailleurs, si vous voulez que j&#8217;adapte mon site pour iPhone, achetez-en moi un <img src='http://www.guillaumevoisin.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/les-iphones-gagnent-du-terrain-sur-le-web/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>guillaumevoisin.fr se fait tout beau pour la rentrée!</title>
		<link>http://www.guillaumevoisin.fr/blog/general/guillaumevoisin-fr-se-fait-tout-beau-pour-la-rentree</link>
		<comments>http://www.guillaumevoisin.fr/blog/general/guillaumevoisin-fr-se-fait-tout-beau-pour-la-rentree#comments</comments>
		<pubDate>Sat, 05 Sep 2009 21:36:07 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Général]]></category>
		<category><![CDATA[elasticité]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[fluid design]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[nouveau design]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=309</guid>
		<description><![CDATA[Comme chaque année maintenant, le site fait peau neuve. La tendance actuelle: &#171;&#160;l&#8217;élasticité&#160;&#187; et le &#171;&#160;fluid design&#171;&#160;. Au menu de ce nouveau design: des couleurs sobres mais harmonieuses, pas mal d&#8217;interactivité, une amélioration générale de l&#8217;ergonomie et bien sûr, un refus catégorique de passer 36h à faire en sorte que le site sorte propre sur [...]]]></description>
			<content:encoded><![CDATA[<p>Comme chaque année maintenant, le site fait peau neuve. La tendance actuelle: &laquo;&nbsp;l&#8217;<strong>élasticité</strong>&nbsp;&raquo; et le &laquo;&nbsp;<strong>fluid design</strong>&laquo;&nbsp;. Au menu de ce nouveau design: <strong>des couleurs sobres</strong> mais harmonieuses, pas mal d&#8217;<strong>interactivité</strong>, une amélioration générale de l&#8217;<strong>ergonomie</strong> et bien sûr, <strong>un refus catégorique</strong> de passer 36h à faire en sorte que le site sorte propre sur<span style="text-decoration: line-through;"> IE 6</span>.</p>
<div id="attachment_318" class="wp-caption alignnone" style="width: 251px"><img class="size-full wp-image-318" title="Nouveau design pour guillaumevoisin.fr : Fluide" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/09/site-guillaumevoisin1.jpg" alt="Nouveau design pour guillaumevoisin.fr : Fluide" width="241" height="77" /><p class="wp-caption-text">Nouveau design pour guillaumevoisin.fr : Fluide</p></div>
<p>Eh oui c&#8217;est une première, si vous vous plaigniez du mauvais affichage sous IE6, ce n&#8217;est pas que je l&#8217;ai oublié mais au contraire bien pensé à ne pas y faire attention <img src='http://www.guillaumevoisin.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Pour rappel, nous sommes passés à IE 8 maintenant, alors à vos mises à jour !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/general/guillaumevoisin-fr-se-fait-tout-beau-pour-la-rentree/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les bases du référencement naturel</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/les-bases-du-referencement-naturel</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/les-bases-du-referencement-naturel#comments</comments>
		<pubDate>Fri, 21 Aug 2009 08:56:10 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[linking]]></category>
		<category><![CDATA[metas]]></category>
		<category><![CDATA[référencement naturel]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=282</guid>
		<description><![CDATA[
Voici un petit rappel des principes de base de référencement naturel à mettre en place lors de la conception d&#8217;un site internet.
Sémantique et standards
Structure
L&#8217;un des aspects les plus importants pour le référencement d&#8217;un site est la structure HTML de celui-ci. Il est primordial d&#8217;utiliser les éléments de base du langages tels que:

Les balises de type [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		P.western { font-family: "Arial", sans-serif; font-size: 11pt } 		P.cjk { font-size: 11pt } 		H1 { margin-bottom: 0.21cm; background: transparent; color: #280099 } 		H1.western { font-family: "Arial", sans-serif; font-size: 16pt; font-weight: normal } 		H1.cjk { font-family: "MS Mincho"; font-size: 16pt; font-weight: normal } 		H1.ctl { font-family: "Tahoma"; font-size: 16pt } 		H2 { margin-left: 1.06cm; text-indent: -0.76cm; margin-bottom: 0.21cm; background: transparent; color: #0047ff } 		H2.western { font-family: "Arial", sans-serif; font-size: 12pt; font-style: normal } 		H2.cjk { font-family: "MS Mincho"; font-size: 12pt; font-style: normal } 		H2.ctl { font-family: "Tahoma"; font-size: 14pt; font-style: italic } 		A:link { so-language: zxx } --></p>
<p style="page-break-before: always;">Voici un petit rappel des principes de base de référencement naturel à mettre en place lors de la conception d&#8217;un site internet.</p>
<h2 style="page-break-before: always;">Sémantique et standards</h2>
<h3>Structure</h3>
<p>L&#8217;un des aspects les plus importants pour le référencement d&#8217;un site est la structure HTML de celui-ci. Il est primordial d&#8217;utiliser les éléments de base du langages tels que:</p>
<ul>
<li>Les balises de type headers <strong>&lt;h1&gt;, 	&lt;h2&gt;, …</strong> pour les titres</li>
<li>Les balises <strong>&lt;p&gt;</strong> pour les 	paragraphes</li>
<li>Les balises <strong>&lt;ul&gt;, &lt;li&gt;</strong> pour les listes d&#8217;éléments</li>
<li>Les balises <strong>&lt;strong&gt;</strong> pour la 	mise en avant de texte</li>
</ul>
<p>Non seulement l&#8217;utilisation de ces balises de base permettent aux moteurs de recherche de mieux cibler le contenu, de mieux l&#8217;interpréter mais cela permet également en cas de non affichage des feuilles de style de conserver une mise en page cohérente, puisque ces balises ont un style par défaut.</p>
<h3>Standards W3C</h3>
<p>Dans la mesure du possible chaque page d&#8217;un site internet devrait respecter les standards imposés par le W3C.</p>
<p>Cela permet non seulement d&#8217;avoir un code « propre », plus facilement interprétable par les différents navigateurs, mais également une meilleure identification du contenu par les moteurs de recherche.</p>
<p>Il faut donc proscrire certaines balises comme:</p>
<ul>
<li><strong>&lt;b&gt;</strong> pour le gras, préferer la 	balise <strong>&lt;strong&gt;</strong></li>
<li><strong>&lt;u&gt;</strong><span style="font-weight: normal;"> pour 	souligner, préférer le faire en css avec la propriété </span><strong>text-decoration:underline</strong></li>
</ul>
<p style="font-weight: normal;">De même, veillez à ne pas insérer de balises au mauvais endroit, par exemple:</p>
<ul>
<li><span style="font-weight: normal;">des balises </span><strong>&lt;h1&gt;</strong><span style="font-weight: normal;"> à 	l&#8217;intérieur de </span><strong>&lt;p&gt; &#8230;</strong></li>
</ul>
<p><span id="more-282"></span></p>
<h2>Métas</h2>
<p>L&#8217;utilisation des <strong>métas</strong> est indispensable pour la bonne indexation d&#8217;un site internet.</p>
<h3>Le titre</h3>
<p>La balise <strong>&lt;title&gt;</strong> doit comporter le titre de la page. Il est important de:</p>
<ol>
<li>Insérer des mots clés pertinents qui seront 	repris dans la page</li>
<li>Ne pas dépasser si possible la taille de 65 	caractères (au délà les moteurs de recherche n&#8217;y feront plus 	attention)</li>
<li>Personnaliser chaque titre, ne pas répéter 	les mêmes titres sur différentes pages.</li>
<li>Commencer le titre par les mots clés les 	plus importants, exemple:&lt;title&gt;<span style="color: #4c4c4c;"><em>Conception 	et Réalisation de Sites Internet  &#8211; Nom de la société</em></span><span style="color: #000000;"><span style="font-style: normal;">&lt;/title&gt;</span></span></li>
</ol>
<h3 style="font-style: normal;">Meta description</h3>
<p style="font-style: normal;">Autrement plus importante, la balise de description n&#8217;a plus d&#8217;incidence sur le positionnement d&#8217;un site internet. Elle n&#8217;est utilisée que pour l&#8217;affichage des résultats dans google notamment.</p>
<p style="font-style: normal;">Il est cependant important de soigner cette présentation pour avoir plus d&#8217;impact lors de la recherche d&#8217;un utilisateur. Pour cela, il est conseillé de limiter cette description à ~200 caractères.</p>
<h3>Meta keywords</h3>
<p>De même cette balise n&#8217;est plus utilisée par Google ou par les autres grands moteurs de recherches. S&#8217;ils sont déjà en place, ils pourront toujours servir pour d&#8217;autres moteurs.</p>
<p>Les balises Metas ne sont donc plus le facteur le plus important pour le bon positionnement d&#8217;un site internet.</p>
<h2>Contenu Original et Linking</h2>
<h3>Un contenu unique</h3>
<p>L&#8217; un des aspects les plus importants du référencement est le contenu.</p>
<p>Il se doit d&#8217;être:</p>
<ul>
<li><strong>Original</strong>, <strong>unique et soigné</strong>, 	pour se démarquer des sites concurrents et éviter la duplication 	de contenus.</li>
<li>Constitué de bons <strong>mots clés</strong>, le 	contenu d&#8217;une page sur la conception de sites internet devrait 	reprendre ce mot clé 4 à 5 fois dans le contenu (ainsi que dans le 	titre de la page). Ce sont eux les <strong>keywords</strong> importants 	maintenant.</li>
<li>Avoir de <strong>bons liens internes et externes</strong>. 	Un lien de qualité (ciblé et dans le même thème aura beaucoup 	plus d&#8217;impact que des liens ordinaires). Toutes les pages d&#8217;un site 	doivent communiquer entre elles le plus possible.</li>
<li><strong>Conséquent</strong>, il faut une bonne 	quantité de contenu de qualité dans la page, si possible <strong>placé 	le plus haut dans la page</strong>.</li>
</ul>
<h3>De bons liens</h3>
<p>En plus des liens internes, plus le site comporte de <strong>backlinks</strong> (liens retour vers notre site), mieux c&#8217;est. Les liens peuvent comporter l&#8217;attribut « title » qui permet notamment dans le cas de liens externes de préciser de quoi il s&#8217;agit.</p>
<p>Il faut également éviter de mettre des liens du type « Cliquez ici », « lire la suite &#8230; » car les liens sont très importants et ceux ci ne comportent pas de mots clés. On peut par exemple écrire « Continuer la lecture de [titre de l'article] ».</p>
<h3>Sitemap</h3>
<p>Il est important de toujours mettre un plan du site (html) pour guider l&#8217;utilisateur mais également pour indiquer au moteur de recherche toutes les adresses du site.</p>
<p>Il faut également soumettre un sitemap.xml à Google qui reprend toutes les pages du site.</p>
<h2>Utilisation des medias</h2>
<p>Bien évidemment, plus il y a de texte dans une page web, mieux c&#8217;est pour le référencement. Ainsi, les images ne doivent dans la mesure du possible ne pas être utilisées pour afficher du texte, dans les menus notamment (Voir le script Flash Sifr)</p>
<p>En ce qui concernent les images, celles-ci doivent bien sûr comporter les deux attributs « alt » pour Internet Explorer et « title » pour Firefox et autres.</p>
<h2>Réécriture des adresses (Url Rewriting)</h2>
<p>Un point très influent dans l&#8217;indexation d&#8217;un site internet est la réécriture d&#8217;Urls.</p>
<p>Celle-ci consiste via un fichier .htaccess (sous Apache) à réécrire les urls dynamiques contenant des paramètres en adresses compréhensibles, comportant des mots clés.</p>
<p>Exemple:</p>
<p><em>monsite.com/index.php?cat=12&amp;id=23</em></p>
<p style="font-style: normal;">Deviendra</p>
<p><em>monsite.com/technologie/referencement-naturel</em></p>
<p style="font-style: normal;">On peut donc ainsi ajouter de nouveaux mots clés en concordance avec le titre de la page ainsi que ceux écrits dans le contenu de la page.</p>
<p style="font-style: normal;">De plus, pour l&#8217;utilisateur, il devient plus facile de comprendre sur quel site il s&#8217;aventure, sans pouvoir pour autant en modifier les paramètres.</p>
<p><span style="font-style: normal;">Il faut également éviter de dupliquer les adresses sur deux noms de domaine différents. Par exemple la page </span><span style="color: #000080;"><span lang="zxx"><span style="text-decoration: underline;"><a href="http://monsite.com/index.php"><span style="font-style: normal;">http://monsite.com/index.php</span></a></span></span></span><span style="font-style: normal;"> est la même que la page </span><span style="color: #000080;"><span lang="zxx"><span style="text-decoration: underline;"><a href="http://www.monsite.com/index.php"><span style="font-style: normal;">http://www.monsite.com/index.php</span></a></span></span></span><span style="font-style: normal;"> mais les deux seront indexées.</span></p>
<h2>Mises à jour</h2>
<p style="font-style: normal;">Pour veiller à la bonne indexation d&#8217;un site internet, il est important d&#8217;apporter des mises à jour régulières, via par exemple un module d&#8217;actualités, ou ajouter de nouveaux projets. Ceci créera de nouvelles pages, donc de nouveaux éléments à indexer pour les moteurs de recherche.</p>
<h2>Inscription dans les annuaires</h2>
<p style="font-style: normal;">Cette étape est importante pour le démarrage d&#8217;un nouveau site.</p>
<p style="font-style: normal;">Il faut veiller à ce que:</p>
<ul>
<li>
<p style="font-style: normal;">le lien vers le 	site doit être en adresse absolue évidemment</p>
</li>
<li>
<p style="font-style: normal;">le texte du lien 	doit être optimisé (pas de Cliquez ici ou Voir le site)</p>
</li>
<li>l&#8217;annuaire doit être bien indexé par les 	moteurs et même mieux : il doit être bien positionné dans 	Google pour la thématique qui nous intéresse, c&#8217;est une preuve que 	cet annuaire nous  apportera quelque chose en termes de 	référencement</li>
</ul>
<ul>
<li>le contexte sémantique du lien vers le site 	doit être bon</li>
</ul>
<h2 style="font-style: normal;">Page 404</h2>
<p style="font-style: normal;">La page 404 est importante car elle permet de rediriger une page inexistante tapée maladroitement par un utilisateur ou un moteur vers une page d&#8217;erreur personnalisée qui affichera par exemple une plan du site ou une liste de liens en rapport avec les mots clés saisis.</p>
<h2 style="font-style: normal;">Fichier robots.txt</h2>
<p style="font-style: normal;">Ce fichier déposé à la racine du serveur permet d&#8217;informer les différents moteurs de recherches dont Google quels dossiers il ne doit pas indexer. Par exemple le dossier admin &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/les-bases-du-referencement-naturel/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firefox 3.5 est sorti !</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/firefox-3-5-est-sorti</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/firefox-3-5-est-sorti#comments</comments>
		<pubDate>Tue, 30 Jun 2009 16:47:40 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[firefox 3.5]]></category>
		<category><![CDATA[html 5]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[navigation privée]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=253</guid>
		<description><![CDATA[
Enfin! 1 an après la sortie de Firefox 3, voici la dernière version du légendaire renard de feu. Plus puissant, plus rapide, il reste le meilleur navigateur sur la toile !
Vous pouvez le télécharger dès maintenant sur le site de la fondation Mozilla.
Vous pourrez ainsi tester les nouvelles performances du navigateur, son mode de navigation [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-257 alignleft" title="Mozilla Firefox 3.5" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/06/firefox-logo1.jpg" alt="Mozilla Firefox" width="120" height="114" /></p>
<p>Enfin! 1 an après la sortie de <a href="http://www.mozilla-europe.org/fr/firefox/" target="_blank">Firefox</a> 3, voici la dernière version du légendaire renard de feu. Plus puissant, plus rapide, il reste le meilleur navigateur sur la toile !</p>
<p>Vous pouvez le <a href="http://www.mozilla-europe.org/fr/firefox/" target="_blank">télécharger</a> dès maintenant sur le <a href="http://www.mozilla-europe.org/fr/firefox/" target="_blank">site de la fondation Mozilla</a>.</p>
<p>Vous pourrez ainsi tester les <strong>nouvelles performances</strong> du navigateur, son <strong>mode de navigation privée</strong> ainsi que sa<strong> gestion native des balises &lt;video&gt;</strong> HTML 5.</p>
<p>Alors à vos téléchargements !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/firefox-3-5-est-sorti/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>World Wide Developer Conference 2009 à San Francisco</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/world-wide-developer-conference-2009-a-san-francisco</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/world-wide-developer-conference-2009-a-san-francisco#comments</comments>
		<pubDate>Mon, 08 Jun 2009 16:37:55 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[conférence apple]]></category>
		<category><![CDATA[développeurs]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[iPhone OS 3.0]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[wwdc]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=241</guid>
		<description><![CDATA[
A 19h, heure française, débutera la conférence mondiale des développeurs (WWDC) à San Francisco aux Etats Unis.
C&#8217;est l&#8217;occasion pour Apple, de présenter pendant toute une semaine, toutes ses nouveautés, aussi bien dans les appareils mobiles (iPhone) que les ordinateurs portables (MacBook) et bien sûr le nouveau système d&#8217;exploitation Mac OSX Snow Leopard.
Beaucoup d&#8217;attente pour cet [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-242 alignleft" title="World Wide Conference 2009 à San Francisco" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/06/wwdc.png" alt="World Wide Conference 2009 à San Francisco" width="232" height="299" /><br />
A 19h, heure française, débutera la<a href="http://developer.apple.com/WWDC/"> conférence mondiale des développeurs (WWDC)</a> à San Francisco aux Etats Unis.</p>
<p>C&#8217;est l&#8217;occasion pour <a href="http://www.apple.com/fr/">Apple</a>, de présenter pendant toute une semaine, toutes ses nouveautés, aussi bien dans les appareils mobiles (iPhone) que les ordinateurs portables (MacBook) et bien sûr le nouveau système d&#8217;exploitation Mac OSX Snow Leopard.</p>
<p>Beaucoup d&#8217;attente pour cet évènement qui rassemble des développeurs du monde entier.</p>
<p>Depuis pas mal de semaines les rumeurs s&#8217;enchaînent, et on espère bien découvrir de belles surprises!</p>
<p>Les nouveautés très attendues cette année sont:</p>
<ul>
<li>Nouveau système d&#8217;exploitation <strong><a href="http://www.apple.com/fr/macosx/snowleopard/">Mac OSX Snow Leopard</a></strong></li>
<li>Nouveau <a href="http://www.macgeneration.com/news/voir/135168/iphone-os-3.0-au-coeur-des-rumeurs"><strong>iPhone OS 3.0</strong></a></li>
<li>Un nouvel <a href="http://www.igeneration.fr/fr/actu/8352/"><strong>iPhone 3GS</strong></a> 2009?</li>
</ul>
<p>Rendez vous tout de suite sur <a href="http://keynote.macgeneration.com/">Mac Génération</a> pour suivre en direct le déroulement de la conférence.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/world-wide-developer-conference-2009-a-san-francisco/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax et référencement</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/ajax-et-referencement</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/ajax-et-referencement#comments</comments>
		<pubDate>Wed, 29 Apr 2009 12:44:31 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[fichier externe]]></category>
		<category><![CDATA[interactions]]></category>
		<category><![CDATA[moteur de recherche]]></category>
		<category><![CDATA[optimiser]]></category>
		<category><![CDATA[référencement]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=220</guid>
		<description><![CDATA[La technologie Ajax, qui a vu le jour il y a déjà quelques années maintenant, permet de développer des sites très ergonomiques, pratiques et intuitifs. C&#8217;est l&#8217;effet Web 2.0.

Explication
Le principe de base est de récupérer la plupart des contenus du site en interrogeant des scripts serveurs externes via des appels en Javascript.
Mais au delà de [...]]]></description>
			<content:encoded><![CDATA[<p>La technologie <strong>Ajax</strong>, qui a vu le jour il y a déjà quelques années maintenant, permet de développer des sites très ergonomiques, pratiques et intuitifs. C&#8217;est l&#8217;effet Web 2.0.</p>
<p><img class="border" title="Référencement et Ajax" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/04/referencement_ajax.jpg" alt="Référencement et Ajax" width="543" height="155" /></p>
<h2>Explication</h2>
<p>Le principe de base est de récupérer la plupart des contenus du site en interrogeant des scripts serveurs externes via des appels en Javascript.</p>
<p>Mais au delà de l&#8217;interactivité du site, il existe aussi un réel enjeu:<strong> le référencement</strong> (SEO).</p>
<p>Si tous les contenus sont <strong>créés dynamiquement</strong> à partir de Javascript, il n&#8217;existe donc pas réellement de contenu &laquo;&nbsp;physique&nbsp;&raquo; dans la page. Il n&#8217;y a donc <strong>aucune donnée à indexer</strong> par les moteurs de recherche.</p>
<p>Hors nous avons vu <a title="Référencement naturel et sémantique" href="http://www.guillaumevoisin.fr/blog/seo/limportance-de-la-semantique-du-code-html-pour-le-referencement">l&#8217;importance de la sémantique dans le référencement naturel d&#8217;un site</a>.</p>
<p><span id="more-220"></span></p>
<h2>Solution</h2>
<h3>Préambule</h3>
<p>Le web 2.0 a engendré de nombreux changements dans la façon d&#8217;organiser un site. L&#8217;un des principaux est la séparation du <strong>contenu</strong> (html), de l&#8217;<strong>affichage</strong> (css), et des <strong>interactions utilisateurs</strong> (script).</p>
<p>Tous les styles sont donc stockés dans une feuille de style externe et les scripts Javascript dans un fichier .js externe.</p>
<h3>A quoi ça sert?</h3>
<p>Il y a plusieurs bonnes raisons de recourir à une telle organisation:</p>
<ul>
<li><strong>Beaucoup moins de fichiers à éditer</strong> en cas de modifications du site</li>
<li>Une plus grande <strong>clarté</strong> dans le code</li>
<li>Une <strong>indépendance</strong> du script par rapport au contenu</li>
</ul>
<h3>Application</h3>
<h4>1) Première étape</h4>
<p>Cela implique des <strong>nouvelles conventions de nommage</strong>: fini les <span style="color: #008000;"><span style="text-decoration: line-through;">&lt;a href=&nbsp;&raquo;#&nbsp;&raquo; onclick=&nbsp;&raquo;maFonction()&nbsp;&raquo;&gt;Lien&lt;/a&gt;</span></span>.</p>
<p>Maintenant, il suffit de donner un <strong>identifiant</strong> à cet élément <span style="color: #008000;">&lt;a href=&nbsp;&raquo;#&nbsp;&raquo; id=&nbsp;&raquo;lien1&#8243;&gt;Lien&lt;/a&gt;</span>, puis dans notre fichier javascript d&#8217;appliquer un traitement particulier pour cette élément, soit par la méthode <span style="color: #008000;"><strong>getElementById(&laquo;&nbsp;lien1&#8243;)</strong></span>, soit si on utilise un <em>framework</em> javascript comme <a href="http://www.jquery.com">JQuery</a>, <span style="color: #008000;">$(&laquo;&nbsp;#lien1&#8243;)</span>.</p>
<p>Une fois que tous les éléments de notre page html ont été identifiés, tous les traitements peuvent être effectués depuis notre fichier javascript externe.</p>
<h4>2) Deuxième étape</h4>
<p>Pour <strong>optimiser</strong> au mieux le <strong>référencement</strong> de son site, il est important de prendre des mesures particulières:</p>
<ol>
<li>Bien indiquer les adresses des liens même lorsqu&#8217;on appelle une fonction Ajax en cliquant dessus.</li>
<li>Appliquer ces fonctions à des liens (&lt;a&gt;).</li>
</ol>
<p><strong>Pourquoi?</strong> La raison est simple: si Javascript est désactivé (ce qui est le cas des robots des moteurs de recherche) alors la fonction ne s&#8217;applique pas et le lien est suivi normalement.</p>
<p>Cela signifie que le site entier est consultable par un robot et que tout le contenu est bien indexable car physiquement présent.</p>
<p>En effet, dans le cas où Javascript est désactivé, il suffit de créer sa page en prenant en compte des paramètres serveur et d&#8217;afficher le contenu en fonction, alors qu&#8217;en utilisant ajax, cela se fait sans recharger sa page.</p>
<h3>Simplifier</h3>
<p>En utilisant un framework Javascript, il devient encore plus facile de réaliser ce genre d&#8217;application.</p>
<p>En effet, en utilisant des selecteurs, il est très facile de manipuler les liens d&#8217;une page html:</p>
<p><strong>Exemple ici avec <a href="http://www.jquery.com">JQuery</a>:</strong></p>
<pre class="brush: jscript;">
$(&quot;div.contenu a&quot;).click(function(){
    appelAjax();    // Appel fonction Ajax
    return false;   // Très important
}
</pre>
<p><strong>Explication:</strong></p>
<p>Ce script va effectuer un appel à la fonction <em>appelAjax()</em> sur tous les liens <em><strong>&lt;a&gt;</strong></em> contenus dans le &lt;<em><strong>div&gt;</strong></em> qui a la classe &laquo;&nbsp;<em>contenu</em>&laquo;&nbsp;.</p>
<p>A noter l&#8217;utilisation de &laquo;&nbsp;<strong><em>return false</em></strong>&laquo;&nbsp;, qui permet de ne pas rediriger sur l&#8217;adresse du lien.</p>
<h3>Exemple</h3>
<p>Mon <a href="http://www.guillaumevoisin.fr/portfolio/">portfolio</a> personnel est construit de cette façon là, essayez donc de désactiver javascript et vous verrez!</p>
<h2>Conclusion</h2>
<p>Aujourd&#8217;hui, et grâce principalement aux frameworks Javascript, <strong>Référencement </strong>et <strong>Ajax</strong> c&#8217;est possible. Il suffit de bien organiser son site, de prévoir les pages serveurs qui seront utilisées par les moteurs de recherche  (sans javascript) et les scripts Ajax utilisés par les utilisateurs.</p>
<h2>Plus de lecture &#8230;</h2>
<ul>
<li><a href="http://www.journaldunet.com/solutions/0604/060414-referencement-web-2-ajax.shtml">Référencement et Ajax sur le journal du net</a></li>
<li><a href="http://oseox.fr/referencement/ajax-referencement.html">Optimiser un site en Ajax</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/ajax-et-referencement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>M6 se paye notre tête!</title>
		<link>http://www.guillaumevoisin.fr/blog/internet/m6-se-paye-notre-tete</link>
		<comments>http://www.guillaumevoisin.fr/blog/internet/m6-se-paye-notre-tete#comments</comments>
		<pubDate>Mon, 20 Apr 2009 18:38:03 +0000</pubDate>
		<dc:creator>Gui</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Medias]]></category>
		<category><![CDATA[100% mag]]></category>
		<category><![CDATA[crédit photo]]></category>
		<category><![CDATA[droit d'auteur]]></category>
		<category><![CDATA[droit image]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hockey]]></category>
		<category><![CDATA[loi]]></category>
		<category><![CDATA[M6]]></category>
		<category><![CDATA[montréal]]></category>
		<category><![CDATA[référencement]]></category>
		<category><![CDATA[vestiaire]]></category>

		<guid isPermaLink="false">http://www.guillaumevoisin.fr/blog/?p=189</guid>
		<description><![CDATA[Surprise ce matin, des amis m&#8217;apprennent que Sébastien Angot et moi-même sommes passés à la TV. Ca s&#8217;est passé le vendredi 17 avril sur M6 dans l&#8217;émission 100% Mag. Jusque là rien d&#8217;étonnant&#8230;
Le petit détail, c&#8217;est que nous n&#8217;étions pas au courant!
Explications
Nous apparaissons effectivement dans une photo illustrant un reportage vidéo sur Céline Dion au [...]]]></description>
			<content:encoded><![CDATA[<p>Surprise ce matin, des amis m&#8217;apprennent que <a href="http://www.sebastienangot.fr">Sébastien Angot</a> et moi-même <strong>sommes passés à la TV</strong>. Ca s&#8217;est passé le vendredi 17 avril sur <a href="http://www.m6.fr">M6</a> dans l&#8217;<a href="http://www.m6replay.fr/#/emissions/100--mag/12400250">émission 100% Mag</a>. Jusque là rien d&#8217;étonnant&#8230;</p>
<p>Le petit détail, c&#8217;est que <strong>nous n&#8217;étions pas au courant!</strong></p>
<h2>Explications</h2>
<p>Nous apparaissons effectivement dans une photo illustrant un reportage vidéo sur <strong>Céline Dion</strong> au Québec où nous sommes en tenue de Hockey sur Glace dans un vestiaire à Montréal.</p>
<p>Cela se passe à la <strong>38ème minute</strong>. Vous pouvez <a href="http://www.m6replay.fr/#/emissions/100--mag/12400250">voir la vidéo dans les archives de M6</a>.</p>
<p><img class="border" title="Sébastien et Guillaume dans l'émission 100% Mag de M6" src="http://www.guillaumevoisin.fr/blog/wp-content/uploads/2009/04/m6_hockey.jpg" alt="Sébastien et Guillaume dans l'émission 100% Mag de M6" width="543" height="299" /></p>
<p>Commentaire audio du reportage, parlant du fils de Céline Dion:</p>
<blockquote><p>&#8230; et s&#8217;il est trop mauvais comme joueur de hockey, il pourra toujours nettoyer les vestiaires &#8230;</p></blockquote>
<p>Que faut-il comprendre ? &#8230; Que nous sommes des joueurs de hockey exceptionnels ou que nous sommes bons pour faire le ménage? A vous de décider <img src='http://www.guillaumevoisin.fr/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Comment notre photo a-t-elle atterri ici?</h2>
<p>Cette photo a été prise par <a href="http://www.rejaneconrad.fr">Réjane</a> lors de notre <a href="http://www.guillaumevoisin.fr/blog/etudier-un-an-a-montreal">année universitaire à Montréal, au Canada</a>. Sébastien et moi tenions alors un <a href="http://canada.guillaumevoisin.fr">blog</a> où nous postions régulièrement des news et des photos.</p>
<p>Google faisant bien son travail, de nombreuses photos ont été référencées par le géant américain et M6 n&#8217;a eu donc qu&#8217;à piocher dans la <a href="http://images.google.fr/images?q=vestiaire%20montr%C3%A9al%20hockey&amp;oe=utf-8&amp;rls=org.mozilla:fr:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;hl=fr&amp;tab=wi">grande bibliothèque d&#8217;images de Google</a> sans se préoccuper des potentiels droits d&#8217;auteurs de celles-ci.</p>
<p>On peut en effet trouver cette photo sur le <a href="http://canada.sebastienangot.fr/?num=20">blog de Sébastien</a> mais également sur <a href="http://images.google.fr/images?q=vestiaire%20montr%C3%A9al%20hockey&amp;oe=utf-8&amp;rls=org.mozilla:fr:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;sa=N&amp;hl=fr&amp;tab=wi">google images</a> en combinant les mots clés: <strong>vestiaire montréal hockey</strong></p>
<h2>Qu&#8217;avons nous fait?</h2>
<p><a href="http://blog.sebastienangot.fr/2009/04/22/nous-passons-sur-m6/">Sébastien </a>est entré en contact avec M6 pour leur demander des explications, notamment par rapport à deux points particuliers:</p>
<ol>
<li>La photo <strong>n&#8217;est pas libre de droit</strong> et ne peut être exploitée sans l&#8217;autorisation de son auteur</li>
<li><strong>Le droit à l&#8217;image</strong>. Nous sommes tous deux bien identifiables sur la photo.</li>
</ol>
<p>Voici ce que dit la loi:</p>
<blockquote><p>Le droit à l’image permet à toute personne de s’opposer &#8211; quelle que soit la nature du support utilisé &#8211; à la reproduction et à la diffusion, sans son autorisation expresse, de son image.</p>
<p>source: <a href="http://cniljuniors.net/index.php?id=1790"><acronym title="Commission Nationale de l'Informatique et des Libertés">CNIL</acronym></a></p></blockquote>
<h2>Qu&#8217;a répondu M6</h2>
<p>L&#8217;interlocuteur chez M6 <strong>a reconnu</strong> que l&#8217;utilisation de l&#8217;image<strong> n&#8217;était pas conforme à la loi</strong> et nous a donc proposé un dédommagement, ce que nous avons accepté.</p>
<h2>Morale de l&#8217;histoire</h2>
<p>Ne jamais renoncer à ses droits!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guillaumevoisin.fr/blog/internet/m6-se-paye-notre-tete/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
