<?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>slDesign &#187; Tutoriel</title>
	<atom:link href="http://sldesign.openwab.com/tag/tutoriel/feed/" rel="self" type="application/rss+xml" />
	<link>http://sldesign.openwab.com</link>
	<description>Web, Dév &#38; More...</description>
	<lastBuildDate>Wed, 13 Oct 2010 10:09:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Tutoriel WordPress : Introduction &#224; la cr&#233;ation d&#8217;un th&#232;me WordPress personnalis&#233;</title>
		<link>http://sldesign.openwab.com/2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/</link>
		<comments>http://sldesign.openwab.com/2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 10:32:50 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Thème]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[Widgets]]></category>
		<category><![CDATA[Wordpress Poedit]]></category>
		<category><![CDATA[Wordpress template]]></category>
		<category><![CDATA[Wordpress Thème]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/</guid>
		<description><![CDATA[Depuis quelques temps maintenant que je travaille sur WordPress comme base de mes développements Web, j’ai appris à utiliser ce moteur de blog, installer des extension et même en développer. WordPress est certes un outil puissant utilisable comme moteur de Blog mais également comme base à la réalisation de sites Web Dynamiques ou de sites [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F10%2F04%2Ftutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F10%2F04%2Ftutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img style="display: inline; margin-left: 0px; margin-right: 0px; border-width: 0px;" title="splash_screen" src="http://sldesign.openwab.com/wp-content/uploads/2010/10/splash_screen.jpg" border="0" alt="splash_screen" width="244" height="244" align="left" /> Depuis quelques temps maintenant que je travaille sur WordPress comme base de mes développements Web, j’ai appris à utiliser ce moteur de blog, installer des extension et même en développer.</p>
<p>WordPress est certes un outil puissant utilisable comme moteur de Blog mais également comme base à la réalisation de sites Web Dynamiques ou de sites vitrines. Tous les blog WordPress sont réalisés sur la même base et pourtant, ils sont presque tous différents.</p>
<p>Je vous propose de partager avec moi une étape primordial qui fera de votre Blog un Blog unique, la création d’un thème personnalisé.</p>
<p>Infos :</p>
<p>Version du document : 0.1</p>
<hr class="clear_all" />
<h2>Sommaire :</h2>
<ul>
<li>Page 1 &#8211; <a title="Introduction" href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/1">Introduction</a></li>
<li>Page 2 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/2/">Préparation</a></li>
<li>Page 3 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/3/">Création d&#8217;un thème</a></li>
<li>Page 4 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/4/">Edition avancée</a></li>
<li>Page 5 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/5/">Affichage des pages</a></li>
<li>Page 6 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/6/">Sidebar</a></li>
<li>Page 7 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/7/">Administration du thème</a></li>
<li>Page 8 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/8/">Personnalisation du thème</a></li>
<li>Page 9 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/9/">Intégration de Widget</a></li>
<li>Page 10 &#8211; <a href="2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/10/">Conclusion</a></li>
</ul>
<p><span id="more-1018"></span></p>
<h2>I – Introduction</h2>
<h3>1°) Objet du tutoriel</h3>
<p>Cet article à pour objectif de vous apprendre à développer un thème complet pour WordPress. A la fin de ce didacticiel, vous serez (normalement) en mesure de réaliser un Template 100% personnalisable.</p>
<p>Cet article est amené à évolué, il sera mis à jour en fonction des commentaires et améliorations apportées à ce dernier.</p>
<p>Ce tutoriel est une<strong> introduction</strong> à la création de thème WordPress.</p>
<h4>Ce que n’est pas ce didacticiel :</h4>
<p>Ce didacticiel n’a pas pour vocation de vous apprendre à développer en CSS, HTML, PHP. Ces langages sont utilisés et vous devez donc les maîtriser.</p>
<p>Ce n’est pas une introduction à WordPress. Vous devez connaitre ce moteur de Blog, savoir l’installer et installer des extensions.</p>
<p>Cet article n’abordera pas en détail l’intégration graphique au sein de WordPress.</p>
<h3>2°) Pré-requis</h3>
<ul>
<li>PHP : Bonnes connaissances requises</li>
<li>CSS : Très bonne connaissance</li>
<li>JavaScript : Très bonne connaissances</li>
<li>WordPress : Bonne connaissance</li>
</ul>
<h3>3°) Editeur de code et outils de programmation</h3>
<h4>Editeur de Code HTML / PHP / JavaScript / CSS</h4>
<p>Certes, il vous est possible de suivre ce tutoriel avec un simple éditeur de texte… mais je vous conseille d’utiliser un puissant éditeur de code pouvant supporter les langages suivants :</p>
<ul>
<li>PHP</li>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript / jQuery</li>
</ul>
<p>Pour ma part, j’utilise Aptana Studio disponible à l’adresse suivante <a title="http://www.aptana.com/ [Nouvelle fenêtre]" href="http://www.aptana.com/" target="_blank">http://www.aptana.com/</a> et qui intègre un ensemble d’outils vous permettant de développer des sites Web dynamiques HTML / PHP / JAVASCRIPT.</p>
<p>Un éditeur vous permettra d’accéder à différentes fonctions qui me semblent indispensables :</p>
<ul>
<li>Coloration syntaxique</li>
<li>Indentation</li>
<li>Numérotation de lignes</li>
<li>Recherche de documentation</li>
</ul>
<h4>Firefox et extensions pour développeurs</h4>
<p>Firefox est bien plus qu’un navigateur Web… il permet également d’accéder à de nombreux outils utiles aux développeurs.</p>
<p><strong>Extension Web Développer pour Firefox :</strong> Cette extension ajoute un menu à Firefox vous permettant d’avoir accès à différents outils :</p>
<ul>
<li>Gestion des cookies</li>
<li>Manipulation et affichage des feuilles de style css</li>
<li>Informations sur les images</li>
<li>Informations sur les formulaires</li>
<li>Outils de validation HTML / CSS (W3C)</li>
</ul>
<p>Site web de l’extension : <a title="http://chrispederick.com/work/web-developer/ [Nouvele fenêtre]" href="http://chrispederick.com/work/web-developer/" target="_blank">http://chrispederick.com/work/web-developer/</a></p>
<p><a href="http://sldesign.openwab.com/wp-content/uploads/2010/10/1.3.1wptwebfirefoxtoolbar.jpg"><img style="display: inline; border-width: 0px;" title="1.3.1-wpt-web-firefox-toolbar" src="http://sldesign.openwab.com/wp-content/uploads/2010/10/1.3.1wptwebfirefoxtoolbar_thumb.jpg" border="0" alt="1.3.1-wpt-web-firefox-toolbar" width="478" height="16" /></a></p>
<p><strong>Extension Firebug :</strong></p>
<p>Firebug est une extension primordial pour le développement de sites Web. Contrairement à la barre de développement “Web Développer” cette extension est orientée &#8216;client&#8217;; il est ainsi possible d’analyser le code généré côté client par JavaScript.</p>
<p><a href="http://sldesign.openwab.com/wp-content/uploads/2010/10/1.3.2wptfirebugfirefoxextension.jpg"><img style="display: inline; border-width: 0px;" title="1.3.2-wpt-firebug-firefox-extension" src="http://sldesign.openwab.com/wp-content/uploads/2010/10/1.3.2wptfirebugfirefoxextension_thumb.jpg" border="0" alt="1.3.2-wpt-firebug-firefox-extension" width="488" height="59" /></a></p>
<h3>4°) Ressources et documentations</h3>
<p>Voici une liste de liens utiles ; je vous encourage vivement à les consulter avant de commencer et de les avoirs dans vos favoris :</p>
<p><a title="http://codex.wordpress.org/Developer_Documentation" href="http://codex.wordpress.org/Developer_Documentation">http://codex.wordpress.org/Developer_Documentation</a> – Documentation WordPress à l’attention des développeurs</p>
<p><a title="http://codex.wordpress.org/Theme_Development" href="http://codex.wordpress.org/Theme_Development" target="_blank">http://codex.wordpress.org/Theme_Development</a> – Documentation spécifique aux développement de thèmes</p>
<p>Il est important de bien appréhender les notions techniques de WordPress et notamment cette page : <a title="Documentation API WordPress [Nouvelle fenêtre]" href="http://codex.wordpress.org/Plugin_API" target="_blank">http://codex.wordpress.org/Plugin_API</a> ; cette dernière vous apportera de nombreuses information sur l’API WordPress qui est à la base des développement autour du moteur de Blog.</p>
<h3>5°) Introduction à l’API WordPress</h3>
<p>Sans entrer dans les détails, je vais vous présenter en quelques lignes l’API WordPress. Une API vous permet d’interagir avec WordPress. Vous entendrez parler de HOOK</p>
<p>Il existe deux types de HOOK :</p>
<ul>
<li>Les filtres</li>
<li>Les actions</li>
</ul>
<p><strong>Les filtres</strong> sont des événements que WordPress lancent afin de modifier des textes de différents types avant de les insérer dans la base de données ou de les afficher à l’écran</p>
<p><strong>Les actions</strong> sont des événement que WordPress lance à des moments spécifique de leur exécution.</p>
<p>Ces éléments ne sont pas directement utilisés dans les thèmes mais principalement dans les plugins et widgets qui y sont intégrés</p>
<p>Les <a title="Documentation WordPress LOOP [Nouvelle fenêtre]" href="http://codex.wordpress.org/The_Loop" target="_blank">LOOPS</a> sont utilisés par WordPress pour afficher chacun de vos articles.</p>
<p>La syntaxe de base est la suivante :</p>
<pre class="brush:php">&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;</pre>
<h3>6°) Informations utiles</h3>
<p>WordPress est installé en local chez moi sur un serveur LAMPP. OS Windows. J’utilise l’éditeur de Code Aptana Studio. Le rendu est réalisé sur Firefox. Il sera donc nécessaire de rendre ce code compatible avec d’autres navigateurs WEB.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/10/04/tutoriel-wordpress-introduction-la-cration-dun-thme-wordpress-personnalis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Formulaires HTML5 &#8211; Quoi de neuf ?</title>
		<link>http://sldesign.openwab.com/2010/08/07/formulaires-html5-quoi-de-neuf/</link>
		<comments>http://sldesign.openwab.com/2010/08/07/formulaires-html5-quoi-de-neuf/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 08:37:05 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Formulaires]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=789</guid>
		<description><![CDATA[Nouveautés HTML 5 &#8211; Formulaires et champs de formulaires Petite introduction aux formulaires HTML 5&#8230; Je vous propose de voir en images et en code les différentes modifications apportées par les nouveaux attributs HTML 5. Introduction : HTML 5 apporte son lot de nouveautés également sur les formulaires. Il est important de prendre en considération [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F07%2Fformulaires-html5-quoi-de-neuf%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F07%2Fformulaires-html5-quoi-de-neuf%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://sldesign.openwab.com/wp-content/uploads/2010/08/spash-screen.jpg"><img class="size-full wp-image-792 alignleft" style="margin: 5px;" title="Nouveautés HTML 5 - Splash Screen" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/spash-screen.jpg" alt="Nouveautés HTML 5 - Splash Screen" width="275" height="206" /></a>Nouveautés HTML 5 &#8211; Formulaires et champs de formulaires<br />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript">
        </script></p>
<p>Petite introduction aux formulaires HTML 5&#8230; Je vous propose de voir en images et en code les différentes modifications apportées par les nouveaux attributs HTML 5.<br />
<span id="more-789"></span></p>
<hr class="clear_all" />
<h2>Introduction :</h2>
<p>HTML 5 apporte son lot de nouveautés également sur les formulaires. Il est important de prendre en considération ces modifications car elles vont permettre un meilleur échange entre les utilisateurs et éditeurs de contenu. Elles sont également là pour nous rendre service et optimiser le WEB de demain.</p>
<p class="info">Information : A ce jour, ces nouveautés ne sont compatible qu&#8217;avec les navigateurs &laquo;&nbsp;WEBKIT&nbsp;&raquo; (Safari et Google Chrome).</p>
<h2>Placeholder attribut :</h2>
<p>Cet attribut permet d&#8217;insérer dans votre champ un exemple de texte à saisir qui a la propriété de disparaître au focus. Ceci remplace l&#8217;utilisation de javascript pour réaliser cette opération&#8230;</p>
<h4>Avant&#8230;</h4>
<pre class="brush:html">	&lt;script&gt;
		$(document).ready(function(){
			$('.placeholder').focus(function(){

				if($(this).val() == $(this).attr('alt')){
					$(this).val('');
				};
			});
			$('.placeholder').blur(function(){
				if($(this).val() == ""){
					$(this).val($(this).attr('alt'));
				}
			});

		});
	&lt;/script&gt;
	&lt;form&gt;
		&lt;input type="text" class="placeholder" name="first-name" alt="John" value="John"/&gt;&lt;br/&gt;
		&lt;input type="text" class="placeholder" name="last-name"  alt="Doe" value="Doe"/&gt;&lt;br/&gt;
		&lt;input type="submit" name="submit" value="Save"/&gt;
	&lt;/form&gt;
</pre>
<h4>Après&#8230;</h4>
<pre class="brush:html">	&lt;form&gt;
	&lt;input type="text" name="first-name" placeholder="John"/&gt;&lt;br/&gt;
	&lt;input type="text" name="last-name" placeholder="Doe"/&gt;&lt;br/&gt;
	&lt;input type="submit" name="submit" value="Save"/&gt;
	&lt;/form&gt;
</pre>
<h2>Autofocus</h2>
<p>cet attribut permet de sélectionner un champ en particulier au chargement de la page</p>
<h4>Avant&#8230;</h4>
<pre class="brush:html">	&lt;script&gt;
		$(document).ready(function(){
			$('.selectedInput').focus();
		});
	&lt;/script&gt;
	&lt;form&gt;
	&lt;input type="text" name="first-name" placeholder="John"/&gt;&lt;br/&gt;
	&lt;input class="selectedInput" type="text" name="last-name" autofocus/&gt;&lt;br/&gt;
	&lt;/form&gt;
</pre>
<h4>Après&#8230;</h4>
<pre class="brush:html">        	&lt;form&gt;
	&lt;input type="text" name="first-name" placeholder="John"/&gt;&lt;br/&gt;
	&lt;input type="text" name="last-name" autofocus/&gt;&lt;br/&gt;
	&lt;/form&gt;
</pre>
<div id="attachment_793" class="wp-caption alignnone" style="width: 300px"><img class="size-full wp-image-793" title="Exemple HTML 5 Autofocus" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/autofocus.jpg" alt="Exemple HTML 5 Autofocus" width="290" height="87" /><p class="wp-caption-text">Exemple HTML 5 Autofocus</p></div>
<h2>Attribut Required</h2>
<p>Permet de spécifier si un attribut est obligatoire. Si le champ reste vide au submit, il sera mis en évidence.</p>
<h4>Avant&#8230;</h4>
<pre class="brush:html">		 	&lt;script&gt;
		 		$(document).ready(function(){
					$(".verifForm").click(function(){
						if($(".required").val() == ""){
							alert("Vous devez remplir tous les champs...");
							return false;
						}
					});
				});
		 	&lt;/script&gt;
		 	&lt;form&gt;
		 		&lt;label&gt;Nom d'utilisateur : &lt;/label&gt;&lt;br/&gt;
		 		&lt;input class="required" type="text" name="username" value=""/&gt;&lt;br/&gt;
				&lt;label&gt;Mot de passe : &lt;/label&gt;&lt;br/&gt;
				&lt;input class="required" type="text" name="password" value=""/&gt;&lt;br/&gt;
				&lt;label&gt;Prénom : &lt;/label&gt;&lt;br/&gt;
				&lt;input type="text" name="subname" value=""/&gt;&lt;br/&gt;
				&lt;input class="verifForm" type="submit" name="submit" value="Save"/&gt;
		 	&lt;/form&gt;
</pre>
<h4>
<div id="attachment_795" class="wp-caption alignnone" style="width: 694px"><img class="size-full wp-image-795" title="Aperçu Required avant HTML5" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/required-before.jpg" alt="Aperçu Required avant HTML5" width="684" height="284" /><p class="wp-caption-text">Aperçu Required avant HTML5</p></div></h4>
<h4>Après&#8230;</h4>
<pre class="brush:html">		 	&lt;form&gt;
		 		&lt;label&gt;Nom d'utilisateur : &lt;/label&gt;&lt;br/&gt;
		 		&lt;input required="required" type="text" name="username" value=""/&gt;&lt;br/&gt;
				&lt;label&gt;Mot de passe : &lt;/label&gt;&lt;br/&gt;
				&lt;input required="required" type="text" name="password" value=""/&gt;&lt;br/&gt;
				&lt;label&gt;Prénom : &lt;/label&gt;&lt;br/&gt;
				&lt;input type="text" name="subname" value=""/&gt;&lt;br/&gt;
				&lt;input type="submit" name="submit" value="Save"/&gt;
		 	&lt;/form&gt;
</pre>
<h2>
<p><div id="attachment_794" class="wp-caption alignnone" style="width: 324px"><img class="size-full wp-image-794" title="Résultat attribut HTML5 Required" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/required-after.jpg" alt="Résultat attribut HTML5 Required" width="314" height="300" /><p class="wp-caption-text">Résultat attribut HTML5 Required</p></div></h2>
<h2>Champ email &amp; url</h2>
<p>Permet de spécifier un type de champ email ou url et execute des vérifications</p>
<h4>Avant&#8230;</h4>
<pre class="brush:html">        &lt;script&gt;
        	function isValidEmailAddress(emailAddress) {
				var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
				return pattern.test(emailAddress);
			}
			function isValidUrlAddress(urlAdress) {
				var pattern = new RegExp(/http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/);
				return pattern.test(urlAdress);
			}
            $(document).ready(function(){
            	$('.mail').blur(function(){
					if (!isValidEmailAddress($(this).val())) {
						alert("Email non valide !");
						return false;
					};
				});

				$('.url').blur(function(){
					if(!isValidUrlAddress($(this).val())){
						alert("URL non valide !");
						return false;
					}
				});
            });
        &lt;/script&gt;
		&lt;form&gt;
					&lt;label&gt;News Letter : &lt;/label&gt;&lt;br/&gt;
					&lt;input class="mail" type="text" placeholder="YouMail@provider.com" required /&gt;&lt;br/&gt;
					&lt;label&gt;Votre site Web : &lt;/label&gt;&lt;br/&gt;
					&lt;input class="url" type="text" name="yourWebSite" placeholder="www.yoursite.com"/&gt;&lt;br/&gt;
					&lt;input  type="submit" name="submit" value="Inscription"/&gt;
				&lt;/form&gt;
</pre>
<h4>
<p><div id="attachment_796" class="wp-caption alignnone" style="width: 747px"><img class="size-full wp-image-796" title="Check mail avant HTML5" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/check-mail-before.jpg" alt="Check mail avant HTML5" width="737" height="262" /><p class="wp-caption-text">Check mail avant HTML5</p></div>
<div id="attachment_797" class="wp-caption alignnone" style="width: 726px"><img class="size-full wp-image-797" title="Check URL avant HTML5" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/check-url-before.jpg" alt="Check URL avant HTML5" width="716" height="297" /><p class="wp-caption-text">Check URL avant HTML5</p></div>
<p>Après&#8230;</h4>
<pre class="brush:html">				&lt;form&gt;
					&lt;label&gt;News Letter : &lt;/label&gt;&lt;br/&gt;
					&lt;input type="email" placeholder="YouMail@provider.com" required /&gt;&lt;br/&gt;
					&lt;label&gt;Votre site Web : &lt;/label&gt;&lt;br/&gt;
					&lt;input type="url" name="yourWebSite" placeholder="www.yoursite.com"/&gt;&lt;br/&gt;
					&lt;input  type="submit" name="submit" value="Inscription"/&gt;
				&lt;/form&gt;
</pre>
<div id="attachment_798" class="wp-caption alignnone" style="width: 277px"><img class="size-full wp-image-798" title="Résultat Champ de type Mail HTML5" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/check-mail-after.jpg" alt="Résultat Champ de type Mail HTML5" width="267" height="209" /><p class="wp-caption-text">Résultat Champ de type Mail HTML5</p></div>
<p class="info">Les messages d&#8217;erreurs seront directement gérés par les navigateurs.</p>
<p>Il est également possible d&#8217;utiliser l&#8217;attribut &laquo;&nbsp;pattern&nbsp;&raquo; qui vous permettra de spécifier la structure des données saisies en lieu et place d&#8217;un REGEX javascript :</p>
<pre class="brush:html">&lt;input type="text" name="username" placeholder="Nom d'utilisateur" pattern="[A-Za-z]{4,10}"/&gt;</pre>
<p>Si vous êtes familier avec les expressions régulière vous aurez compris que le format accepté devra contenir uniquement des lettres de 4 à 10 caractères.</p>
<h3>Les nouveaux types de champs :</h3>
<p>Voici les différentes valeurs pouvant être attribuées :</p>
<ul>
<li> tel</li>
<li> search</li>
<li> url</li>
<li> email</li>
<li> datetime</li>
<li> date</li>
<li> month</li>
<li> week</li>
<li> time</li>
<li> datetime-local</li>
<li> number</li>
<li> range</li>
<li> color</li>
</ul>
<h2>Conclusion</h2>
<p>Certes ces nouveautés ne sont encore applicable que sur les navigateurs &laquo;&nbsp;WEBKIT&nbsp;&raquo; mais il est clair que ces nouveaux attributs seront disponible sous peu pour les navigateurs Mozilla (voir IE&#8230;). Alors n&#8217;hésitez pas à utiliser ces nouveaux attributs dès maintenant.</p>
<p>Lien : <a title="Documentation W3C sur les formulaires" href="http://www.w3.org/TR/html401/interact/forms.html#h-17.4" target="_blank">Documentation W3C</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/08/07/formulaires-html5-quoi-de-neuf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Speed tuts : local storage ou la sauvegarde locale</title>
		<link>http://sldesign.openwab.com/2010/08/06/speed-tuts-local-storage-ou-la-sauvegarde-locale/</link>
		<comments>http://sldesign.openwab.com/2010/08/06/speed-tuts-local-storage-ou-la-sauvegarde-locale/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 07:42:35 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[SpeedTuts]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=780</guid>
		<description><![CDATA[HTML 5 nous apporte de nombreuses et belles surprises dont un fait l&#8217;objet de ce tutoriel : &#171;&#160;localStorage&#160;&#187;. A vrai dire, cette fonctionnalité ne fait pas parti officiellement de HTML 5 mais y est lié indirectement. Le principe est simple, cette fonctionnalité vous permet de sauvegarder l&#8217;ensemble de vos données saisies en locale ; que [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F06%2Fspeed-tuts-local-storage-ou-la-sauvegarde-locale%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F08%2F06%2Fspeed-tuts-local-storage-ou-la-sauvegarde-locale%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>HTML 5 nous apporte de nombreuses et belles surprises dont un fait l&#8217;objet de ce tutoriel : &laquo;&nbsp;localStorage&nbsp;&raquo;. A vrai dire, cette fonctionnalité ne fait pas parti officiellement de HTML 5 mais y est lié indirectement.</p>
<p>Le principe est simple, cette fonctionnalité vous permet de sauvegarder l&#8217;ensemble de vos données saisies en locale ; que vous rafraichissiez la page ou que vous quittiez votre navigateur et le relancez sur la même page, vos données seront sauvegardées.</p>
<p>Nous allons voir dans ce tutoriel la façon d&#8217;implémenter &laquo;&nbsp;localStorage&nbsp;&raquo;.</p>
<p><span id="more-780"></span></p>
<hr class="clear_all" />
<h2>I &#8211; Introduction &amp; prérequis</h2>
<p>Avant de commencer, vous devez connaître le HTML 5 ainsi que l&#8217;utilisation du framework javascript jQuery.</p>
<p>Page de base :</p>
<pre class="brush:html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
 &lt;head&gt;
 &lt;meta name="generator" content="HTML Tidy, see www.w3.org"&gt;
 &lt;meta http-equiv="Content-Type" content= "text/html; charset=UTF-8"&gt;
 &lt;title&gt;Tutoriel local storage&lt;/title&gt;
 &lt;script type="text/javascript" src= "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;
 &lt;/script&gt;

 &lt;/head&gt;
 &lt;body&gt;

 &lt;/body&gt;
&lt;/html&gt;</pre>
<p>Vous trouverez ci-dessous la page qui nous servira de base pour ce tutoriel et qui intègre la bibliothèque jQuery</p>
<h2>II &#8211; Création d&#8217;un contenu éditable</h2>
<p>Un des nouveaux attributs de HTML 5 est &laquo;&nbsp;contenteditable&nbsp;&raquo;. Cet attribut vous permet de réaliser des éléments éditables par les utilisateurs. Pour mettre en place cet attribut</p>
<h4>Code HTML &#8211; zone de saisie :</h4>
<pre class="brush:html">	&lt;h5&gt;Todo Liste&lt;/h5&gt;
	&lt;ul class="editable" id="todoListe" contenteditable="true"&gt;
	    &lt;li&gt;
	    &lt;/li&gt;
	&lt;/ul&gt;
	&lt;p&gt;
	    &lt;button id="clearStorage"&gt;
	        Effacer mon localStorage
	    &lt;/button&gt;
	&lt;/p&gt;
</pre>
<div id="attachment_786" class="wp-caption alignnone" style="width: 246px"><img class="size-full wp-image-786" title="Liste éditable" src="http://sldesign.openwab.com/wp-content/uploads/2010/08/2.1-localstorage-content-editable.jpg" alt="Liste éditable" width="236" height="130" /><p class="wp-caption-text">Liste éditable</p></div>
<p>Jusque là, c&#8217;est bien mais lorsque vous quittez votre navigateur ou si vous rafraichissez votre page, le contenu ne sera pas sauvegardé&#8230; Comment faire sans pour autant poster nos données ?</p>
<h2>Utilisation de javascript</h2>
<p>Pour sauvegarder nos données, nous allons utiliser la propriété &laquo;&nbsp;localStorage&nbsp;&raquo; qui nous permettra de sauvegarder nos données en locale sans l&#8217;utilisation de cookies. Vous trouverez ci dessous le code javascript commenté qui nous permettra de réaliser cette opération.</p>
<h4>Code javascript :</h4>
<pre class="brush:js;first-line=14;">&lt;script type="text/javascript"&gt;
$(function(){
	var editable = document.getElementById('todoListe');

	//Action réalisée au focus
	$(editable).blur(function(){
		//Sauvegarde des données saisies dans un variable 'myStorage'
		localStorage.setItem('myStorage', this.innerHTML);
	});

	//Récupération de nos données en cas de chargement...
	if (localStorage.getItem('myStorage')) {
		editable.innerHTML = localStorage.getItem('myStorage');
	};

	//Fonction pour affacer le localStorage
	$('#clearStorage').click(function(){
		localStorage.clear();
		location.reload() ;
	});
});
&lt;/script&gt;
</pre>
<p>Une fois cette opération réalisée, sauvegardez votre fichier puis saisissez plusieurs lignes dans votre liste et sortez du focus. Vous pouvez maintenant fermer votre navigateur et le relancer ou encore rafraichir votre page, les données saisies seront sauvegardées.</p>
<h2>Code complet et ressources :</h2>
<h4>Code complet du tutoriel :</h4>
<pre class="brush:html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta name="generator" content="HTML Tidy, see www.w3.org"&gt;
        &lt;meta http-equiv="Content-Type" content= "text/html; charset=UTF-8"&gt;
        &lt;title&gt;Tutoriel local storage&lt;/title&gt;
        &lt;script type="text/javascript" src= "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;
        &lt;/script&gt;
        &lt;style type="text/css"&gt;
            .editable {
                background: #f5f5f5;
                border: 1px solid #000;
            }
        &lt;/style&gt;
        &lt;script type="text/javascript"&gt;
            $(function(){
                var editable = document.getElementById('todoListe');
                //Action réalisée au focus
                $(editable).blur(function(){
                    //Sauvegarde des données saisies dans un variable 'myStorage'
                    localStorage.setItem('myStorage', this.innerHTML);
                });

                //Récupération de nos données en cas de chargement...
                if (localStorage.getItem('myStorage')) {
                    editable.innerHTML = localStorage.getItem('myStorage');
                };

                //Fonction pour affacer le localStorage
                $('#clearStorage').click(function(){
                    localStorage.clear();
                    location.reload();
                });
            });
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
    	&lt;h5&gt;Todo Liste&lt;/h5&gt;
            &lt;ul class="editable" id="todoListe" contenteditable="true"&gt;
                &lt;li&gt;
                &lt;/li&gt;
            &lt;/ul&gt;
            &lt;p&gt;
                &lt;button id="clearStorage"&gt;
                    Effacer mon localStorage
                &lt;/button&gt;
            &lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>Compatibilité</h3>
<p>Au moment ou je vous parle, cette implémentation est compatible avec les navigateurs et versions suivantes (windows):</p>
<ul>
<li>Chrome 4 +</li>
<li>Firefox 3.6 +</li>
<li>IE 8 +</li>
<li>Opéra 10 +</li>
<li>Safari 4 +</li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/08/06/speed-tuts-local-storage-ou-la-sauvegarde-locale/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CodeIgniter Tutorial : Introduction et première application</title>
		<link>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/</link>
		<comments>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:34:15 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=566</guid>
		<description><![CDATA[Je ne suis pas un fan inconditionné des Frameworks PHP, ces derniers peuvent parfois s&#8217;avérer trop lourds pour certaines applications. L&#8217;apprentissage d&#8217;un framework PHP peut être fastidieu, et la documentation n&#8217;est pas toujours au rendez-vous. Puis un jour, j&#8217;ai découvert CodeIgniter ! Je vous propose un tour d&#8217;horizon de ce framework à travers le développement [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F20%2Fcodeigniter-tutorial-introduction-et-premiere-application%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F20%2Fcodeigniter-tutorial-introduction-et-premiere-application%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-570" style="margin: 5px;" title="codeigniter-splash-screen" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/codeigniter-splash-screen.jpg" alt="Splash screen CodeIgniter" width="238" height="245" />Je ne suis pas un fan inconditionné des Frameworks PHP, ces derniers peuvent parfois s&#8217;avérer trop lourds pour certaines applications. L&#8217;apprentissage d&#8217;un framework PHP peut être fastidieu, et la documentation n&#8217;est pas toujours au rendez-vous.</p>
<p>Puis un jour, j&#8217;ai découvert CodeIgniter ! Je vous propose un tour d&#8217;horizon de ce framework à travers le développement d&#8217;un petit CRM. Nous verrons ainsi comment intégré CodeIgniter et comment tirer parti de ces nombreux avantages.</p>
<p>Notes de versions : Cette article est amené à évolué. Etant mon premier tutoriel CodeIgniter, vos remarques et toute critique pouvant améliorer cet article seront les bienvenues <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Version 0.1 du 20 Juillet 2010</p>
<p>L&#8217;application présentée dans ce tutoriel n&#8217;a pas pour vocation d&#8217;être utilisée en production mais une version plus élaborée et complète sera prochainement disponible sur ce site.<br />
<span id="more-566"></span></p>
<hr class="clear_all" />
<h2>I &#8211; Framework PHP</h2>
<h3>Définition d&#8217;un Framework (Source Wiki) :</h3>
<blockquote><p>En programmation informatique, un <strong>framework</strong> est un <em>kit</em> de composants logiciels structurels, qui définissent les  fondations ainsi que les grandes lignes de l&#8217;organisation de tout ou  partie d&#8217;un logiciel (architecture). En programmation orientée objet un  framework est typiquement composé de classes mères qui seront dérivées et  étendues par héritage en fonction des besoins  spécifiques à chaque logiciel qui utilise le framework.</p>
<p>Les framework sont utilisés pour modeler l&#8217;architecture des logiciels applicatifs, des applications web, des middleware et des composants logiciels. Les framework sont  achetés par les ingénieurs, puis ajoutés comme partie intégrante des  logiciels applicatifs mis sur le marché, ils sont par conséquent  rarement achetés et installés séparément par un utilisateur final.</p>
<p>Des tentatives de francisation du terme ont été faites. On trouve  ainsi parfois les termes <strong>cadre d&#8217;applications</strong>, proposé par l&#8217;Office québécois de la  langue française ou <strong>cadriciel</strong>.  L&#8217;expression <strong>atelier de développement</strong> est également employée.</p>
<p>Un framework est un ensemble d&#8217;outils et de composants logiciels organisés conformément à un plan d&#8217;architecture et des design patterns. L&#8217;ensemble forme un <em>squelette</em> de programme. Il est souvent fourni sous la forme d&#8217;une bibliothèque logicielle, et  accompagné du plan de l&#8217;architecture cible du framework.Avec un framework orienté objets, le programmeur qui utilise le  framework pourra personaliser les éléments principaux du programme par  extension, en utilisant le mécanisme d&#8217;héritage: créer des nouvelles classes qui contiennent toutes les  fonctionnalités que met en place le framework, et en plus ses  fonctionnalités propres, créées par le programmeur en fonction des  besoins spécifiques à son programme. Le mécanisme d&#8217;héritage permet  également de transformer des fonctionnalités existant dans les classes  du framework.</p>
<p>Un framework est conçu en vue d&#8217;aider les programmeurs dans leur  travail. L&#8217;organisation du framework vise la productivité maximale du  programmeur qui va l&#8217;utiliser &#8211; gage de baisse des coûts de construction  du programme. Le contenu exact du framework est dicté par le type de  programme et l&#8217;architecture cible pour lequel il est concu.</p></blockquote>
<h3>2°) Les avantages d&#8217;un Framework</h3>
<p><strong>Recyclage du code :</strong> Le code est réutilisable, ceci signifie qu&#8217;il n&#8217;est plus nécessaire de coder 4 ou 5 fois la même chose pour des projets différents</p>
<p><strong>Fiabilité : </strong>Le code de ces Frameworks sont testés et maintenus par une grande communauté de développeurs.</p>
<p><strong>Débogage : </strong>le frameworks PHP ont leurs propres méthodes de débogage spécifiques qui  vous permettent de repérer facilement les erreurs dans votre  développement.</p>
<p><strong>Aide communautaire:</strong> Vous ne jamais se sentir seul  alors que le codage de ces cadres. Lorsque vous jamais ressenti aucune  pression, vous pouvez demander de l&#8217;aide dans les communautés. Il ya bon  nombres de développeurs, qui va sûrement aider dans votre  développement.</p>
<p class="info">Note : Pour plus d&#8217;information, je vous invite à consulter le livre blanc &laquo;&nbsp;<strong>frameworks php pour  l’entreprise</strong>&nbsp;&raquo; que vous pourrez découvrir à l&#8217;adresse suivante : <a title="Livre blanc : Frameworks PHP pour l'entreprise" href="http://www.clever-age.com/veille/publications/developpement-specifique/livre-blanc-frameworks-php-pour-l-entreprise.html" target="_blank">http://www.clever-age.com/veille/publications/developpement-specifique/livre-blanc-frameworks-php-pour-l-entreprise.html</a> (envoi après demande par mail).</p>
<h2>II &#8211; Présentation de CodeIgniter</h2>
<h3>1°) Sur le site de l&#8217;éditeur :</h3>
<blockquote><p>CodeIgniter  est un framework PHP puissant avec un très faible encombrement,  construit pour les codeurs PHP qui ont besoin d&#8217;une boîte à outils  simple et élégante pour créer des applications web complet. Si vous êtes un développeur qui vit dans le monde  réel de l&#8217;hébergement mutualisé et des comptes clients avec des délais,  et si vous êtes fatigué de cadres de grandes lourdement et de manière  approfondie sans-papiers</p></blockquote>
<p>J&#8217;ai choisi de diffuser cette définition car elle représente assez bien ce qu&#8217;est CodeIgniter. Si vous avez déjà testé Zend Framework ou encore Symphonie, vous allez rapidement vous rendre compte de ces petites différences qui font de CodeIgniter un Framework Simple, Intuitif et rapide à mettre en oeuvre.</p>
<h3>2°) Quelques références</h3>
<p>Vous trouverez une liste plus complète d&#8217;applications et de sites réalisés avec CodeIgniter mais si vous voulez voir tout de suite ce qu&#8217;il est possible de faire avec ce Framework, voici quelques ressources :</p>
<ul>
<li><a title="Exemple CodeIgniter - Club 3D" href="http://www.club-3d.com/" target="_blank">http://www.club-3d.com/</a></li>
<li><a title="Application Bamboo réalisée avec CodeIgniter" href="http://www.bambooinvoice.org/" target="_blank">http://www.bambooinvoice.org/</a></li>
<li><a title="CMS réalisé avec CodeIgniter" href="http://ionizecms.com/" target="_blank">http://ionizecms.com/</a></li>
</ul>
<h3>3°) Resources</h3>
<p>Une des forces de CodeIgniter (comme tout bon framework) est représenté par sa communauté et plus particulièrement sa communauté Française. Vous pouvez consulter les ressources &laquo;&nbsp;Françaises&nbsp;&raquo; à l&#8217;adresse suivante :<a title="Site Internet CodeIgniter France" href="http://codeigniter.fr/" target="_blank"> http://codeigniter.fr/</a>. Vous y trouverez la documentation, des tutoriels, ScreenCasts et un forum.</p>
<p>Si vous souhaitez plus de ressource, le site principal de CodeIgniter accessible à l&#8217;adresse suivante : <a title="Site principal CodeIgniter" href="http://codeigniter.com/" target="_blank">http://codeigniter.com/</a></p>
<h2>II &#8211; Introduction à CodeIgniter</h2>
<div class="info">
<p>Note : Les sections qui suivent requiers certains prérequis pour le bon suivi de ce didacticiel.</p>
<ul>
<li>Un éditeur de codes PHP &#8211; HTML &#8211; CSS &#8211; Javascript</li>
<li>Des connaissances dans les langages de programmation WEB &#8211; PHP &#8211; HTML &#8211; CSS &#8211; Javascript</li>
<li>Un serveur WAMP ou LAMP ou MAMP (selon votre OS)</li>
</ul>
<p><span style="text-decoration: underline;">Note de versions et outils :</span></p>
<ul>
<li>Version CodeIgniter : 1.7.2</li>
<li>Version PHP : 5</li>
<li>Editeur HTML &#8211; PHP : Aptana IDE</li>
<li>Framework jQuery et jQuery UI</li>
<li>Nom du projet :  crmIgniter &#8211; Un dossier portant ce nom est créé à la racine du serveur Apache &#8216;www/crmIgniter/&#8217;</li>
</ul>
<p><em>PS. Si vous ne comprenez pas un seul mot de ce qui est ci-dessus, passez votre chemin</em> <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
</div>
<h3>1°) Préparation du projet</h3>
<p>Lancer votre IDE puis créez un nouveau projet à la racine de votre serveur WEB &laquo;&nbsp;crmIgniter&nbsp;&raquo; (j&#8217;utilise AptanaIDE)</p>
<h3>2°) Téléchargement &amp; installation</h3>
<p>La première chose à faire, consiste à télécharger le Framework qui est matérialiser par une archive téléchargeable à l&#8217;adresse suivante : <a title="Lien de téléchargement dernière version CodeIgniter" href="http://codeigniter.com/download.php" target="_blank">http://codeigniter.com/download.php</a></p>
<p>Une fois téléchargé cette archive, vous pouvez l&#8217;extraire. Après extraction, vous découvrirez deux dossiers :</p>
<ul>
<li>Un dossier system</li>
<li>Un dossier user_guide</li>
</ul>
<p>Déplacez l&#8217;ensemble de son contenu dans votre répertoire &laquo;&nbsp;crmIgniter&nbsp;&raquo; de sorte que votre fichier &laquo;&nbsp;index.php&nbsp;&raquo; soit à la racine de votre projet (figure 2.1.1).</p>
<div id="attachment_582" class="wp-caption alignnone" style="width: 501px"><img class="size-full wp-image-582" title="2.2.1-ci-structure-projet" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.2.1-ci-structure-projet.jpg" alt="Contenu du repertoire crmIgniter" width="491" height="207" /><p class="wp-caption-text">Figure 2.2.1 - Contenu du repertoire crmIgniter</p></div>
<p>Regardons d&#8217;un peu plus prêt la structure du Framework et plus particulièrement le dossier &laquo;&nbsp;system&nbsp;&raquo; qui contient entre autre :</p>
<ul>
<li>Le dossier &laquo;&nbsp;codeigniter&nbsp;&raquo; correspond au Framework lui-même</li>
<li>Le dossier &laquo;&nbsp;application&nbsp;&raquo; dans lequel sera stocké notre application</li>
<li>Le dossier &laquo;&nbsp;helpers&nbsp;&raquo; regroupant des outils de manipulation PHP</li>
<li>Le dossier &laquo;&nbsp;librarie&nbsp;&raquo; regroupant des bibliothèques de fonctions PHP</li>
</ul>
<p>CodeIgniter est un Framework développé selon  le principe du MVC &#8211; Model View Controller. Je vous renvoie à l&#8217;adresse suivante pour la définition complète de ce qu&#8217;est le MVC : <a title="Définition MVC" href="http://dico.developpez.com/html/3020-Conception-MVC-Model-View-Controller.php" target="_blank">http://dico.developpez.com/html/3020-Conception-MVC-Model-View-Controller.php</a></p>
<p>Ouvrons maintenant notre dossier &laquo;&nbsp;application&nbsp;&raquo; et détaillons son contenu :</p>
<ul>
<li>Le dossier &laquo;&nbsp;config&nbsp;&raquo; qui contient nos données de configuration</li>
<li>Le dossier &laquo;&nbsp;controllers&nbsp;&raquo; contenant des fichiers de class qui sont liés à nos URL</li>
<li>Le dossier &laquo;&nbsp;view&nbsp;&raquo; correspondant aux vues</li>
</ul>
<p>Comme un exemple vaut mieux qu&#8217;un grand discourt, tapez l&#8217;adresse suivant dans votre navigateur &laquo;&nbsp;http://localhost/crmIgniter/index.php/welcome/&nbsp;&raquo;. Après avoir validé l&#8217;URL, vous devriez voir s&#8217;afficher la page de bienvenue (figure 2.2.2)</p>
<div id="attachment_583" class="wp-caption alignnone" style="width: 747px"><img class="size-full wp-image-583" title="2.2.2-ci-welcome-page" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.2.2-ci-welcome-page.jpg" alt="Page de bienvenue CodeIgniter" width="737" height="303" /><p class="wp-caption-text">Figure 2.2.2 - Page de bienvenue CodeIgniter</p></div>
<p>Essayons de comprendre&#8230; nous avons une URL dont le trigger est &laquo;&nbsp;welcome&nbsp;&raquo;, le contrôleur portant le même nom va s&#8217;executer. Regardons de plus prêt le contenu du fichier &laquo;&nbsp;/controllers/welcome.php&nbsp;&raquo; :</p>
<p>Code PHP :</p>
<pre class="brush:php">&lt;?php

class Welcome extends Controller {

 function Welcome()
 {
 parent::Controller();
 }

 function index()
 {
 $this-&gt;load-&gt;view('welcome_message');
 }
}

/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */</pre>
<p>Ce fichier est une class et la fonction principale &laquo;&nbsp;index()&nbsp;&raquo; execute l&#8217;action &laquo;&nbsp;load-&gt;view&nbsp;&raquo;. Nous somme donc dans un contexte POO. Le &laquo;&nbsp;$this&nbsp;&raquo; définie notre application, en somme, nous pourrions traduire celas par &laquo;&nbsp;Mon application charge la vue &#8216;welcome_message&#8217;.</p>
<p>Si nous regardons à l&#8217;intérieur de notre dossier &laquo;&nbsp;view&nbsp;&raquo;, nous devrions trouver un fichier &laquo;&nbsp;welcome_message.php&nbsp;&raquo;. En ouvrant ce fichier, nous pouvons consulter le code HTML qui le compose.</p>
<h2>III &#8211; Notions de bases</h2>
<h3>1°) Modèle MVC</h3>
<p>Le <strong>Modèle-Vue-Contrôleur</strong> (en abrégé <strong>MVC</strong>, de l&#8217;anglais <em>Model-View-Controller</em>)  est une architecture et une méthode de conception qui  organise l&#8217;interface homme-machine (IHM) d&#8217;une  application logicielle. Ce paradigme divise l&#8217;IHM en un modèle (modèle de données), une vue (présentation, interface  utilisateur) et un contrôleur (logique de contrôle, gestion des  événements, synchronisation), chacun ayant un rôle précis dans  l&#8217;interface. Cette méthode a été mise au point en 1979 par Trygve Reenskaug, qui travaillait alors sur Smalltalk dans les laboratoires de recherche Xerox  PARC.</p>
<p>Pour faire plus simple, il s&#8217;agit simplement d&#8217;un model qui sépare la présentation du code.</p>
<div id="attachment_640" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-640" title="MVC en image" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/mvc-php-codeigniter-300x283.png" alt="Schéma MVC" width="300" height="283" /><p class="wp-caption-text">Figure 3.1.1 - Organisation MVC</p></div>
<h3>2°) Chargement des vues et URL</h3>
<p>Le schéma de fonctionnement dans CodeIgniter est le suivant :</p>
<p>Le contrôleur principal analyse l&#8217;URL et va charger une vue, cette vue étant exécutée par une fonction</p>
<h2>IV &#8211; Tutoriel Projet crmIgniter &#8211; Réalisation d&#8217;un CRM avec CodeIgniter</h2>
<p>Introduction et notes : La réalisation de cette application se fait dans le cadre d&#8217;un tutoriel et n&#8217;a pas pour vocation à être mis en production. Le code est à vocation didacticiel et n&#8217;est pas optimisé ni sécurisé. Ce tutoriel évoluera au fil de l&#8217;application et servira de base à d&#8217;autres articles.</p>
<h3>1°) Configuration</h3>
<p>Nous allons commencer à configurer notre projet. Pour cela, ouvrez le dossier &#8216;application/config/&#8217; dans votre éditeur.  ce dossier contient l&#8217;ensemble des fichiers de configuration. Nous allons commencer par éditer notre fichier &#8216;config.php&#8217;. Vous devez simplement renseigner / modifier les élements de ce fichier. J&#8217;ai simplement modifier l&#8217;URL de base :</p>
<pre class="brush:php">$config['base_url']    = "http://localhost/crmIgniter/";</pre>
<p>Configurons maintenant notre base de données. Dans un premier temps, créez une base de données MySql &laquo;&nbsp;crmIgniter&nbsp;&raquo;, ne créz pas de table pour le moment, nous verrons cela ultérieurement.</p>
<p>Ouvrez votre fichier &laquo;&nbsp;application/config/database.php&nbsp;&raquo; puis  renseignez les éléments de ce fichier.</p>
<pre class="brush:php;first-line:37;">$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "crmIgniter";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

/* End of file database.php */
/* Location: ./system/application/config/database.php */</pre>
<p>Nous reviendrons ultérieurement sur ces fichiers de configuration.</p>
<h3>2°) Les contrôleur CodeIgniter</h3>
<p>Un contrôleur est simplement une class qui est nommée dans le but d&#8217;être chargée en fonction d&#8217;une URL.</p>
<p>L&#8217;exemple suivant : &laquo;&nbsp;http://www.monsite.com/articles/</p>
<p>chargera la class &laquo;&nbsp;articles&nbsp;&raquo;. Ce contrôleur devra contenir des fonctions permettant de charger des vues. Par défaut, la fonction &laquo;&nbsp;index()&nbsp;&raquo; chargera la vue par défaut</p>
<pre class="brush:php">class articles{
    function index(){
    //Code à executer
    }
}</pre>
<p>Il est possible de charger un contrôleur par défaut, cette opération peut se faire en éditant le fichier &laquo;&nbsp;<dfn>application/config/routes.php&nbsp;&raquo;</dfn></p>
<pre class="brush:php">$route['default_controller'] = '<var>articles</var>';
</pre>
<p>Il vous est possible de passer des segments d&#8217;URL dans vos fonctions :</p>
<pre class="brush:php">example.com/index.php/products/shoes/sandals/123</pre>
<pre class="brush:php">&lt;?php
class Products extends Controller {

function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
?&gt;</pre>
<h3>3°) Les vues CodeIgniter</h3>
<p>Une vue est simplement une page WEB ou un fragment de page WEB. Cette vue est chargée par le contrôleur en relation avec L&#8217;URL</p>
<p>Code HTML &#8211; Exemple du contenu d&#8217;une vue</p>
<pre class="brush:php">code
</pre>
<p>Nous l&#8217;avons vu précédemment, cette vue est chargée par le contrôleur et la fonction qui permet de charger une vue est la suivante :</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $this-&gt;load-&gt;view('blogview');
 }
}
?&gt;</pre>
<p>Il vous est possible de charger plusieurs vues si nécessaire.</p>
<p>Vous pouvez également transférer des données à votre vue depuis votre contrôleur.</p>
<pre class="brush:php"><code>$data = array(
 'title' =&gt; 'My Title',
 'heading' =&gt; 'My Heading',
 'message' =&gt; 'My Message'
 );

 $this-&gt;load-&gt;view('blogview', <var>$data</var>);</code></pre>
<p>ou encore :</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $data['title'] = "My Real Title";
 $data['heading'] = "My Real Heading";

 $this-&gt;load-&gt;view('blogview', $data);
 }
}
?&gt;</pre>
<p>Enfin, CodeIgniter utilise une façon particulière de boucler les données d&#8217;un tableau</p>
<pre class="brush:php">&lt;?php
class Blog extends Controller {

 function index()
 {
 $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

 $data['title'] = "My Real Title";
 $data['heading'] = "My Real Heading";

 $this-&gt;load-&gt;view('blogview', $data);
 }
}
?&gt;</pre>
<p>Code HTML</p>
<pre class="brush:html">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;&lt;?php echo $title;?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;&lt;?php echo $heading;?&gt;&lt;/h1&gt;

&lt;h3&gt;My Todo List&lt;/h3&gt;    

&lt;ul&gt;
&lt;?php foreach($todo_list as $item):?&gt;

&lt;li&gt;&lt;?php echo $item;?&gt;&lt;/li&gt;

&lt;?php endforeach;?&gt;
&lt;/ul&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Vous pouvez si vous le souhaiter utiliser une syntaxe classique.</p>
<h3>4°) Les helpers</h3>
<p>Les helpers sont des bibliothèques de fonctions qui permettent de manipuler des données ; il en existe plusieurs sortes, on peut citer entre autre le helper &laquo;&nbsp;url&nbsp;&raquo; permettant de manipuler les chaines d&#8217;URL ou encore l&#8217;helper &laquo;&nbsp;email&nbsp;&raquo; permettant de manipuler les chaines d&#8217;email.</p>
<p>Il existe différentes façon de charger ces helpers, soit un par un ou via un tableau si vous devez en charger plusieurs. Cette opération est exécutée dans le constructeur de vos models.</p>
<pre class="brush:php">
<pre>class maClass extends Controller{
    function maClass(){
        parent::Controller();
        $this-&gt;load-&gt;helper('url');
        $this-&gt;load-&gt;helper('email');
    }
}</pre>
</pre>
<p>est équivalent à</p>
<pre class="brush:php">class maClass extends Controller{
    function maClass(){
        parent::Controller();
        $this-&gt;load-&gt;helpers(aray('url','email'));
    }
}</pre>
<p>Dans le cadre de mon application, je vais avoir besoin de manipuler différents types de données, voici les helpers que je vais charger :</p>
<pre class="brush:php">function home(){

 //Constructeur
 parent::Controller();

 //Chargement des helpers
 $this-&gt;load-&gt;helpers(
 array(
 'url',
 'email',
 'array',
 'html',
 'date',
 'form'
 ));

 }</pre>
<p>La documentation CodeIgniter étant très bien réalisé, n&#8217;hésitez pas à consulter cette dernière pour en savoir plus sur les helpers.</p>
<h3>5°) URL Rewriting ou comment modifier les URL CodeIgniter</h3>
<p class="info">Note : Cette section impose que votre serveur Apache soit configuré pour accépter &laquo;&nbsp;l&#8217;URL Rewriting&nbsp;&raquo;, si ce n&#8217;est pas le cas, vous devez activer le module d&#8217;URL Rewriting. Si vous souhaitez en savoir plus sur l&#8217;URL Rewriting, voici quelques ressources :</p>
<p class="info"><a title="Site d'informations et de ressources sur l'URL Rewriting" href="http://www.urlrewriting.fr/" target="_blank">http://www.urlrewriting.fr/</a></p>
<p class="info"><a title="Documentation sur les URL CodeIgniter" href="http://codeigniter.com/user_guide/general/urls.html" target="_blank">http://codeigniter.com/user_guide/general/urls.html</a></p>
<p>Comme vous avez pu le remarquer, pour accéder à notre page &laquo;&nbsp;home&nbsp;&raquo;, nous avons une URL de ce type :  http://localhost/crmIgniter/index.php/home/. Nous allons voir comment modifier l&#8217;URL d&#8217;accès et avoir une URL plus propre. Ceci peut être réalisé en utilisant une règle simple,  qui est stocké dans un fichier nommé &laquo;&nbsp;.Htaccess&nbsp;&raquo; .</p>
<p>Ce que  le. Htaccess nous permet de faire, c&#8217;est créer une série de règles. Alors tout  d&#8217;abord, vous devez créer un fichier nommé. Htaccess à la racine de votre application WEB (ou dans le répertoire où vous avez index.php).</p>
<p>Saisissez le code ci-dessous dans votre fichier &laquo;&nbsp;.htaccess&nbsp;&raquo; :</p>
<p>Code du fichier htaccess :</p>
<pre class="brush:plain">DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</pre>
<p>Quelques explications :</p>
<ul>
<li>On défini l&#8217;index</li>
<li>Activation du moteur de réécriture</li>
<li>Défini les conditions de réécriture</li>
<li>Active les régles de réécriture</li>
</ul>
<p>Vous pouvez tester et entrer l&#8217;URL &laquo;&nbsp;http://localhost/crmIgniter/home/&nbsp;&raquo; dans votre navigateur.</p>
<p>La dernière étape cosniste à modifier notre fichier de configuration et plus particulièrement la section &laquo;&nbsp;$config['index_page'] = &laquo;&nbsp;index.php&nbsp;&raquo;; &#8211; il suffit d&#8217;effacer &laquo;&nbsp;index.pp&nbsp;&raquo; afin de laisser vide la valeur de notre &laquo;&nbsp;index_page&nbsp;&raquo;. Ceci aura pour effet de retirer les &laquo;&nbsp;index.php/&nbsp;&raquo; dans nos liens.</p>
<h3>6°) Création d&#8217;un template CodeIgniter.</h3>
<p>A ce stade, nous devons à chaque chargement de fichier répéter nos en-tête, nos footer&#8230; Ceci n&#8217;est pas très pratique l&#8217;orsque l&#8217;on a l&#8217;habitude d&#8217;utiliser un système de pseudo Frame ou de charger des templates. Nous allons donc créer un système de template.</p>
<p>Etape 1 &#8211; Création du contrôleur principal</p>
<p>Créez un fichier application.php dans votre répertoire contrôleur, ce fichier nous servira de contrôleur principal :</p>
<p>Code du contrôleur principal :</p>
<pre class="brush:php">&lt;?php
class application extends Controller{

//Constructeur
function application(){
parent::Controller();
}

//Function index
function index(){
$this-&gt;load-&gt;view('template');
}
}
</pre>
<p>Vous pouvez ensuite créer la vue principale relative à notre contrôleur, dans notre exemple il s&#8217;agit du fichier template.php :</p>
<p>Code du fichier template.php</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
$this-&gt;load-&gt;view('crmContent');
$this-&gt;load-&gt;view('crmFooter');
?&gt;
</pre>
<p>Dernière étape, créer les différents blocs qui composent notre template :</p>
<ul>
<li>crmHeader</li>
<li>crmNav</li>
<li>crmContent</li>
<li>crmFooter</li>
</ul>
<p>Code du fichier crmHeader :</p>
<pre class="brush:php">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;crmIgniter - CodeIgniter CRM Application&lt;/title&gt;
&lt;meta name="description"
 content="crmIgniter - un CRM réalisé avec le Framework PHP CodeIgniter" /&gt;
 &lt;base href="http://localhost/crmIgniter/" /&gt;
&lt;link href="design/style.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="js/jQuery/css/ui-lightness/jquery-ui-1.8.2.custom.css"/&gt;
&lt;script type="text/javascript" src="js/jQuery/js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/jQuery/js/jquery-ui-1.8.2.custom.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="header"&gt;
&lt;h1&gt;crmIgniter&lt;/h1&gt;
&lt;h2&gt;CodeIgniter CRM&lt;/h2&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmNav</p>
<pre class="brush:php">&lt;div id="crmNav"&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="users" title="Gestion des utilisateurs"&gt;Utilisateurs&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="accounts" title="Gestion des comptes"&gt;Comptes&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="business" title="Gestion des affaires"&gt;Affaires&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmContent</p>
<pre class="brush:php">&lt;div id="content"&gt;
&lt;h3&gt;Contenu de l'application...&lt;/h3&gt;
&lt;/div&gt;</pre>
<p>Code du fichier crmFooter</p>
<pre class="brush:php">&lt;div id="footer"&gt;
&lt;p&gt;&amp;copy; - openWab &amp;amp; CodeIgniter - crmIgniter 2010 - &lt;a href="mailto:#"&gt;Contact&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Vous l&#8217;aurez compris, il n&#8217;y aura plus qu&#8217;à modifier les fichier de contenu (matérialisé ici par le fichier crmContent.php).</p>
<p class="info">Note : Il existe d&#8217;autres méthodes mais j&#8217;ai souhaité vous présenter celle là dans un premier temps afin de vous expliquer la structure du projet. Si vous le souhaitez, il existe une librairie réalisée par un utilisateur de CodeIgniter permettant l&#8217;intégration de vues partielles. Vous pouvez consulter les informations relatives à cette librairie sur le Forum de CodeIgniter : <a title="Librairie CodeIgniter partial view - Forum CodeIgniter" href="http://codeigniter.com/forums/viewthread/62366/" target="_blank">http://codeigniter.com/forums/viewthread/62366/</a></p>
<p>Voici le résultat en image (figure 4.6.1):</p>
<div id="attachment_646" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-646" title="4.6.1-ci-Interface principale crmIgniter" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.6.1-ci-main-users-interface-300x176.jpg" alt="Interface principale crmIgniter" width="300" height="176" /><p class="wp-caption-text">Figure 4.6.1 - Interface principale crmIgniter</p></div>
<h3>7°) Syntaxe alternative des vues</h3>
<p>CodeIgniter vous permet d&#8217;utiliser une syntaxe alternative dans vos vues en lieu et place du &laquo;&nbsp;&lt;?php echo [variable ou fonction]; ?&gt;</p>
<p>Vous pouvez utiliser la syntaxe suivante :</p>
<pre class="brush:php">&lt;?=$variable?&gt;
</pre>
<p class="info">Note : Avant de pouvoir utiliser cette fonction, il est nécessaire d&#8217;activer les &laquo;&nbsp;Short tag&nbsp;&raquo; dans le php.ini.</p>
<pre class="brush:php">&lt;?=$variable?&gt;
</pre>
<p>D&#8217;autres syntaxes sont disponibles notamment en ce qui concerne les structures de contrôle</p>
<pre class="brush:php"><code>&lt;ul&gt;

 <var>&lt;?php foreach($todo as $item): ?&gt;</var>

 &lt;li&gt;<var>&lt;?=$item?&gt;</var>&lt;/li&gt;

 <var>&lt;?php endforeach; ?&gt;</var>

 &lt;/ul&gt;</code></pre>
<p>Reportez-vous à la documentation si vous souhaitez utiliser les syntaxes courtes : <a title="Documentation des syntaxes alternatives CodeIgniter" href="http://codeigniter.com/user_guide/general/alternative_php.html" target="_blank">http://codeigniter.com/user_guide/general/alternative_php.html</a></p>
<h3>8°) Notre module Utilisateurs</h3>
<p>Nous allons dans cette section créer notre premier module. Nous nous intéresserons au module utilisateurs qui permet entre autre de lister, créer ou modifier les utilisateurs.</p>
<h4>Étape 1 &#8211; Création du contrôleur et des vues</h4>
<p>Dans votre dossier contrôleur, créez un fichier &laquo;&nbsp;users.php&nbsp;&raquo;, ce sera notre contrôleur principal dont voici le code :</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 function index(){
 $this-&gt;load-&gt;view('users_module');
 }
}</pre>
<p>Rien de spécifique, ce module va simplement charger la vue &laquo;&nbsp;users_module&nbsp;&raquo; que nous allons créer. Cette vue va simplement lister les actions pouvant être executées.</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;div id="content"&gt;
&lt;a href="users/add_user/" title="nouvel utilisateur"&gt;Nouvel utilisateur&lt;/a&gt;
&lt;a href="users/list_users/" title="Liste des utilisateurs"&gt;Liste des utilisateurs&lt;/a&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>Nous allons maintenant modifier notre contrôleur en y ajoutant une fonction &laquo;&nbsp;add_user&nbsp;&raquo; :</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 function index(){
 $this-&gt;load-&gt;view('users_module');
 }

 function add_user(){
 $this-&gt;load-&gt;view('user_add_new');
 }
}</pre>
<p>Créez maintenant la vue &laquo;&nbsp;user_add_new&nbsp;&raquo;</p>
<p>Code du fichier user_add_new.php :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Nouvel utilisateur::&lt;/h3&gt;
&lt;p&gt;Cette interface vous permet d'ajouter un nouvel utilisateur&lt;/p&gt;
&lt;p&gt;&lt;a href="users/"&gt;retour&lt;/a&gt;&lt;/p&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>Cliquez sur le lien &laquo;&nbsp;Nouvel utilisateur&nbsp;&raquo; et vous devriez voir notre nouvelle vue.</p>
<p>Vous pouvez réaliser les mêmes opération pour la vue &laquo;&nbsp;list_users&nbsp;&raquo; ; vous trouverez ci-dessous les différents codes dont notre contrôleur complet.</p>
<pre class="brush:php">&lt;?php
class users extends Controller{

 function users(){
 parent::Controller();

 }

 //Fonction index chargeant la vue par défaut
 function index(){
 $this-&gt;load-&gt;view('users_module');
 }

 //Fonction add_user permettant d'ajouter un utilisateur
 function add_user(){
 $this-&gt;load-&gt;view('user_add_new');
 }

 //Fonction list_user listant les utilisateurs
 function list_users(){
 $this-&gt;load-&gt;view('users_list');
 }

 //Fonction update_user pour modifier un utilisateur
 function update_user(){
 $this-&gt;load-&gt;view('user_update');
 }

 //Fonction user_delete supression d'un utilisateur
 function delete_user(){
 $this-&gt;load-&gt;view('user_delete');
 }
}</pre>
<h4>Etape 2 &#8211; Création du formulaire d&#8217;ajout d&#8217;utilisateur</h4>
<p>Ouvrez votre fichier user_add_new.php, nous allons réaliser notre formulaire d&#8217;ajout de données puis réaliser l&#8217;enregistrement dans notre base de données :</p>
<p>Avant toute chose, veillez à charger les helper &laquo;&nbsp;Form&nbsp;&raquo; ; ce helper permet la manipulation de formulaires.Ce helper vous permet entre autre de générer des formulaires et des champs de formulaires. Vous trouverez ci-dessous le code de notre fichier &laquo;&nbsp;user_add_new&nbsp;&raquo; :</p>
<pre class="brush:php;first-line:7">&lt;?php
//Initialisation des attributs du formulaire
$formAtt = array('id'=&gt;'add_user','class'=&gt;'standardForm');

//Overture du formulaire
echo form_open("",$formAtt);

//Ajout d'un champ hidden
echo form_hidden("id",'');

//Labels + Champs de type texte
echo form_label("Nom d'utilisateur : ");
echo form_input('username');
echo form_label("Mot de passe : ");
echo form_input('password');

//Initialisation des valeurs d'un dropdown (select)
$titles = array(
 'Madame'=&gt;'Madame',
 'Mademoiselle'=&gt;'Mademoiselle',
 'Monsieur'=&gt;'Monsieur'
);
echo form_label("Civilité : ");
echo form_dropdown("title",$titles);

echo form_label("Nom : ");
echo form_input('name');
echo form_label("Prénom : ");
echo form_input('subname');
echo form_label("Email : ");
echo form_input('mail');
echo form_label("Fonction : ");
echo form_input('role');

//Génération du bouton submit
echo form_submit("add_user","Enregistrer");

//Fermeture du formulaire
echo form_close()
?&gt;</pre>
<p>Voici le code HTML généré par l&#8217;utilisation du helper et des fonctions qui y sont liées :</p>
<p>Code HTLM généré :</p>
<pre class="brush:html">&lt;form action="http://localhost/crmIgniter/" method="post" id="add_user"
 class="standardForm"&gt;
&lt;input type="hidden" name="id" value="" /&gt;
&lt;label&gt;Nom d'utilisateur : &lt;/label&gt;
&lt;input type="text" name="username" value="" /&gt;
&lt;label&gt;Mot de passe : &lt;/label&gt;&lt;input type="text" name="password" value="" /&gt;
&lt;label&gt;Civilité: &lt;/label&gt;
&lt;select name="title"&gt;
 &lt;option value="Madame"&gt;Madame&lt;/option&gt;
 &lt;option value="Mademoiselle"&gt;Mademoiselle&lt;/option&gt;
 &lt;option value="Monsieur"&gt;Monsieur&lt;/option&gt;
&lt;/select&gt;
&lt;label&gt;Nom : &lt;/label&gt;
&lt;input type="text" name="name" value="" /&gt;
&lt;label&gt;Prénom: &lt;/label&gt;
&lt;input type="text" name="subname" value="" /&gt;
&lt;label&gt;Email : &lt;/label&gt;&lt;input type="text" name="mail" value="" /&gt;
&lt;label&gt;Fonction : &lt;/label&gt;
&lt;input type="text" name="role" value="" /&gt;
&lt;input type="submit" name="add_user" value="Enregistrer" /&gt;
&lt;/form&gt;</pre>
<p class="info">Note : Je n&#8217;ai pas testé l&#8217;efficacité de ce helper en terme de performance mais son utilisation peut faire gagner un peu de temps en terme de développement.</p>
<p>Voici le résultat en image (Figure 4.8.1) :</p>
<div id="attachment_647" class="wp-caption alignnone" style="width: 205px"><img class="size-medium wp-image-647" title="CodeIgniter - Formulaire ajout d'un utilisateur" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.1-ci-formulaire-add-new-user-195x300.jpg" alt="CodeIgniter - Formulaire ajout d'un utilisateur" width="195" height="300" /><p class="wp-caption-text">Figure 4.8.1 - Formulaire ajout d&#39;un utilisateur </p></div>
<h4>Étape 3 &#8211; Traitement du formulaire</h4>
<p>Reste à récupérer les données et à les insérer dans notre formulaire. Pour cela, nous allons utilise la class &laquo;&nbsp;database&nbsp;&raquo;, il est don cnecessaire de l&#8217;initialiser dans notre contrôleur :</p>
<pre class="brush:php">//Chargement de la class database
$this-&gt;load-&gt;database();
</pre>
<p>Ensuite, nous pouvons l&#8217;utiliser simplement en stockant les données de notre formulaire dans un tableau :</p>
<pre class="brush:php;first-line:47">&lt;?php
//Traitement des données du formulaire

//Récupération des variables post
if(isset($_POST['add_user'])){
 $newUser = array(
 'id'=&gt;$_POST['id'],
 'username'=&gt;$_POST['username'],
 'password'=&gt;sha1($_POST['password']),
 'title'=&gt;$_POST['title'],
 'name'=&gt;$_POST['name'],
 'subname'=&gt;$_POST['subname'],
 'mail'=&gt;$_POST['mail'],
 'role'=&gt;$_POST['role']
 );
 //Insert
 $this-&gt;db-&gt;insert('users', $newUser); 

 echo '&lt;p&gt;Enregistrement inséré&lt;/p&gt;';
}

?&gt;</pre>
<h4>Etape 4 &#8211; Lister des données</h4>
<p>Comme vous avez pu le voir, les opérations sur les bases de données sont facilité avec l&#8217;utilisation de cette class. Nous allons voir comment lister des données provenant de notre base de données. Pour cela, nous utiliserons la class &laquo;&nbsp;pagination&nbsp;&raquo;, cette class permet de générer facilement des pages de résultats et une navigation entre ses pages.</p>
<p>La première étape consiste à initialiser nos bibliothèque. Voici le code du Contrôleur &laquo;&nbsp;users&nbsp;&raquo; dans lequel j&#8217;ai initialiser deux librairies. La librairie &laquo;&nbsp;pagination&nbsp;&raquo; pour naviguer entre les pages et la librairie &laquo;&nbsp;table&nbsp;&raquo; qui va nous permettre d&#8217;afficher nos résultats dans un tableau.</p>
<pre class="brush:php;first-line:21;">//Chargement de la librairie pagination
 $this-&gt;load-&gt;library('pagination');

 //Chargement de la librairie table
 $this-&gt;load-&gt;library('table');</pre>
<p>Une fois ses paramètres initialisés, nous pouvons les utiliser à travers différentes méthodes et options. Vous trouverez ci-dessous le code de notre fonction &laquo;&nbsp;users_list()&nbsp;&raquo; de notre contrôleur &laquo;&nbsp;users&nbsp;&raquo;.</p>
<pre class="brush:php;first-line:33;">//Fonction list_user listant les utilisateurs
 function list_users(){

 //Chargement de la librairie table
 $this-&gt;load-&gt;library('table');

 //Chargement de la librairie pagination
 $this-&gt;load-&gt;library('pagination');

 //Défini l'URL de base
 $config['base_url'] = 'http://localhost/crmIgniter/users/list_users/';

 //Initialise le nombre total d'enregistrements
 $config['total_rows'] = $this-&gt;db-&gt;get('users')-&gt;num_rows();

 //Initialise le nombre d'enregistrements à afficher par page
 $config['per_page'] = '10';
 $config['num_links'] = '10';
 $config['full_tag_open'] = '&lt;p&gt;';
 $config['full_tag_close'] = '&lt;/p&gt;';

 //Initialisation de notre pagination
 $this-&gt;pagination-&gt;initialize($config);        

 //Execution de la requête - Voir documentation http://codeigniter.com/user_guide/database/active_record.html
 $this-&gt;db-&gt;select('id,title,name,subname,mail');
 $data['records'] = $this-&gt;db-&gt;get('users',$config['per_page'],$this-&gt;uri-&gt;segment(3));

 //Chargement de la vue et transfert des données à notre vue
 $this-&gt;load-&gt;view('users_list',$data);

 }</pre>
<p><span style="text-decoration: underline;"><strong>Quelques explication :</strong></span></p>
<ol>
<li><strong>Chargement de nos librairies.</strong>
<ol>
<li>L&#8217;url sert à indiquer au script après quels éléments il devra insérer le numéro d&#8217;enregistrement</li>
<li>On récupére le nombre total d&#8217;enregistrement afin de calculer le nombre de page</li>
<li>On configure le nombre d&#8217;enregistrement par page</li>
<li>On  configure le nombre maximum de liens à afficher</li>
<li>On configure les balises qui engloberons nos liens de pagination</li>
<li>Initialisation globale de notre pagination</li>
</ol>
</li>
<li><strong>Exécution de la requête</strong></li>
<li><strong>Chargement de la vue</strong></li>
</ol>
<p>Il ne reste plus qu&#8217;à exécuter cela dans notre vue, ouvrez votre vue &laquo;&nbsp;users_list.php&nbsp;&raquo; et éditez le code comme ci-dessous</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Liste des utilisateurs::&lt;/h3&gt;
&lt;div&gt;
&lt;?php

//Initialisation des en-tête de notre tableau
echo $this-&gt;table-&gt;set_heading('ID','Titre','Nom','Prénom','Email');

//Initialisation de notre tableau
echo $this-&gt;table-&gt;generate($records);//Données récupérées de $data['records'] du contrôleur

//Initialisation de la pagination
echo $this-&gt;pagination-&gt;create_links();

?&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p><span style="text-decoration: underline;"><strong>Quelques explications : </strong></span></p>
<ol>
<li>Chargement de notre template</li>
<li>Initialisation des en-têtes de notre tableau set_heading()</li>
<li>Initialisation du tableau</li>
<li>Initialisation de la pagination</li>
<li>Chargement du footer</li>
</ol>
<p>Nous pouvons maintenant afficher nos résultats. Le tableau n&#8217;est pas  mis en forme mais vous pouvez déjà naviguer dans votre tableau. Reste à  appliquer un beau CSS à notre table.</p>
<p>Vous trouverez en figure 4.8.2 le résultat obtenu :</p>
<div id="attachment_648" class="wp-caption alignnone" style="width: 588px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.2-ci-pagination-resultat-1.jpg"><img class="size-full wp-image-648" title="Table et pagination CodeIgniter" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.2-ci-pagination-resultat-1.jpg" alt="Tableau et pagination générés avec la class HTML Table et pagination de CodeIgniter" width="578" height="365" /></a><p class="wp-caption-text">Figure 4.8.2 - Tableau et pagination générés avec la class HTML Table et pagination de CodeIgniter</p></div>
<h4>Etape 5 &#8211; Modification  d&#8217;enregistrement</h4>
<p>Nous allons voir ici comment modifier un  enregistrement mais avant cela, nous allons voir comment récupérer nos résultats sans l&#8217;utilisation de la Class &laquo;&nbsp;htm_table&nbsp;&raquo;.</p>
<p>Dans notre contrôleur &laquo;&nbsp;users.php&nbsp;&raquo;, nous avons une fonction permettant de récupérer les résultats de notre et nous les passons dans notre vue à l&#8217;aide de la variable $data['records']. Nous allons utiliser ces données pour créer un tableau.</p>
<pre class="brush:php;first-line:53">//Execution de la requête - Voir documentation http://codeigniter.com/user_guide/database/active_record.html
$this-&gt;db-&gt;select('id,title,name,subname,mail');
$data['records'] = $this-&gt;db-&gt;get('users',$config['per_page'],$this-&gt;uri-&gt;segment(3));
</pre>
<p>Dans un premier temps, nous allons initialiser les données dans notre vue puis boucler les résultats.</p>
<p>Voici le code de notre vue users_list.php:</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Liste des utilisateurs::&lt;/h3&gt;
&lt;div&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ID&lt;/th&gt;
 &lt;th&gt;Titre&lt;/th&gt;
 &lt;th&gt;Nom&lt;/th&gt;
 &lt;th&gt;Prénom&lt;/th&gt;
 &lt;th&gt;Mail&lt;/th&gt;
 &lt;th&gt;Options&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;?php
 //Récupération des enregitrements sous forme de tableau
 $rows = $records-&gt;result_array();

 //Boucle les enregistrements et création du lien de modification
 foreach($rows as $k =&gt; $v){
 echo "&lt;tr&gt;
 &lt;td&gt;$v[id]&lt;/td&gt;
 &lt;td&gt;$v[title]&lt;/td&gt;
 &lt;td&gt;$v[name]&lt;/td&gt;
 &lt;td&gt;$v[subname]&lt;/td&gt;
 &lt;td&gt;$v[mail]&lt;/td&gt;
 &lt;td&gt;&lt;a id=\"$v[id]\" class=\"updateRecord\" href=\"users/update_user/$v[id]\" title=\"Modifier l'enregistrement\"&gt;Modifier&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;";
 }
 ?&gt;
 &lt;/tbody&gt;
 &lt;tfoot&gt;
 &lt;tr&gt;
 &lt;td colspan="6"&gt;&lt;?php
 echo $this-&gt;pagination-&gt;create_links();
 ?&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tfoot&gt;
&lt;/table&gt;
&lt;/div&gt;
 &lt;?php

 $this-&gt;load-&gt;view('crmFooter');
 ?&gt;

&lt;script type="text/javascript"&gt;
$("tr:odd").css('background','#f5f5f5');
&lt;/script&gt;</pre>
<p>Notre tableau est maintenant créé et nous pouvons naviguer entre les différentes pages. J&#8217;ai ajouté une nouvelle colonne &laquo;&nbsp;Options&nbsp;&raquo; qui me permet d&#8217;effectuer des actions en cliquant sur un lien. Ici, c&#8217;est un lien qui déclenchera ma fonction &#8216;update_user&#8217; et qui est suivi de l&#8217;identifiant (figure 4.8.3).</p>
<div id="attachment_649" class="wp-caption alignnone" style="width: 590px"><img class="size-full wp-image-649" title="CodeIgniter - Figure 4.8.3 - Table de mise à jour de données" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.3-ci-new-table-update-user.jpg" alt="Table de mise à jour de données" width="580" height="568" /><p class="wp-caption-text">Figure 4.8.3 - Table de mise à jour de données</p></div>
<p>La structure d&#8217;une URL CodeIgniter est la suivante :</p>
<p>&laquo;&nbsp;example.com/class/function/ID&nbsp;&raquo;</p>
<p>Créez une nouvelle vue &laquo;&nbsp;user_update.php&nbsp;&raquo; et placez y le code suivant :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Mise à jour d'un utilisateur&lt;/h3&gt;

&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<p>En cliquant sur le lien vous devriez lancer la vue &laquo;&nbsp;user_update.php&nbsp;&raquo;.</p>
<p>Il ne reste plus qu&#8217;à créer notre formulaire de modification, pour cela, nous allons utiliser la class &laquo;&nbsp;database&nbsp;&raquo;. Voici étape par étape les opérations à réaliser :</p>
<p>Récupéré l&#8217;ID de notre enregistrement à modifier</p>
<p>Exécuter la requête nous permettant de récupérer l&#8217;enregistrement souhaité</p>
<p>Générer le formulaire</p>
<p>Envoyer et traiter le formulaire pour mise à jour de la base de données</p>
<p>Commençons&#8230;</p>
<p>Nous devons récupérer l&#8217;ID de l&#8217;enregistrement ; rappelez-vous, dans le script précédent, celui qui affiche la liste des utilisateurs, nous avons généré des liens qui passent l&#8217;ID de l&#8217;utilisateur dans l&#8217;URL :</p>
<pre class="brush:html">&lt;a id=\$v[id]\" class=\"updateRecord\" href=\"users/update_user/$v[id]\" title=\"Modifier l'enregistrement\"&gt;Modifier&lt;/a&gt;</pre>
<p>Notre URL après avoir cliqué sur un lien ressemblera donc à cela :</p>
<pre class="brush:text">http://localhost/crmIgniter/users/update_user/10
</pre>
<p>Rappelons nous la structure de notre URL :</p>
<pre class="brush:text">http://localhost/crmIgniter/[Class]/[Fonction]/[ID]</pre>
<p>Pour récupérer notre ID, nous allons utiliser la class &laquo;&nbsp;URI Class&nbsp;&raquo; qui permet de manipuler nos chaines d&#8217;URL et ce que nous pouvons appeler des &laquo;&nbsp;Segments&nbsp;&raquo;. Cette class met à notre disposition une fonction &laquo;&nbsp;uri-&gt;segment()&nbsp;&raquo; ; Cette fonction attend en paramètre le N° de segment que vous souhaitez récupérer.</p>
<p>Que se passe t&#8217;il si dans mon fichier &laquo;&nbsp;user_update.php&nbsp;&raquo; je met le code suivant ?</p>
<pre class="brush:php">code//Récupération de l'ID
$id = $this-&gt;uri-&gt;segment(3);
echo $id;</pre>
<p>Et bien j&#8217;affiche le Segment correspondant à mon ID soit l&#8217;ID à récupérer <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Maintenant que nous avons récupérer notre ID, il ne nous reste plus qu&#8217;à récupérer les données de notre table. Pour cela nous utiliserons Activ_record.  CodeIgniter utilise une version modifiée de la class &laquo;&nbsp;activ_record&nbsp;&raquo;. activ_record est un model d&#8217;accès et de traitement des bases de données permettant de manipuler les données.</p>
<p>Pour modifier un enregistrement la fonction est la suivant &laquo;&nbsp;$this-&gt;db-&gt;update([table],[données]);</p>
<p>Vous trouverez ci-dessous le code commenté de notre fichier user_update.php.</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Mise à jour d'un utilisateur&lt;/h3&gt;
&lt;div&gt;&lt;?php
//Récupération de l'ID
$id = $this-&gt;uri-&gt;segment(3);
echo "Id actif : $id&lt;br/&gt;";
$query = $this-&gt;db-&gt;get_where('users', array('id' =&gt; $id));
$activUser = $query-&gt;result_array();
$activUser = $activUser[0];
echo '&lt;pre&gt;'."\n";
print_r($activUser);
echo '&lt;/pre&gt;'."\n";

/**
 * Ici commence le formulaire
 * On utilise le form helper pour générer le formulaire +
 * les inputs
 */
echo form_open('users/update_user/'.$id);
echo form_label('Nom d\'utilisateur : ');
echo form_input('username',$activUser['username']);
echo form_label('Civilié : ');
$options = array();
echo form_dropdown('title',array('Madame'=&gt;'Madame','Mademoiselle'=&gt;'Mademoiselle','Monsieur'=&gt;'Monsieur'),$activUser['title']);
echo form_label('Nom : ');
echo form_input('name',$activUser['name']);
echo form_label('Prénom : ');
echo form_input('subname',$activUser['subname']);
echo form_label('Email : ');
//Un tableau permettant de passer des attributs à notre input
$mailData = array(
 'name'        =&gt; 'mail',
 'id'          =&gt; 'mail',
 'value'       =&gt; $activUser['mail'],
 'maxlength'   =&gt; '200',
 'size'        =&gt; '50',
 'style'       =&gt; 'width:300px'
);
echo form_input($mailData);
echo form_submit('update_user','Enregistrer les modifications');
echo form_close();

/**
 * Récupération des données - Traitement du formulaire
 */
if(isset($_POST['update_user'])){
 echo "Formulaire soumis :: Traitement de la mise à jour...&lt;br/&gt;";
 //Passage des données récupérées dans un tableau
 $data = array(
 'username' =&gt; $_POST['username'],
 'title' =&gt; $_POST['title'],
 'name' =&gt; $_POST['name'],
 'subname' =&gt; $_POST['subname'],
 'mail' =&gt; $_POST['mail']
 );
 //Sélection de l'enregistrement à modifier
 $this-&gt;db-&gt;where('id',$id);
 //Modification de l'enregistrement
 $this-&gt;db-&gt;update('users',$data);
}
?&gt;
&lt;/div&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;
</pre>
<p>Les figures ci-dessous vous montre en image les actions réalisées (Figures 4.8.4, 4.8.5, 4.6).</p>
<div id="attachment_651" class="wp-caption alignnone" style="width: 366px"><img class="size-full wp-image-651" title="CodeIgniter - Formulaire de mise à jour utilisateur" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.4-ci-update-form.jpg" alt="Formulaire de mise à jour utilisateur" width="356" height="475" /><p class="wp-caption-text">Figure 4.8.4 - Formulaire de mise à jour utilisateur</p></div>
<div id="attachment_652" class="wp-caption alignnone" style="width: 603px"><img class="size-full wp-image-652" title="CodeIgniter - Base de données avant la mise à jour" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.5-ci-db-before-update.jpg" alt="Base de données avant la mise à jour" width="593" height="287" /><p class="wp-caption-text">Figure 4.8.5 - Base de données avant la mise à jour</p></div>
<div id="attachment_653" class="wp-caption alignnone" style="width: 627px"><img class="size-full wp-image-653 " title="CodeIgniter - Base de données après la mise à jour" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.8.6-ci-db-after-update.jpg" alt="Base de données après la mise à jour" width="617" height="294" /><p class="wp-caption-text">Figure 4.8.7 - Base de données après la mise à jour</p></div>
<h4>Étape 6 &#8211; Suppression d&#8217;un enregistrement</h4>
<p>La suppression d&#8217;un enregistrement suivra le même chemin à la différence prêt que nous utiliserons la fonction &laquo;&nbsp;<code>$this-&gt;db-&gt;delete('mytable', array('id' =&gt; $id));" de la class activ_record.</code></p>
<p>Il suffit pour cela d&#8217;ajouter un lien de suppression à notre liste d&#8217;utilisateurs et d&#8217;y lier encore une fois l&#8217;ID de l&#8217;utilisateur. Le lien pointera sur la fontion &laquo;&nbsp;delete_user()&nbsp;&raquo; de notre contrôleur.</p>
<pre class="brush:php">&lt;a id=\$v[id]\" class=\"deleteRecord\" href=\"users/delete_user/$v[id]\" title=\"Supprimer l'enregistrement\"&gt;Supprimer&lt;/a&gt;</pre>
<p>Notre vue contiendra simplement notre fonction de suppression :</p>
<pre class="brush:php">&lt;?php
$this-&gt;load-&gt;view('crmHeader');
$this-&gt;load-&gt;view('crmNav');
?&gt;
&lt;h3&gt;Supression d'un utilisateur : &lt;/h3&gt;
&lt;?php
$id = $this-&gt;uri-&gt;segment(3);
if(isset($_POST['confirm_delete'])){
 $this-&gt;db-&gt;delete('users', array('id' =&gt; $id));
 echo "&lt;p class=\"confirm\"&gt;L'enregsitrement N° $id a bien été supprimé ! &lt;/p&gt;\n";
}else{
 ?&gt;
 &lt;!-- Formulaire --&gt;
 &lt;form action="" method="post"&gt;
 &lt;p&gt;Etes vous sur de vouloir supprimer l'enregistrement N° &lt;?=$id?&gt; de la table utilisateurs ?&lt;/p&gt;
 &lt;input type="submit" name="confirm_delete" value="Confirmer"/&gt;
 &lt;/form&gt;
 &lt;?php
}
?&gt;
&lt;?php
$this-&gt;load-&gt;view('crmFooter');
?&gt;</pre>
<h2>V &#8211; Conclusion</h2>
<p>Vous venez de voir comment utiliser dans les grandes lignes le Framework CodeIgniter. En conclusion on peut remarquer différents points forts :</p>
<ul>
<li>L&#8217;utilisation du model MVC</li>
<li>Des class et des helpers facilitant grandement le développement d&#8217;application WEB</li>
<li>Une documentation riche</li>
<li>La facilité d&#8217;intégrer ses propres librairies et extensions</li>
</ul>
<p>CodeIgniter est donc un Framework très intéressant ne demandant pas un trop long apprentissage.</p>
<h2>VI &#8211; Ressources</h2>
<h3>Applications développées avec CodeIgniter</h3>
<p><a title="Site du script 68KB" href="http://68kb.com/" target="_blank">68KB &#8211; Script de base de données de connaissances</a></p>
<p><a title="Site de BackendPro Control Panel" href="http://www.kaydoo.co.uk/projects/backendpro" target="_blank">BackendPro Control Panel </a>: Application permettant de gérer la partie administration d&#8217;un site ou d&#8217;une application</p>
<p><a title="Site internet de Blogmer" href="http://speedovation.org/home" target="_blank">Blogmer</a> : Blog script qui se veut simple d&#8217;utilisation et convivial et dont les fonctions sont essentielles</p>
<p><a title="Site De Ionize CMS" href="http://www.ionize-cms.com/" target="_blank">Ionize CMS</a> : Un puissant gestionnaire de contenu réalisé avec CodeIgniter</p>
<h3>Sites développés avec CodeIgniter</h3>
<p>Vous trouverez la liste des sites réalisés avec CodeIgniter à l&#8217;adresse suivante : <a title="Liste des site développés sous CodeIgniter" href="http://codeigniter.com/projects/" target="_blank">http://codeigniter.com/projects/</a></p>
<h3>Documentation &amp; Tutoriels</h3>
<p>Documentation principale : <a title="Guide d'utilisation CodeIgniter" href="http://codeigniter.com/user_guide/" target="_blank">http://codeigniter.com/user_guide/</a></p>
<p>Tutoriels Vidéo : <a title="Tutoriaux CodeIgniter" href="http://codeigniter.com/tutorials/" target="_blank">http://codeigniter.com/tutorials/</a></p>
<p>Wiki : <a title="Wiki CodeIgniter" href="http://codeigniter.com/wiki/" target="_blank">http://codeigniter.com/wiki/</a></p>
<p>Ressource CodeIgniter : <a title="Base de connaissance et resoources CodeIgniter" href="http://codeigniterdirectory.com/" target="_blank">http://codeigniterdirectory.com/</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/07/20/codeigniter-tutorial-introduction-et-premiere-application/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Aptana IDE et la gestion des Snippets</title>
		<link>http://sldesign.openwab.com/2010/07/09/aptana-ide-et-la-gestion-des-snippets/</link>
		<comments>http://sldesign.openwab.com/2010/07/09/aptana-ide-et-la-gestion-des-snippets/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 22:28:21 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Aptana]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=473</guid>
		<description><![CDATA[Aptana IDE est à mon avis le meilleur outil de développement WEB. Il est vrai que je regrette un peu l&#8217;époque ou Aptana intégrait son propre module PHP avant d&#8217;intégrer celui de Eclipse PDT. Cela étant dit, je n&#8217;ai pu me résoudre à changer d&#8217;éditeur. Une des fonctions que j&#8217;aime particulièrement est la gestion des [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F09%2Faptana-ide-et-la-gestion-des-snippets%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F09%2Faptana-ide-et-la-gestion-des-snippets%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-477" style="margin: 5px;" title="aptana-snippets" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/aptana-snippets.jpg" alt="Splash screen Aptana IDE" width="262" height="296" />Aptana IDE est à mon avis le meilleur outil de développement WEB. Il est vrai que je regrette un peu l&#8217;époque ou Aptana intégrait son propre module PHP avant d&#8217;intégrer celui de Eclipse PDT. Cela étant dit, je n&#8217;ai pu me résoudre à changer d&#8217;éditeur.</p>
<p>Une des fonctions que j&#8217;aime particulièrement est la gestion des &laquo;&nbsp;Snippets&nbsp;&raquo;. Les &laquo;&nbsp;Snippets&nbsp;&raquo; sont des templates de codes que vous pouvez intégrer à vos fichier en cliquant dessus (une sorte de copier coller amélioré). Ces &laquo;&nbsp;Snippets&nbsp;&raquo; vous permettent entre autre d&#8217;ajouter des champs de saisie vous permettant d&#8217;avoir une trame pour la complétion de vos codes.</p>
<p>je vous propose dans cet article une approche complète de la gestion des &laquo;&nbsp;Snippets&nbsp;&raquo; dans Aptana. Nous verrons comment les utiliser, les éditer et en créer de nouveau.</p>
<p><span id="more-473"></span></p>
<hr class="clear_all" />
<h3>Sommaire</h3>
<ol>
<li>Les Snippets Aptana : Introduction</li>
<li>Utiliser les Snippets</li>
<li>Editer les snippets par défaut de Aptana</li>
<li>Créer vos propre Snippets</li>
</ol>
<h2>1°) Introduction</h2>
<p>Puisqu&#8217;un exemple vaut mieux qu&#8217;un grand discour, nous allons directement passer à un exemple concret de l&#8217;utilisation  de Snippets ; pour ce faire,. vous allez créer un nouveau projet WEB &#8211; PHP que nous appellerons &laquo;&nbsp;aptana-snippets&nbsp;&raquo;.</p>
<p>Une fois ce projet créé, vous allez créer un fichier &laquo;&nbsp;index.php&nbsp;&raquo; vierge et l&#8217;ouvrir.</p>
<p>Personnellement, mon module de Snippets est situé dans un panneau latéral droit de mon IDE mais vous pouvez le mettre ou bon vous semble. Si vous ne voyez pas le module dans votre interface, voici la façon de l&#8217;activer :</p>
<p>Dans le menu principal, cliquez sur &laquo;&nbsp;Window =&gt; Show view =&gt; Other&nbsp;&raquo; (figure 1.1.1)</p>
<div id="attachment_492" class="wp-caption alignnone" style="width: 547px"><img class="size-full wp-image-492" title="1.1.1-snippets-menu-view" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.1.1-snippets-menu-view.jpg" alt="Menu contextuel Snippets View" width="537" height="365" /><p class="wp-caption-text">Figure 1.1.1 - Menu contextuel Snippets View</p></div>
<p>Dans la fenêtre qui suit, sélectionnez le module Snippets (figure 1.1.2)</p>
<div id="attachment_493" class="wp-caption alignnone" style="width: 331px"><img class="size-full wp-image-493" title="1.1.2-snippets-select-module-view" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.1.2-snippets-select-module-view.jpg" alt="Sélection du module Snippets" width="321" height="444" /><p class="wp-caption-text">Figure 1.1.2 - Sélection du module Snippets</p></div>
<p>Vous devriez maintenant pouvoir accéder à ce module qui est constitué de différents dossiers (figure 1.1.3).</p>
<div id="attachment_494" class="wp-caption alignnone" style="width: 414px"><img class="size-full wp-image-494" title="1.1.3-snippets-tab" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.1.3-snippets-tab.jpg" alt="Snippets View" width="404" height="318" /><p class="wp-caption-text">Figure 1.1.3 - Snippets View</p></div>
<h2>2°) Utilisation des snippets</h2>
<p>Maintenant, placez votre curseur à l&#8217;emplacement dans lequel vous souhaitez insérer ce code (supprimez les balises PHP) puis, dans le panneau de snippets, cliquez sur le dossier HTML afin d&#8217;en voir le contenu puis &laquo;&nbsp;double cliquez&nbsp;&raquo; sur &laquo;&nbsp;Insert DOCTYPE XHTML 1.0 Strict&nbsp;&raquo;. Vous venez d&#8217;exécuter un snippet.</p>
<h2>3°) Editer un Snippet</h2>
<p>Il est possible de modifier un Snippet. Nous allons éditer notre snipet &laquo;&nbsp;form&nbsp;&raquo; permettant d&#8217;intégrer un formulaire HTML au sein de nos scripts. Cliquez droit sur l&#8217;élément &laquo;&nbsp;Insert &lt;form&gt;&nbsp;&raquo; dans le dossier &laquo;&nbsp;HTML&nbsp;&raquo; puis choisissez &laquo;&nbsp;Editer&nbsp;&raquo;. Le document est maintenant ouvert dans votre éditeur.</p>
<p>Voici le code standard de ce Snippet :</p>
<p>Code HTML :</p>
<pre class="brush:html">&lt;!--
 category: HTML
 name: Insert &lt;form&gt;
 tooltip: Insert a &lt;form&gt; tag

 toolbar: true
 icon: com.aptana.ide.snippets/icons/layout.png
 language: text/html
--&gt;
&lt;form action="" method="" accept-charset="utf-8"&gt;
 &lt;p&gt;&lt;input type="submit" value="Continue" /&gt;&lt;/p&gt;
&lt;/form&gt;</pre>
<p>Voici maintenant le nouveau code, j&#8217;ai simplement ajouté une balise &laquo;&nbsp;fieldset&nbsp;&raquo; et une balise &laquo;&nbsp;legend&nbsp;&raquo; dans mon document :<br />
Code HTML :</p>
<pre class="brush:html">&lt;!--
 category: HTML
 name: Insert &lt;form&gt;
 tooltip: Insert a &lt;form&gt; tag

 toolbar: true
 icon: com.aptana.ide.snippets/icons/layout.png
 language: text/html
--&gt;
&lt;form action="" method="" accept-charset="utf-8"&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;&lt;/legend&gt;
 &lt;/fieldset&gt;
 &lt;p&gt;&lt;input type="submit" value="Continue" /&gt;&lt;/p&gt;
&lt;/form&gt;</pre>
<p>Enregistrez maintenant ce document puis fermez le. Vous pouvez maintenant le tester en double cliquant dessus et en veillant à ce que votre document &laquo;&nbsp;index.php&nbsp;&raquo; soit actif te que le curseur soit à la position d&#8217;insertion souhaitée.</p>
<p class="info">Note : Il est possible que vous ayez à rebooter Aptana Studio.</p>
<p>Votre code est maintenant inséré dans votre document.</p>
<h2>4°) Créer vos propre Snippets</h2>
<p>Vous avez la possibilité de créer vos propre snippets mais avant de rentrer dans le vif du sujet nous allons voir de quoi est constitué un snippet :</p>
<p>Un snippet est constitué de deux élément principaux :</p>
<ol>
<li>Un en-tête</li>
<li>Du code</li>
</ol>
<p>L&#8217;en-tête va vous permettre d&#8217;identifier votre Snippet, lui donner un nom, le classer dans une catégorie ou encore créer des boites de dialogue afin d&#8217;y renseigner des variables.</p>
<p>Quand au code, c&#8217;est du code <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8230;</p>
<p>Note : Vous devez obligatoirement avoir un document ouvert (*.htm, *.js, etc.) avant de pouvoir créer un nouveau Snippet.</p>
<p>La première étape consiste à créer un nouveau dossier à la racine de votre projet, vous appellerez ce dossier &laquo;&nbsp;snippets&nbsp;&raquo; (figure 4.1.1).</p>
<div id="attachment_495" class="wp-caption alignnone" style="width: 175px"><img class="size-full wp-image-495" title="4.1.1-new-snippets-folder" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.1.1-new-snippets-folder.jpg" alt="Nouveau dossier Snippets" width="165" height="93" /><p class="wp-caption-text">Figure 4.1.1 - Nouveau dossier Snippets</p></div>
<p>Nous allons ensuite créer un document vierge du type de snippet souhaité, c&#8217;est à dire HTML si nous souhaitons réaliser un document HTML ou Js si il s&#8217;agit d&#8217;un document javascript. Je souhaite créer un nouveau snippet de type HTML.</p>
<p>Je souhaite créer un snippet permettant de créer rapidement un formulaire de connexion, je vais donc éditer mon document en conséquence.</p>
<p>La première chose consiste à renseigner l&#8217;en-tête du snippet, c&#8217;est à dire les informations de ce snippet :</p>
<p>Code HTML</p>
<pre class="brush:html">&lt;!--
 category: HTML
 name: Insert a login form
 tooltip: Insert un formulaire de connexion utilisateur
--&gt;</pre>
<p>Nous allons maintenant créer un &laquo;&nbsp;Prompt&nbsp;&raquo; ; un &laquo;&nbsp;Prompt&nbsp;&raquo; est une fenêtre de saisie vous permettant de renseignez des informations dans des champs. Ces informations seront alors après validation insérer dans notre document à l&#8217;emplacement désiré.</p>
<pre class="brush:html;first-line: 5;"> prompt(form_action): Action lors de l'envoi du formulaire
 prompt(fieldset_class): Class pour le fieldset
....
--&gt;
</pre>
<p>La syntaxe d&#8217;un prompt est la suivante :</p>
<p><em><strong>prompt([nom de la variable] : [Libelle]</strong></em></p>
<p>Le nom de variable sera repporté dans notre code de la façon suivante :</p>
<p><em><strong>&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;${variable}&nbsp;&raquo; value=&nbsp;&raquo;"/&gt;</strong></em></p>
<p>Voici le code complet de notre snippet :</p>
<pre class="brush:html">&lt;!--
 category: HTML
 name: Insert a login form
 tooltip: Insert un formulaire de connexion utilisateur
 prompt(form_action): Action lors de l'envoi du formulaire
 prompt(fieldset_class): Class pour le fieldset
 prompt(fieldset_legend) : Legende du fieldset
 prompt(login_name) : Nom du champ "login"
 prompt(password_name) : nom du champ "password"
 prompt(submit_name) : Nom du champ "Submit"
 prompt(submit_value) : Valeur du champ "Submit"
--&gt;
&lt;form action="${form_action}" method="post"&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;${fieldset_legend}&lt;/legend&gt;
 &lt;label&gt;Login : &lt;/label&gt;
 &lt;input type="text" name="${login_name}" value=""/&gt;
 &lt;label&gt;Mot de passe : &lt;/label&gt;
 &lt;input type="password" name="${password_name}" value=""/&gt;
 &lt;input type="submit" name="${submit_name}" value="${submit_value}"/&gt;
 &lt;/fieldset&gt;
&lt;/form&gt;</pre>
<p>Après avoir enregistré votre snippet, rebooter Aptana et vous devriez avoir un nouveau Snippet dans votre vue &laquo;&nbsp;Snippets =&gt; HTML&nbsp;&raquo; (figur 4.1.2).</p>
<div id="attachment_497" class="wp-caption alignnone" style="width: 292px"><img class="size-full wp-image-497" title="4.1.2-snippets-add-new" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.1.2-snippets-add-new.jpg" alt="Ajout d'un nouveau Snippet" width="282" height="117" /><p class="wp-caption-text">Figure 4.1.2 - Ajout d&#39;un nouveau Snippet</p></div>
<p>Executez pour voir lerésultat (figure 4.1.3).</p>
<div id="attachment_498" class="wp-caption alignnone" style="width: 494px"><img class="size-full wp-image-498" title="4.1.3-snippets-test-snippet" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.1.3-snippets-test-snippet.jpg" alt="Affichage du prompt" width="484" height="568" /><p class="wp-caption-text">Figure 4.1.3 - Affichage du prompt</p></div>
<p>Et voici le résultat après exécution de notre snippet :</p>
<p>Code HTML</p>
<pre class="brush:html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;meta http-equiv="Content-type" content="text/html; charset=utf-8" /&gt;
 &lt;title&gt;Untitled Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action="" method="post"&gt;
 &lt;fieldset&gt;
 &lt;legend&gt;Formulaire de conenxion&lt;/legend&gt;
 &lt;label&gt;Login : &lt;/label&gt;
 &lt;input type="text" name="login" value=""/&gt;
 &lt;label&gt;Mot de passe : &lt;/label&gt;
 &lt;input type="password" name="password" value=""/&gt;
 &lt;input type="submit" name="submit" value="Se connecter"/&gt;
 &lt;/fieldset&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Encore plus pratique, il vous est possible d&#8217;ajouter des snippets dans votre barre d&#8217;outil, simplement en ajoutant le code suivant dans l&#8217;en-tête de votre snippet :</p>
<pre class="brush:html">&lt;!--
....
  toolbar: true
  icon: strong.png
  language: text/html
....
--&gt;
</pre>
<p>En ajoutant ce code à votre en-tête, vous aurez un nouveau bouton dans l&#8217;éditeur HTML.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/07/09/aptana-ide-et-la-gestion-des-snippets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BIRT &#8211; Solution de Reporting Open Source &#8211; Présenatation et première application</title>
		<link>http://sldesign.openwab.com/2010/07/05/birt-solution-de-reporting-open-source-presenatation-et-premiere-application/</link>
		<comments>http://sldesign.openwab.com/2010/07/05/birt-solution-de-reporting-open-source-presenatation-et-premiere-application/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 09:24:04 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Décisionnel / BI]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[BIRT]]></category>
		<category><![CDATA[Logiciel]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=379</guid>
		<description><![CDATA[L’informatique décisionnelle (en anglais : DSS pour Decision Support System ou encore BI pour Business Intelligence) désigne les moyens, les outils et les méthodes qui permettent de collecter, consolider, modéliser et restituer les données, matérielles ou immatérielles, d&#8217;une entreprise en vue d&#8217;offrir une aide à la décision et de permettre aux responsables de la stratégie d&#8217;entreprise [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F05%2Fbirt-solution-de-reporting-open-source-presenatation-et-premiere-application%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F07%2F05%2Fbirt-solution-de-reporting-open-source-presenatation-et-premiere-application%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-380" style="margin: 5px;" title="birt-splash-screen" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/birt-splash-screen.jpg" alt="Splash screen BIRT" width="400" height="287" />L’<strong>informatique décisionnelle</strong> (en anglais : DSS pour <em>Decision  Support System</em> ou encore BI pour <em>Business Intelligence</em>)  désigne les moyens, les outils et les méthodes qui permettent de  collecter, consolider, modéliser et restituer les données,  matérielles ou immatérielles, d&#8217;une entreprise en vue d&#8217;offrir une aide à la décision et de permettre aux responsables  de la stratégie d&#8217;entreprise d’avoir une  vue d’ensemble de l’activité traitée.</p>
<p>Un  de ces outil est BIRT. BIRT est sans nulle doute une des solutions open source les plus abouties dans le domaine du reporting et de la restitution de données.</p>
<p>Je vais vous présenter à travers cet article / tutoriel ce logiciel à travers une prise en main rapide et un  guide pas à pas pour réaliser votre premier rapport avec BIRT et une base de données SQL.</p>
<p><span id="more-379"></span></p>
<h1>I – Présentation de BIRT</h1>
<p>Birt (Business Intelligence Reporting Tools) est un logiciel open source basé sur eclipse. C&#8217;est un outil de reporting et de visualisations de données. Il vous permet de restituer vos données sous forme de graphiques, et de rapports.</p>
<p>Ce logiciel existe en différentes versions, Open source, Professionnelle. Je vous invite à consulter le tableau disponible à l&#8217;adresse suivante <a title="Fichier PDF des différentes versions de BIRT" href="http://www.birt-exchange.com/be/download/BIRT-Designers-Comparison-Table.pdf " target="_blank">http://www.birt-exchange.com/be/download/BIRT-Designers-Comparison-Table.pdf </a>et qui vous permettra de connaître les différences entre ces différentes versions.</p>
<p>BIRT integre différents modules (figure 1.1.1).</p>
<div id="attachment_382" class="wp-caption alignnone" style="width: 641px"><img class="size-full wp-image-382" title="1.1.1-birt-organisation-schema" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/1.1.1-birt-organisation-schema.jpg" alt="Organisation de BIRT" width="631" height="460" /><p class="wp-caption-text">Figure 1.1.1 - Modules BIRT (Image source sur le site de l&#39;éditeur)</p></div>
<p>Les diffrénts modules sont les suivants :</p>
<ul>
<li>Designer =&gt; Ce module permet de concevoir les rapports</li>
<li>Deploy =&gt; Module permettant de déployer les rapports selon différents moyens</li>
<li>Viewer =&gt; Module permettant aux utilisateurs finaux de consulter / voir les rapports générés.</li>
</ul>
<h1>II – Téléchargement &amp; Installation</h1>
<h2>1°) Prérequis :</h2>
<ul>
<li>OS Windows ou Linux</li>
<li>Une base de données (j&#8217;utilise MySql)</li>
<li>Le driver JDBC de votre base de données</li>
<li>Des connaissances en langages SQL sont un plus</li>
</ul>
<h2>2°) Téléchargement</h2>
<p>La première étape consiste à se rendre sur le site de l&#8217;éditeur à l&#8217;adresse suivante : <a href="http://www.birt-exchange.com/be/downloads/">http://www.birt-exchange.com/be/downloads/</a> (figure 2.21.1) et de télécharger la version open source. Enregistrez-vous afin de lancer le téléchargement.</p>
<p class="info">Notes : Birt existe également en tant que module eclipse. Vous pouvez installer ce module depuis l&#8217;installateur de logiciel. Pour ce faire, allez à l&#8217;adresse suivante afin de consulter les adresse de mise à jour Eclipse Birt <a title="Page de mise à jour Eclipse Birt" href="http://wiki.eclipse.org/BIRT_Update_Site_URL" target="_blank">http://wiki.eclipse.org/BIRT_Update_Site_URL</a> .Birt est disponible en version Windows et Linux. Les deux versions sont identiques et requiert les mêmes éléments. Il est également possible de déployer Birt dans vos développements ; pour cela, vous pouvez télécharger les classes et API&#8217;s (JAVA) qui vous permettent de générer et voir du contenu BIRT.</p>
<p>Une fois téléchargé, il ne vous reste plus qu&#8217;à extraire le contenu de l&#8217;archive ou vous souhaitez et exécuter BIRT.</p>
<h2>3°) Interface générale</h2>
<p>Pour les utilisateurs d&#8217;éclipse, cette interface vous semblera familière, pour les autres, sachez qu&#8217;éclipse est un ensemble de bloc modulaires. A la base, Eclipse est un IDE qui a rapidement été utilisé comme base de développement et de distribution de nombreux logiciels.</p>
<p>Après l&#8217;execuion de BIRT, il vous est demandé de spécifier l&#8217;espace de travail ; cet espace représente l&#8217;endroit ou seront enregistré / déployé vos travaux. Il est préférable d&#8217;avoir un environnement de travail par projet. Chaque espace de travail peut avoir sa propre configuration. Dans notre cas, j&#8217;utiliserai l&#8217;espace de travail par défaut (figure 2.3.1).</p>
<div id="attachment_383" class="wp-caption alignnone" style="width: 633px"><img class="size-full wp-image-383" title="3.1.1-birt-workspace-init" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/3.1.1-birt-workspace-init.jpg" alt="Initialisation de l'espace de travail BIRT" width="623" height="287" /><p class="wp-caption-text">Figure 2.3.1 - Initialisation de l&#39;espace de travail BIRT</p></div>
<p>Il se compose d&#8217;un menu principal, d&#8217;une vue principal et de panneaux (onglets) que vous pouvez placer ou bon vous semble (figure 2.3.2). Il vous est possible d&#8217;organiser les onglets comme bon vous semble.</p>
<div id="attachment_384" class="wp-caption alignnone" style="width: 1042px"><img class="size-full wp-image-384" title="2.3.2-birt-interface-générale" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/2.3.2-birt-interface-générale.jpg" alt="Interface de BIRT" width="1032" height="763" /><p class="wp-caption-text">Figure 2.3.2 - Interface de BIRT</p></div>
<h1>IV &#8211; Création d&#8217;un premier Report avec BIRT</h1>
<h2>1°) Introduction</h2>
<p>Nous allons créer un premier rapport avec BIRT ; ce rapport est réalisée en liaison avec une base de données MySql et deux tables :</p>
<ul>
<li>Livres</li>
<li>Catégories de livres</li>
</ul>
<h2>2°) Initialisation du projet</h2>
<p>La première étape consiste à initialiser notre projet. Pour ce faire, cliquez sur &laquo;&nbsp;Files =&gt; New =&gt; Project&nbsp;&raquo; (figure 4.2.1).</p>
<div id="attachment_385" class="wp-caption alignnone" style="width: 548px"><img class="size-full wp-image-385" title="4.2.1-birt-new-project" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.1-birt-new-project.jpg" alt="Création d'un nouveau projet Birt" width="538" height="254" /><p class="wp-caption-text">Figure 4.2.1 - Création d&#39;un nouveau projet Birt</p></div>
<p>Dans la fenêtre qui suit, sélectionnez &laquo;&nbsp;Report project&nbsp;&raquo; (figure 4.2.2).</p>
<div id="attachment_386" class="wp-caption alignnone" style="width: 546px"><img class="size-full wp-image-386" title="4.2.2-birt-select-project-type" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.2-birt-select-project-type.jpg" alt="Sélection du type de projet" width="536" height="510" /><p class="wp-caption-text">Figure 4.2.2 - Sélection du type de projet</p></div>
<p>Pour l&#8217;étape qui suit, il suffit de donner un nom à votre projet (figure 4.2.3), j&#8217;ai choisi d&#8217;appeler le mien BiblioBirt.</p>
<div id="attachment_387" class="wp-caption alignnone" style="width: 545px"><img class="size-full wp-image-387" title="4.2.3-birt-name-prject" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.3-birt-name-prject.jpg" alt="Nom du projet Birt" width="535" height="505" /><p class="wp-caption-text">Figure 4.2.3 - Nom du projet Birt</p></div>
<p>Cliquez sur terminer et valider le type de vue à utiliser avec BIRT. Cette nouvelle vue est composée de différents éléments :</p>
<ul>
<li>Palette =&gt; Cette palette permet d&#8217;ajouter des éléments graphiques à vos rapport (champs, tableaux, graphiques, etc.)</li>
<li>Data Explorer =&gt; Explorateur de données</li>
<li>Ressources explorer =&gt; Explorateur de ressources</li>
<li>Navigator =&gt; Navigateur de projets</li>
</ul>
<p>Cliquez droit sur le dossier de votre projet dans l&#8217;onglet navigator et dans le menu contextuel, cliquez sur &laquo;&nbsp;New =&gt;Report&nbsp;&raquo; (figure 4.2.4)</p>
<div id="attachment_388" class="wp-caption alignnone" style="width: 586px"><img class="size-full wp-image-388" title="4.2.4-birt-new-report" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.4-birt-new-report.jpg" alt="Création d'un nouveau rapport Birt" width="576" height="232" /><p class="wp-caption-text">Figure 4.2.4 - Création d&#39;un nouveau rapport Birt</p></div>
<p>Donnez un nom à votre rapport (figure 4.2.5), pour ma part ce rapport servira simplement à lister les différents auteurs.</p>
<div id="attachment_389" class="wp-caption alignnone" style="width: 545px"><img class="size-full wp-image-389" title="4.2.5-birt-report-name" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.5-birt-report-name.jpg" alt="Nom du nouveau rapport" width="535" height="611" /><p class="wp-caption-text">Figure 4.2.5 - Nom du nouveau rapport</p></div>
<p>Cliquez sur &laquo;&nbsp;Next&nbsp;&raquo; afin de choisir le type de rapport à générer (figure 4.2.6). Il s&#8217;agit en fait de templates.</p>
<div id="attachment_390" class="wp-caption alignnone" style="width: 556px"><img class="size-full wp-image-390" title="4.2.6-birt-report-type" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.6-birt-report-type.jpg" alt="Sélection du type de rapport" width="546" height="622" /><p class="wp-caption-text">Figure 4.2.6 - Sélection du type de rapport</p></div>
<p>Cliquez sur &laquo;&nbsp;Finish&nbsp;&raquo;. Notre vue vient de se mettre à jour et certains éléments sont maintenant accessibles :</p>
<p>Property Editor Report permet d&#8217;avoir accès au caractéristiques des élément du rapport sélectionné (figure 4.2.7) .</p>
<div id="attachment_391" class="wp-caption alignnone" style="width: 827px"><img class="size-full wp-image-391" title="4.2.7-birt-property-panel" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.2.7-birt-property-panel.jpg" alt="Panneau de propriété du rapport" width="817" height="255" /><p class="wp-caption-text">Figure 4.2.7 - Panneau de propriété du rapport</p></div>
<p>L&#8217;onglet &laquo;&nbsp;Data Explore&nbsp;&raquo; est maintenant actif et nous pouvons donc passer à l&#8217;étape suivante.</p>
<h2>3°) Initialisation de la connexion</h2>
<p>Birt vous permet d&#8217;extraire et de présenter des données provenant de différentes sources (Fichiers ou bases de données). Dans notre cas, j&#8217;ai opté pour le traitement de données provenant d&#8217;une base MySql. Il est alors nécessaire d&#8217;initialiser l&#8217;accès à cette source de données. Dans l&#8217;onglet &laquo;&nbsp;Data Explorer&nbsp;&raquo; faites un clic droit pouis cliquez sur &laquo;&nbsp;New  Data Source&nbsp;&raquo; (figure 4.3.1).</p>
<div id="attachment_392" class="wp-caption alignnone" style="width: 390px"><img class="size-full wp-image-392" title="4.3.1-birt-new-datasource" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.1-birt-new-datasource.jpg" alt="Connexion à une source de données" width="380" height="210" /><p class="wp-caption-text">Figure 4.3.1 - Connexion à une source de données</p></div>
<p>Dans l&#8217;écran qui suit, il suffit de sélectionner le type de source de données (figure 4.3.2).</p>
<div id="attachment_393" class="wp-caption alignnone" style="width: 604px"><img class="size-full wp-image-393" title="4.3.2-birt-select-datasource-type" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.2-birt-select-datasource-type.jpg" alt="Sélection du type de source de données" width="594" height="444" /><p class="wp-caption-text">Figure 4.3.2 - Sélection du type de source de données</p></div>
<p>Sélectionnez ensuite votre base de données dans la liste (figure 4.3.3) puis cliquez sur &laquo;&nbsp;Next&nbsp;&raquo;.</p>
<div id="attachment_396" class="wp-caption alignnone" style="width: 583px"><img class="size-full wp-image-396" title="4.3.3-birt-select-database-connector" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.3-birt-select-database-connector.jpg" alt="Selection de la base de données" width="573" height="620" /><p class="wp-caption-text">Figure 4.3.3 - Selection de la base de données</p></div>
<p>Il est maintenant nécessaire de configurer la connexion ; cette connexion doit s&#8217;effectuer par le biais d&#8217;un connecteur JDBC (Java Driver). Pour MySql, vous trouverez ce connecteur à l&#8217;adresse suivante <a title="Lien de téléchargement Driver JDBC" href="http://dev.mysql.com/downloads/connector/j/5.0.html" target="_blank">http://dev.mysql.com/downloads/connector/j/5.0.html</a> . Ce driver se présente sous forme d&#8217;un fichier *.jar qui est une archive java. J&#8217;ai placé ce driver à la racine de mon projet. Une fois ceci réalisé, il suffit de configurer la connexion. Pour ce faire, cliquez sur le bouton &laquo;&nbsp;New Driver Definition&nbsp;&raquo; <img class="alignnone size-full wp-image-397" title="ico-new-driver-def" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/ico-new-driver-def.jpg" alt="Icone New Driver Definition Birt" width="34" height="31" /> et renseignez l&#8217;ensemble des informations (Figure 4.3.4 &amp; Figure 4.3.5)</p>
<div id="attachment_398" class="wp-caption alignnone" style="width: 586px"><img class="size-full wp-image-398" title="4.3.4-birt-select-driver-version" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.4-birt-select-driver-version.jpg" alt="Sélection de la version du driver" width="576" height="349" /><p class="wp-caption-text">Figure 4.3.4 - Sélection de la version du driver</p></div>
<div id="attachment_399" class="wp-caption alignnone" style="width: 593px"><img class="size-full wp-image-399" title="4.3.5-birt-select-driver-file" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.5-birt-select-driver-file.jpg" alt="Sélection du driver (jar file)" width="583" height="356" /><p class="wp-caption-text">Figure 4.3.5 - Sélection du driver (jar file)</p></div>
<p>Une fois es étapes réalisées, vous pouvez tester votre connexion (figure 4.3.5).</p>
<div id="attachment_400" class="wp-caption alignnone" style="width: 578px"><img class="size-full wp-image-400" title="4.3.6-birt-test-connexion" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.6-birt-test-connexion.jpg" alt="Test de la conenxion JDBC Birt" width="568" height="507" /><p class="wp-caption-text">Figure 4.3.6 - Test de la conenxion JDBC Birt</p></div>
<p class="info">Notes : Un driver JDBC fonctionne sous forme d&#8217;URL. Le schéma de cette URL est le suivant : jdbc:[base de données]://[adresse]:[port]/[DB Name]?[Utilisateur]</p>
<p>Notre Data Source est maintenant configuré et apparait dans notre Data Explorer (figure 4.3.7).</p>
<div id="attachment_403" class="wp-caption alignnone" style="width: 369px"><img class="size-full wp-image-403" title="4.3.7-birt-datasource-view" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.3.7-birt-datasource-view.jpg" alt="Data Source après configuration" width="359" height="175" /><p class="wp-caption-text">Figure 4.3.7 - Data Source après configuration</p></div>
<h2>4°) Initialisation des données</h2>
<p>Maintenant que nous avons configuré notre connexion, il est nécessaire de récupérer nos données ; cette étape est réalisable depuis le Data Sets. Il esxiste deux type de data sets :</p>
<ul>
<li>Data Sets standard</li>
<li>Join Data Sets (permettant de lier différentes sources de données)</li>
</ul>
<p>Nous allons dans un premier temps configurer un data sets standard. Cliquez droit sur Data Sets et dans le menu contextuel, cliquez sur &laquo;&nbsp;New Data Sets&nbsp;&raquo; (figure 4.4.1).</p>
<div id="attachment_405" class="wp-caption alignnone" style="width: 376px"><img class="size-full wp-image-405" title="4.4.1-birt-new-data-sets" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.1-birt-new-data-sets.jpg" alt="Menu contextuel création du data sets" width="366" height="213" /><p class="wp-caption-text">Figure 4.4.1 - Menu contextuel création du data sets</p></div>
<p>La prochaine étape consiste à compléter les différentes informations qui vont constituer notre source de données. Dans un premier temps, il faut choisir la connexion (ici il n&#8217;y en a qu&#8217;une) puis donner un nom à ce data sets (figure 4.4.2)</p>
<div id="attachment_406" class="wp-caption alignnone" style="width: 657px"><img class="size-full wp-image-406" title="4.4.2-birt-set-new-data-sets" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.2-birt-set-new-data-sets.jpg" alt="Sélection de la connexion et identification du data sets" width="647" height="638" /><p class="wp-caption-text">Figure 4.4.2 - Sélection de la connexion et identification du data sets</p></div>
<p>Il est ensuite nécessaire de sélectionner les donner en ajoutant une table. Dans cet exemple, je souhaite simplement lister mes livres, je vais donc ajouter la table &laquo;&nbsp;livres&nbsp;&raquo; (figure 4.4.3) et sélectionner les champs qui m&#8217;intéresse (figure 4.4.4). N&#8217;oubliez pas de donner des alias à vos champs pour plus de lisibilité.</p>
<div id="attachment_407" class="wp-caption alignnone" style="width: 734px"><img class="size-full wp-image-407" title="4.4.3-birt-add-table" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.3-birt-add-table.jpg" alt="Ajout d'une table au data sets" width="724" height="720" /><p class="wp-caption-text">Figure 4.4.3 - Ajout d&#39;une table au data sets</p></div>
<div id="attachment_408" class="wp-caption alignnone" style="width: 734px"><img class="size-full wp-image-408" title="4.4.4-birt-config-table" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.4-birt-config-table.jpg" alt="Sélection des champs et personalisation" width="724" height="721" /><p class="wp-caption-text">Figure 4.4.4 - Sélection des champs et personalisation</p></div>
<p>Notre data sets est maintenant créé, il est accessible depuis le dossier &laquo;&nbsp;data sets&nbsp;&raquo; de notre onglet &laquo;&nbsp;data explorer&nbsp;&raquo; (figure 4.4.5).</p>
<div id="attachment_409" class="wp-caption alignnone" style="width: 157px"><img class="size-full wp-image-409" title="4.4.5-birt-data-sets-view" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.5-birt-data-sets-view.jpg" alt="Vue du data sets après configuration" width="147" height="113" /><p class="wp-caption-text">Figure 4.4.5 - Vue du data sets après configuration</p></div>
<p>La prochaine étape consiste à glisser / déposer les champs de notre data sets dans notre tableau afin de créer notre rapport (figure 4.4.6).</p>
<div id="attachment_410" class="wp-caption alignnone" style="width: 840px"><img class="size-full wp-image-410" title="4.4.6-birt-page-view" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.6-birt-page-view.jpg" alt="Aperçu du rapport en mode conception" width="830" height="154" /><p class="wp-caption-text">Figure 4.4.6 - Aperçu du rapport en mode conception</p></div>
<p>A cette étape, il vous est possible de réaliser un aperçu en cliquant sur l&#8217;onglet &laquo;&nbsp;preview&nbsp;&raquo; de la vue principale. Vous pouvez ainsi voir vos données (figure 4.4.7).</p>
<div id="attachment_411" class="wp-caption alignnone" style="width: 855px"><img class="size-full wp-image-411" title="4.4.7-birt-first-preview" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.4.7-birt-first-preview.jpg" alt="Prévisualisation du rapport" width="845" height="336" /><p class="wp-caption-text">Figure 4.4.7 - Prévisualisation du rapport</p></div>
<p>Vous venez de réalisez un premier étape (très simple il est vrai) sans aucune utilisation du langage SQL. Notre rapport est certes devant nos yeux mais la mise en page laisse à désirer&#8230;</p>
<h2>5°) Personnalisation et mise en page</h2>
<p>Voyons maintenant comment nous pouvons améliorer notre listing&#8230; Lorsque vous cliquez sur un élément du tableau ceci déclenche le panneau de propriété situé en dessous du rapport ; ceci va nous permettre de personnaliser nos champs et notre listing.</p>
<h3>A &#8211; Formatage global</h3>
<p>Commencez par sélectionner l&#8217;ensemble du tableau (en cliquant sur une des bordure) puis allez sur la propriété &laquo;&nbsp;Border&nbsp;&raquo; afin d&#8217;ajouter une bordure à notre tableau (figure 4.5.1)</p>
<div id="attachment_412" class="wp-caption alignnone" style="width: 854px"><img class="size-full wp-image-412" title="4.5.1-birt-set-borders" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.1-birt-set-borders.jpg" alt="Personalisation des bordures de notre tableau BIRT" width="844" height="500" /><p class="wp-caption-text">Figure 4.5.1 - Personalisation des bordures de notre tableau BIRT</p></div>
<p>Je vous laisse mettre en page ce tableau à votre guise, pour ma part, je souhaite simplement ajouter une bordure à mon tableau et à mes cellules.</p>
<h3>B &#8211; Création d&#8217;une feuille de style</h3>
<p>Birt nous permet d&#8217;appliquer des styles à nos rapports et il existe différentes façons de créer / gérer les styles dans BIRT.</p>
<ul>
<li>Création  et importation</li>
<li>Création directe</li>
</ul>
<p>Pour l&#8217;importation d&#8217;une feuille de style, cliquez droit sur un élément vide du rapport afin d&#8217;afficher le menu contextuel ; dans ce menu il y a une section &laquo;&nbsp;Style&nbsp;&raquo;. Une fois sur cet élément du menu, il vous suffit de sélectionner &laquo;&nbsp;Import CSS Style&nbsp;&raquo; (figure 4.5.2).</p>
<div id="attachment_416" class="wp-caption alignnone" style="width: 607px"><img class="size-full wp-image-416" title="4.5.2-birt-import-css-style" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.2-birt-import-css-style.jpg" alt="Importation d'une feuille de style CSS" width="597" height="416" /><p class="wp-caption-text">Figure 4.5.2 - Importation d&#39;une feuille de style CSS</p></div>
<p>Il est ensuite nécessaire de sélectionner les éléments de style que vous souhaiter importer dans votre projet (figure 4.5.3). Je vous conseille de créer un dossier réservé à vos éléments de style et d&#8217;y placer vos feuilles et images.</p>
<div id="attachment_417" class="wp-caption alignnone" style="width: 597px"><img class="size-full wp-image-417" title="4.5.3-birt-select-class-style" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.2-birt-select-class-style.jpg" alt="Sélection des styles à importer dans BIRT" width="587" height="540" /><p class="wp-caption-text">Figure 4.5.3 - Sélection des styles à importer dans BIRT - exemple réalisé depuis une feuille de style jQuery UI</p></div>
<p>La deuxième option est celle de la création à la volée ; pour cela il suffit de sélectionner &laquo;&nbsp;New style&nbsp;&raquo; dans le menu contextuel et de renseigner les éléments de style (figure 4.5.4).</p>
<div id="attachment_418" class="wp-caption alignnone" style="width: 671px"><img class="size-full wp-image-418" title="4.5.4-birt-set-style" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.4-birt-set-style.jpg" alt="Création de style à la volée" width="661" height="626" /><p class="wp-caption-text">Figure 4.5.4 - Création de style à la volée</p></div>
<p>Vous pouvez maintenant sélectionner le style dans la liste déroulant du panneau de propriété (figure 4.5.5).</p>
<div id="attachment_419" class="wp-caption alignnone" style="width: 827px"><img class="size-full wp-image-419" title="4.5.5-birt-select-style" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.5-birt-select-style.jpg" alt="Sélection du style dans le panneau de propriété" width="817" height="491" /><p class="wp-caption-text">Figure 4.5.5 - Sélection du style dans le panneau de propriété</p></div>
<h3>C &#8211; Formatage des nombres</h3>
<p>Notre tableau comporte des nombres devant êtres formatés au format monétaire. Pour formater cet élément, cliquez sur l&#8217;élément &laquo;&nbsp;[Prix]&nbsp;&raquo; puis dans le panneau de propriété, choisissez &laquo;&nbsp;Format number&nbsp;&raquo; puis dans la liste déroulante choisissez &laquo;&nbsp;Currency&nbsp;&raquo; et renseignez les informations de formatage (figure 4.5.6).</p>
<div id="attachment_420" class="wp-caption alignnone" style="width: 929px"><img class="size-full wp-image-420" title="4.5.6-birt-format-currency" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.6-birt-format-currency.jpg" alt="Formatage des unités monétaires" width="919" height="338" /><p class="wp-caption-text">Figure 4.5.6 - Formatage des unités monétaires</p></div>
<h3>D &#8211; Mise en page des textes long</h3>
<p>Vous l&#8217;aurez remarqué, les textes trop longs sont tronqués, nous allons donc modifier les cellules pour que le texte retourne à la ligne. Cliquez sur l&#8217;élément &laquo;&nbsp;[Description]&nbsp;&raquo; puis dans le panneau de propriété cliquez sur le bouton &laquo;&nbsp;Advanced&nbsp;&raquo;. Cette vue vous permet d&#8217;avoir accès à l&#8217;ensemble des propriété d&#8217;un élément BIRT. Dans ce panneau, cherchez l&#8217;élément &laquo;&nbsp;text&nbsp;&raquo; puis dans l&#8217;arborescence l&#8217;élément &laquo;&nbsp;whitespace&nbsp;&raquo;. Choisissez la propriété normal dans la liste de choix (figure 4.5.7). Votre texte passera à la ligne automatiquement.</p>
<div id="attachment_421" class="wp-caption alignnone" style="width: 1063px"><img class="size-full wp-image-421" title="4.5.7-birt-advanced-property" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.7-birt-advanced-property.jpg" alt="Propriétés avancées et modification de la propriété White-space" width="1053" height="371" /><p class="wp-caption-text">Figure 4.5.7 - Propriétés avancées et modification de la propriété White-space</p></div>
<p>Voici après quelques modifications à quoi ressemble notre listing (figure 4.5.8).</p>
<div id="attachment_422" class="wp-caption alignnone" style="width: 1061px"><img class="size-full wp-image-422" title="4.5.8-birt-preview" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/4.5.8-birt-preview.jpg" alt="Prévisualisation après modifications de style et formatage" width="1051" height="403" /><p class="wp-caption-text">Figure 4.5.8 - Prévisualisation après modifications de style et formatage</p></div>
<p>Nous venons de terminer notre premier rapport qui n&#8217;est en fait qu&#8217;un listing. Vous avez déjà en main les bases qui vous permettent de vous connecter à une base de données, récupérer les données et les mettre en page. Nous allons maintenant étudier plus en détail les possibilités de BIRT.</p>
<h1>V &#8211; Jointures, données croisées et graphiques</h1>
<p>Il est temps pour nous de passer à des choses plus intéressantes, nous allons voir ensemble comment réaliser des jointures entre plusieurs tables, réaliser un tableau croisé dynamique et réaliser un graphique.</p>
<h2>1°) Initialisation d&#8217;un nouvel état.</h2>
<p>Nous allons réaliser un nouveau rapport. Suivez les mêmes étapes que pour notre rapport précédent à la différence prêt que nous changerons de nom <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Il sera également nécessaire de reprendre notre Data sources ; un simple copier / coller permet de récupérer la connexion.</p>
<p>Créez ensuite un nouveau Data sets (que j&#8217;ai appelé &laquo;&nbsp;Bibliothèque&nbsp;&raquo;) et insérez la table &#8216;livres&#8217; et la table &#8216;categories&#8217;. Vous disposez maintenant de deux tables. Cliquez sur le champ &laquo;&nbsp;livres.categorie_id&nbsp;&raquo; et faites le glisser sur le champ &laquo;&nbsp;categories.id&nbsp;&raquo;. Vous venez de créer une jointure permettant de lier notre table catégories avec les identifiants de la table &laquo;&nbsp;categories&nbsp;&raquo;. La figure 5.1.1 vous montre l&#8217;ensemble de ces éléments.</p>
<div id="attachment_424" class="wp-caption alignnone" style="width: 733px"><img class="size-full wp-image-424" title="5.1.1-birt-jointures-data-sets" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.1.1-birt-jointures-data-sets.jpg" alt="Configuration du data sets et des jointures" width="723" height="626" /><p class="wp-caption-text">Figure 5.1.1 - Configuration du data sets et des jointures</p></div>
<p>Enregistrez ce data sets et réalisez votre rapport (Glisser / Déposer les éléments du data sets dans le tableau) puis mettez le en forme. Vous devriez obtenir un listing affichant les libellés de catégories (figure 5.1.2).</p>
<div id="attachment_425" class="wp-caption alignnone" style="width: 790px"><img class="size-full wp-image-425" title="5.1.2-birt-preview-jointures" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.1.2-birt-preview-jointures.jpg" alt="Prévisualisation du listing avec jointures" width="780" height="273" /><p class="wp-caption-text">Figure 5.1.2 - Prévisualisation du listing avec jointures</p></div>
<h2>2°) Regroupement de données</h2>
<p>Il est possible de regrouper vos données. Cliquez sur le tableau et sélectionnez l&#8217;onglet &laquo;&nbsp;Groups&nbsp;&raquo; puis sur ajouter. Cet interface vous permet de regrouper vos données en fonction de différents critères. Dans l&#8217;exemple qui suit, j&#8217;ai regroupé mes données par auteur (figure 5.2.1 &amp; figure 5.2.2).</p>
<div id="attachment_426" class="wp-caption alignnone" style="width: 660px"><img class="size-full wp-image-426" title="5.1.3-birt-groups" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.1.3-birt-groups.jpg" alt="regroupement de données" width="650" height="798" /><p class="wp-caption-text">Figure 5.2.1 - regroupement de données</p></div>
<div id="attachment_427" class="wp-caption alignnone" style="width: 705px"><img class="size-full wp-image-427" title="5.1.4-birt-prview-grouped-datas" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.1.4-birt-prview-grouped-datas.jpg" alt="Prévisualisation du listing après groupement de données" width="695" height="446" /><p class="wp-caption-text">Figure 5.2.2 - Prévisualisation du listing après groupement de données</p></div>
<h2>3°) Compter le nombre d&#8217;enregistrements</h2>
<p>Il est possible de compter le nombre d&#8217;enregistrements ou d&#8217;élément. Pour cela, il suffit d&#8217;ajouter un champ à notre data sets ; éditez votre data sets (clic droit =&gt; Editer) puis ajoutez un champ de type &laquo;&nbsp;Computed column&nbsp;&raquo; (figure 5.3.1).</p>
<div id="attachment_428" class="wp-caption alignnone" style="width: 821px"><img class="size-full wp-image-428" title="5.3.1-birt-computed-column" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.3.1-birt-computed-column.jpg" alt="Ajout d'une colonne calculée" width="811" height="664" /><p class="wp-caption-text">Figure 5.3.1 - Ajout d&#39;une colonne calculée</p></div>
<p>Dans cet exemple, j&#8217;ai simplement compté le nombre de livres. L&#8217;exemple ci-dessous vous montre comment ajouter un champ qui compte le nombre d&#8217;auteurs.</p>
<h2>4°) Data cubes</h2>
<p>Le data cubes vous permet de réaliser des croisements de données. Imaginons que je souhaite connaître le nombre de livres par catégories&#8230;. et bien le data cubes va nous permettre de réaliser cette opération. Pour cela, cliquez droit sur &laquo;&nbsp;Data cubes&nbsp;&raquo; et dans le menu contextuel cliquez sur &laquo;&nbsp;New&nbsp;&raquo;. Il vous est demandé deux élément :</p>
<ul>
<li>Groups</li>
<li>Summary fields</li>
</ul>
<p>Dans &laquo;&nbsp;Groups&nbsp;&raquo;, glissez l&#8217;élément de table &laquo;&nbsp;Catégorie&nbsp;&raquo; ainsi que dans &laquo;&nbsp;Summary Fields&nbsp;&raquo; (figure 5.4.1).</p>
<div id="attachment_432" class="wp-caption alignnone" style="width: 842px"><img class="size-full wp-image-432" title="5.4.1-birt-data-cubes" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.4.1-birt-data-cubes.jpg" alt="Création d'un data cubes" width="832" height="607" /><p class="wp-caption-text">Figure 5.4.1 - Création d&#39;un data cubes</p></div>
<p>Cliquez droit sur un espace vide de votre rapport et dans le menu contextuel, cliquez sur &laquo;&nbsp;Insert =&gt; Cross tab&nbsp;&raquo; afin de créer un tableau croisé (figure 5.4.2).</p>
<div id="attachment_433" class="wp-caption alignnone" style="width: 450px"><img class="size-full wp-image-433" title="5.4.2-birt-create-cross-tab" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.4.2-birt-create-cross-tab.jpg" alt="Création du tableau croisé" width="440" height="423" /><p class="wp-caption-text">Figure 5.4.2 - Création du tableau croisé</p></div>
<p>Il ne reste plus qu&#8217;à glisser l&#8217;élément &laquo;&nbsp;Groups =&gt; Catégories&nbsp;&raquo; dans la case de gauche (celle inscrite &#8216;Drop Data field&#8217;) et glisser l&#8217;élément &laquo;&nbsp;Summary Field =&gt; Nombre de livres&nbsp;&raquo; dans les autres cases (figure 5.4.3).</p>
<div id="attachment_434" class="wp-caption alignnone" style="width: 1288px"><img class="size-full wp-image-434" title="5.4.3-birt-add-cross-tab-fields" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.4.3-birt-add-cross-tab-fields.jpg" alt="Ajout des champs au tableau croisé" width="1278" height="311" /><p class="wp-caption-text">Figure 5.4.3 - Ajout des champs au tableau croisé</p></div>
<p>Il ne reste plus qu&#8217;à visualiser le résultat (figure 5.4.4).</p>
<div id="attachment_435" class="wp-caption alignnone" style="width: 814px"><img class="size-full wp-image-435" title="5.4.4-birt-cross-tab-preview" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.4.4-birt-cross-tab-preview.jpg" alt="Prévisualisation tableau croisé" width="804" height="107" /><p class="wp-caption-text">Figure 5.4.4 - Prévisualisation tableau croisé</p></div>
<h2>5°) Intégration d&#8217;un graphique</h2>
<p>Nous allons maintenant intégrer un graphique. L&#8217;opération est simple, il suffit de réaliser un clic droit sur le tableau croisé que nous venons de créer puis dans le menu contextuel &laquo;&nbsp;Create Chart View&nbsp;&raquo;. Choisissez un graphique de type camembert (Pie chart) puis cliquez sur suivant. L&#8217;écran suivant nous permet de sélectionner notre source de données. Les informations sont reprises de notre tableau il n&#8217;y a donc rien à faire <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (figure 5.5.1).</p>
<div id="attachment_439" class="wp-caption alignnone" style="width: 846px"><img class="size-full wp-image-439" title="5.5.1-birt-chart-config-datas" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.5.1-birt-chart-config-datas1.jpg" alt="Interface de configuration de graphiques" width="836" height="790" /><p class="wp-caption-text">Figure 5.5.1 - Interface de créattion de graphiques</p></div>
<p>Cliquez sur suivant, puis personnalisez votre graphique (figure 5.5.2)</p>
<div id="attachment_440" class="wp-caption alignnone" style="width: 843px"><img class="size-full wp-image-440" title="5.5.2-birt-perso-garphique" src="http://sldesign.openwab.com/wp-content/uploads/2010/07/5.5.2-birt-perso-garphique.jpg" alt="Personnalisation du graphique" width="833" height="781" /><p class="wp-caption-text">Figure 5.5.2 - Personnalisation du graphique</p></div>
<h1>VI &#8211; Export et génération de documents</h1>
<p>Une fois votre ou vos états réalisés, il sera nécessaire de les exporter ; dans le menu principal, cliquez sur &laquo;&nbsp;Run&nbsp;&raquo; et sélectionnez le type de génération à réaliser (*.pdf, *.html, etc.). Il est également possible d&#8217;intégrer les rapports dans d&#8217;autres applications avec le traitement des données XML. Vous pouvez également utiliser &laquo;&nbsp;Birt Viewer&nbsp;&raquo; qui est un outil destiné aux utilisateurs finaux.</p>
<p class="info">Note : Attention, il existe différentes versions de BIRT Viewer dont certaines ne sont pas open source et ne sont disponible qu&#8217;après l&#8217;achat de licences. Vous pouvez télécharger le document suivant <a title="Tableau récapitulatifs des différentes versions de BIRT VIEWER" href="http://www.birt-exchange.com/be/download/Viewer-Product-Comparison-Table.pdf" target="_blank">http://www.birt-exchange.com/be/download/Viewer-Product-Comparison-Table.pdf</a> qui donne un aperçu des différentes fonctionnalités des Viewers. Au moment ou je vous parle, je n&#8217;ai pas de prix ni de mode de licence à vous communiquer <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</p>
<h1>VII &#8211; Conclusion</h1>
<p>Vous venez de voir les grandes lignes de l&#8217;utilisation de BIRT. Sans connaissances du langage SQL (ou besoin), vous avez pu extraire des données de votre base, mettre en page ces données. BIRT est sans nul doute un outil performant et intuitif. Cette solution peut facilement remplacer d&#8217;autres solutions commerciales sous réserve d&#8217;acheter les &laquo;&nbsp;Viewers&nbsp;&raquo; ou d&#8217;avoir les compétences permettant d&#8217;intégrer les états générés dans des outils personnels.</p>
<p>Cet article peut évoluer et n&#8217;est pas figé, vous pouvez me laisser vos commentaires et remarques afin de compléter des informations ou d&#8217;en ajouter.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/07/05/birt-solution-de-reporting-open-source-presenatation-et-premiere-application/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutoriel QLikView &#8211; Prise en main et première application &#8211; Decisonnel et BI</title>
		<link>http://sldesign.openwab.com/2010/06/28/tutoriel-qlikview-prise-en-main-et-premiere-application-decisonnel-et-bi/</link>
		<comments>http://sldesign.openwab.com/2010/06/28/tutoriel-qlikview-prise-en-main-et-premiere-application-decisonnel-et-bi/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 15:04:21 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Décisionnel / BI]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[Décisionnel]]></category>
		<category><![CDATA[QLikView]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=288</guid>
		<description><![CDATA[Introduction à QlikView I – Introduction Le décisionnel autrement appelé &#171;&#160;Business Intelligenge&#160;&#187; prend de plus en plus de place dans les entreprises. Le temps des calculs manuel et du simple Bilan Comptable est révolu. De nombreux outils viennent appuyer les choix décisionnels au sein des entrprises. J&#8217;ai eu l&#8217;occasion de tester et travailler sur différentes [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F06%2F28%2Ftutoriel-qlikview-prise-en-main-et-premiere-application-decisonnel-et-bi%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F06%2F28%2Ftutoriel-qlikview-prise-en-main-et-premiere-application-decisonnel-et-bi%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<h1><img class="alignleft size-full wp-image-328" style="margin: 10px;" title="splash-screen-qlikview" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/splash-screen-qlikview.jpg" alt="Splash screen QLikView" width="380" height="283" />Introduction à QlikView</h1>
<h2>I – Introduction</h2>
<p>Le décisionnel autrement appelé &laquo;&nbsp;Business Intelligenge&nbsp;&raquo; prend de plus en plus de place dans les entreprises. Le temps des calculs manuel et du simple Bilan Comptable est révolu. De nombreux outils viennent appuyer les choix décisionnels au sein des entrprises.</p>
<p>J&#8217;ai eu l&#8217;occasion de tester et travailler sur différentes solutions, entre autre MyReport, Business Object ou encore Chrystal Report.</p>
<p>Il y a peu de temps, j&#8217;ai découvert QlikView qui fait l&#8217;objet de cet article.</p>
<p>Vous découvrirez le logiciel et réaliserez une première application</p>
<p><span id="more-288"></span></p>
<h3>Prérequis :</h3>
<p>Avant toute chose, veuillez lire les éléments suivant concernant les prerequis technique et connaissances requises ainsi que le context de ce tutoriel.</p>
<p><span style="text-decoration: underline;"><em><strong>Prérequis techniques : </strong></em></span></p>
<ul>
<li>Windows XP, 2000 ou 2003</li>
<li>Processeur AMD ou Intel</li>
<li>Au moins 1Go de RAM</li>
<li>200 Mo d&#8217;espace disque</li>
</ul>
<p><span style="text-decoration: underline;"><em><strong>Connaissances requises :</strong></em></span></p>
<p>Des connaissances en langage SQL sont un plus mais non indispensable.</p>
<h3>Notes :</h3>
<p>La version utilisée et la version personnelle de QlikView qui est gratuite et reservée à un usage personnel. Consultez l&#8217;ensemble des informations relatives à cette version à l&#8217;adresse suivante =&gt; <a title="Infos QLikView" href="http://community.qlikview.com/gettingstarted/" target="_blank">http://community.qlikview.com/gettingstarted/</a></p>
<p>Afin  de réalisé ce tutoriel, j&#8217;ai utilisé une base de données MySql et une table Test ; cette table est complétée avec une liste de livres. Je mets à votre disposition le fichier SQL de cette base de données <a href="http://sldesign.openwab.com/wp-content/uploads/2010/06/BDD-test-qlikview.zip">BDD-test-qlikview</a>.</p>
<h2>II – Présentation générale</h2>
<p>QlikView est un logiciel de Business Intelligence. Ce logiciel permet de se connecter à différentes sources de données (Bases de données, fichiers textes-cvs-xml,etc.) Il se présente comme un logiciel à part entiere mais peut également se décliner comme Ad-on de solutions informatiques( ERP, CRM).</p>
<p>Vous trouverez de nombreuses informations sur le site de l&#8217;éditeur : http://www.qlikview.com/</p>
<h2>III – Installation</h2>
<p>L&#8217;installation ne présente aucune difficulté particulière :<br />
Télécharger =&gt; Installer =&gt; Utiliser<br />
Rendez-vous à l&#8217;adresse suivante afin de télécharger QlikView version personnelle : <a title="Espace téléc hargement QLikView" href="http://global.qlikview.com/download/" target="_blank">http://global.qlikview.com/download/</a></p>
<h2>IV – Prise en main générale</h2>
<p>Une fois exécuté, vous avez la page de démarrage (figure 4.1) qui vous donne accès à différentes informations :</p>
<ul>
<li>Derniers documents ouverts</li>
<li>Raccourcis</li>
<li>Explorateur</li>
<li>Ressources</li>
</ul>
<div id="attachment_289" class="wp-caption alignnone" style="width: 901px"><img class="size-full wp-image-289" title="4.1-qlik-page-demarrage" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/4.1-qlik-page-demarrage.jpg" alt="Page de démarrage QLikView" width="891" height="523" /><p class="wp-caption-text">Figure 4.1 - Page de démarrage QLikView</p></div>
<p>Je vous laisse le soin de parcourir ces différents onglets</p>
<p>En haut de l&#8217;écran, vous avez la barre de menu (figure 4.2) ; je ne vais pas détailler l&#8217;ensemble du menu mais nous allons nous arrêté sur le menu Paramètres et plus particulièrement les préférences utilisateur.</p>
<div id="attachment_291" class="wp-caption alignnone" style="width: 979px"><img class="size-full wp-image-291" title="4.2-qlik-barre-menu" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/4.2-qlik-barre-menu.jpg" alt=" Barre de menu" width="969" height="56" /><p class="wp-caption-text">Figure 4.2 - Barre de menu</p></div>
<p>Cliquez sur le menu &laquo;&nbsp;Paramètres =&gt; Préférences utilisateur&nbsp;&raquo; (figure 4.3) afin d&#8217;afficher la vue correspondante (figure 4.4). Cette vue vous permet de renseigner différentes informations personnelles ainsi que de gérer certains paramétres tel que la sécurité ou encore vos données personnelles.</p>
<div id="attachment_292" class="wp-caption alignnone" style="width: 288px"><img class="size-full wp-image-292" title="4.3-qlik-menu-preferences" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/4.3-qlik-menu-preferences.jpg" alt="Menu préférences" width="278" height="54" /><p class="wp-caption-text">Figure 4.3 - Menu préférences utilisateur</p></div>
<div id="attachment_293" class="wp-caption alignnone" style="width: 896px"><img class="size-full wp-image-293" title="4.4-qlik-pref-user" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/4.4-qlik-pref-user.jpg" alt="Vue préférences utilisateur" width="886" height="561" /><p class="wp-caption-text">Figure 4.4 - Vue préférences utilisateur</p></div>
<p>Nous aurons l&#8217;occasion de revenir sur certains de ses paramètres mais vous pouvez d&#8217;ores et déjà configurer vos données de &laquo;&nbsp;Messagerie&nbsp;&raquo; (figure 4.5).</p>
<div id="attachment_294" class="wp-caption alignnone" style="width: 465px"><img class="size-full wp-image-294" title="4.5-qlik-param-mail" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/4.5-qlik-param-mail.jpg" alt="Paramétrage du compte mail" width="455" height="297" /><p class="wp-caption-text">Figure 4.5 - Paramétrage du compte mail</p></div>
<h2>V – Premier projet QlikView.</h2>
<p><span class="info"><br />
Note :<br />
Dans le menu, cliquez sur &laquo;&nbsp;Fichier =&gt; Nouveau&nbsp;&raquo; afin de créer un nouveau projet et enregistrez le tout de suite ; ceci a pour effet de créé un clef unique propre à l&#8217;utilisateur et sa machine (figure 5.1).<br />
</span></p>
<div id="attachment_295" class="wp-caption alignnone" style="width: 686px"><img class="size-full wp-image-295" title="5.1-qlik-key-user-register" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.1-qlik-key-user-register.jpg" alt="Enregistrement utilisateur - Clef d'enregistrement" width="676" height="182" /><p class="wp-caption-text">Figure 5.1 - Enregistrement utilisateur - Clef d&#39;enregistrement</p></div>
<p>La première chose que nous devons faire et de configurer notre projet et notamment la connexion à notre base de données MySql. Pour se faire, cliquez sur &laquo;&nbsp;Fichier =&gt; Éditer le script&nbsp;&raquo;. Comme expliqué en introduction Qlikview fonctionne essentiellement en langage script ; la fenêtre qui s&#8217;affiche correspond au script d&#8217;exécution et de paramétrages principal.</p>
<p>Nous allons configure notre connexion ; en bas de cette vue se trouve le module de configuration de connexion aux bases de données. Sélectionnez ODBC puis cliquez sur le bouton &laquo;&nbsp;Sélectionner&nbsp;&raquo; (figure 5.2).</p>
<div id="attachment_297" class="wp-caption alignnone" style="width: 733px"><img class="size-full wp-image-297" title="5.2-qlik-conf-db-cnx" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.2-qlik-conf-db-cnx.jpg" alt="Configuration de la connexion à la base de données" width="723" height="173" /><p class="wp-caption-text">Figure 5.2 - Configuration de la connexion à la base de données</p></div>
<p>Renseignez ensuite le nom d&#8217;utilisateur et le mot de passe utilisateur pour votre base de données (figure 5.3) et cliquez sur le bouton &laquo;&nbsp;Créer une source ODBC&nbsp;&raquo;.</p>
<div id="attachment_298" class="wp-caption alignnone" style="width: 403px"><img class="size-full wp-image-298" title="5.3-qlik-db-conf-inf-user" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.3-qlik-db-conf-inf-user.jpg" alt="Conenxion Base de données étape 2" width="393" height="324" /><p class="wp-caption-text">Figure 5.3 - Conenxion Base de données étape 2</p></div>
<p>Une nouvelle fenêtre apparait, cliquez sur l&#8217;onglet &laquo;&nbsp;Source de données machine&nbsp;&raquo; puis sur le bouton nouveau (figure 5.4 ) afin d&#8217;en afficher l&#8217;assistant (figure 5.5).</p>
<div id="attachment_299" class="wp-caption alignnone" style="width: 516px"><img class="size-full wp-image-299" title="5.4-qlik-new-db-source" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.4-qlik-new-db-source.jpg" alt="Selection de la source de données" width="506" height="410" /><p class="wp-caption-text">Figre 5.4 - Selection de la source de données</p></div>
<div id="attachment_300" class="wp-caption alignnone" style="width: 540px"><img class="size-full wp-image-300" title="5.5-qlik-new-db-source-assistant" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.5-qlik-new-db-source-assistant.jpg" alt="Assistant nouvelle source de données" width="530" height="363" /><p class="wp-caption-text">Figure 5.5 - Assistant nouvelle source de données</p></div>
<p>Cliquez sur suivant puis sélectionnez la source ODBC que vous souhaitez utiliser (figure 5.6).</p>
<div id="attachment_301" class="wp-caption alignnone" style="width: 540px"><img class="size-full wp-image-301" title="5.6-qlik-select-odbc" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.6-qlik-select-odbc.jpg" alt="Selection source ODBC" width="530" height="364" /><p class="wp-caption-text">Fiure 5.6 - Selection source ODBC</p></div>
<p>La fenêtre de connexion de pilote ODBC s&#8217;affiche, complétez les informations nécessaires (5.7)</p>
<div id="attachment_302" class="wp-caption alignnone" style="width: 614px"><img class="size-full wp-image-302" title="5.7-qlik-config-odbc-mysql" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.7-qlik-config-odbc-mysql.jpg" alt="Configuration ODBC MySql" width="604" height="418" /><p class="wp-caption-text">Figure 5.7 - Configuration ODBC MySql</p></div>
<p>Validez l&#8217;ensemble des fenêtre.</p>
<p>Nous venons de configurer notre connexion !</p>
<p>Maintenant, toujours dans la fenêtre de script, cliquez sur &laquo;&nbsp;Sélectionner&nbsp;&raquo; et dans la fenêtre qui s&#8217;affiche, sélectionnez les champs qui vous intéressent. Cochez la case &laquo;&nbsp;Avant load&nbsp;&raquo; et valider (figure 5.8).</p>
<div id="attachment_303" class="wp-caption alignnone" style="width: 675px"><img class="size-full wp-image-303" title="5.8-qlik-instruction-select" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/5.8-qlik-instruction-select.jpg" alt="Instruction select" width="665" height="529" /><p class="wp-caption-text">Figure 5.8 - Instruction select</p></div>
<p>Voilà ce que vous devriez obtenir dans la fenêtre de script (j&#8217;ai inclus des instructions &#8216;as&#8217; afin de rendre mes champs plus lisibles).</p>
<p>Code Qlik :</p>
<pre class="brush:sql">SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 €;-# ##0,00 €';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';
SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';
ODBC CONNECT TO [MySql ODBC];
LOAD id as 'ID',
titre as 'Titre',
auteur as 'Auteur',
price as 'Prix',
description as 'Description';
SQL SELECT *
FROM test.livres;
</pre>
<p><span class="info"><br />
Note : Je ne me suis pas arrêté sur le début du script mais il correspond au style de formatage de vos données. Vous pouvez modifier le formatage si nécessaire.<br />
</span></p>
<p>Nous allons maintenant créer notre premier rapport.</p>
<h2>VI – Premier rapport</h2>
<p>J&#8217;ai créé une nouvelle feuille (conception =&gt; ajouter une feuille) que j&#8217;ai appelé liste des livres. La première chose à faire est de cliquer sur l&#8217;icône &laquo;&nbsp;recharger les données&nbsp;&raquo;. Une fois cette opération réalisée, faites un clic droit sur la feuille active puis dans le menu contextuel, choisissez &laquo;&nbsp;Ajouter des champs&nbsp;&raquo;. Sélectionnez les champs que vous souhaitez afficher dans votre rapport (figure 6.1).</p>
<div id="attachment_307" class="wp-caption alignnone" style="width: 690px"><img class="size-full wp-image-307" title="6.1-qlik-add-fields" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.1-qlik-add-fields.jpg" alt="Sélection des champs de la base de données" width="680" height="547" /><p class="wp-caption-text">Fiure 6.1 - Sélection des champs de la base de données</p></div>
<p>Vous pouvez maintenant voir apparaître sur la feuille active la liste des champs et données (figure 6.2).</p>
<div id="attachment_306" class="wp-caption alignnone" style="width: 915px"><img class="size-full wp-image-306" title="6.2-qlik-resultat-feuille" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.2-qlik-resultat-feuille.jpg" alt="Liste des champs et données" width="905" height="238" /><p class="wp-caption-text">Figure 6.2 - Liste des champs et données</p></div>
<p>Vous pouvez déplacer et modifier ces listes pour les rendre plus lisibles et accessibles.</p>
<p>Il est possible de personnaliser chaque liste ; pour cela, cliquez droit sur l&#8217;un des éléments (figure 6.3) et dans le menu contextuel, cliquez sur &laquo;&nbsp;Propriété&nbsp;&raquo;. Voici les éléments important que vous pouvez modifier et/ou personnaliser (figure 6.4) :</p>
<ul>
<li>Titre de l&#8217;élément</li>
<li>Ordre de tri</li>
<li>Formatage des nombres</li>
<li>Apparence</li>
</ul>
<div id="attachment_305" class="wp-caption alignnone" style="width: 427px"><img class="size-full wp-image-305" title="6.3-menu-context-list" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.3-menu-context-list.jpg" alt="Menu contextuel champ" width="417" height="514" /><p class="wp-caption-text">Figure 6.3 - Menu contextuel champ</p></div>
<div id="attachment_304" class="wp-caption alignnone" style="width: 705px"><img class="size-full wp-image-304" title="6.4-qlik-propriete-champ" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.4-qlik-propriete-champ.jpg" alt="Propriété des champs" width="695" height="553" /><p class="wp-caption-text">Figure 6.4 - Propriété des champs</p></div>
<p>Maintenant, si vous sélectionnez l&#8217;un  des éléments (l&#8217;auteur par exemple), vous pouvez vous apercevoir que les autres éléments liés à cette sélection se mettent en surbrillance (en blanc) (figure 6.5).</p>
<div id="attachment_308" class="wp-caption alignnone" style="width: 1198px"><img class="size-full wp-image-308" title="6.5-qlik-select-field" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.5-qlik-select-field.jpg" alt="Sélection de données dans la liste" width="1188" height="250" /><p class="wp-caption-text">Figure 6.5 - Sélection de données dans la liste</p></div>
<p>Vous pouvez exécuter des recherches en cliquant sur l&#8217;icône loupe de chaque liste (figure 6.6).</p>
<div id="attachment_311" class="wp-caption alignnone" style="width: 437px"><img class="size-full wp-image-311" title="6.6-qlik-search" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.6-qlik-search.jpg" alt="Recherche textuel" width="427" height="141" /><p class="wp-caption-text">Figure 6.6 - Recherche textuel</p></div>
<p>Nous venons de voir comment il est simple de réaliser un rapport avec QlikView ; Ce rapport est simple, ce n&#8217;est en réalité qu&#8217;un simple affichage par liste de données MySql. Cela dit, nus pouvons aller beaucoup plus loin dans la manipulation de données QlikView.</p>
<p>Le schéma ci dessous vous donne un aperçu des différents affichages disponibles (figure 6.7)</p>
<div id="attachment_312" class="wp-caption alignnone" style="width: 1287px"><img class="size-full wp-image-312" title="6.7-qlik-exemple-objets" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/6.7-qlik-exemple-objets.jpg" alt="" width="1277" height="644" /><p class="wp-caption-text">Exemple de différents objets</p></div>
<h2>VII – QlikView et les jointures</h2>
<p>Je vais maintenant vous montrer comment réaliser des jointures entre différentes tables. J&#8217;ai créé une nouvelle feuille dans mon projet actif.</p>
<p>Vous trouverez ci-dessous le script Qlik ; j&#8217;ai simplement créé une table &laquo;&nbsp;catégories&nbsp;&raquo; dans ma base de données. Ma table livres quant à elle dispose d&#8217;un champ &laquo;&nbsp;categorie_id&nbsp;&raquo; correspondant aux différentes catégories.</p>
<p>Code Qlik :</p>
<pre class="brush:sql">SET MoneyThousandSep=' ';
SET MoneyDecimalSep=',';
SET MoneyFormat='# ##0,00 €;-# ##0,00 €';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';
SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';
ODBC CONNECT TO [MySql ODBC];
//Liste des livres
LOAD id as 'ID',
titre as 'Titre',
auteur as 'Auteur',
price as 'Prix',
categorie_id as 'Catégorie ID',
description as 'Description';
SQL SELECT *
FROM test.livres;
//Catégories de livres
LOAD id as [Catégorie ID],
libelle as [Libellé],
subcategorie as [Sous-catégorie];
SQL SELECT id,
libelle,
subcategorie
FROM test.categories;
</pre>
<p>Une fois le nouveau script saisi et enregistré, chargez les données à l&#8217;aide de l&#8217;icone recharger <img class="alignnone size-full wp-image-313" title="ico-reload-datas" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/ico-reload-datas.jpg" alt="Icone Relaod de QLik" width="23" height="23" />. Ensuite, dans le menu principal, cliquez sur &laquo;&nbsp;Fichier =&gt; Visionneur de tables&nbsp;&raquo; (figure 7.1).</p>
<div id="attachment_314" class="wp-caption alignnone" style="width: 379px"><img class="size-full wp-image-314" title="7.1-qlik-menu-visionneur-tables" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/7.1-qlik-menu-visionneur-tables.jpg" alt="Menu visionneur de tables" width="369" height="665" /><p class="wp-caption-text">Figure 7.1 - Menu visionneur de tables</p></div>
<p>Une nouvelle fenêtre s&#8217;affiche avec nos deux tables (figure 7.2) ainsi qu&#8217;un lien entre notre champ catégorie et id. Ce lien s&#8217;execute automatiquement car nous avons donné des alias identiques à nos deux champs.</p>
<div id="attachment_315" class="wp-caption alignnone" style="width: 375px"><img class="size-full wp-image-315" title="7.2-qlik-fenetre-visionneur-table" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/7.2-qlik-fenetre-visionneur-table.jpg" alt="Fenêtre du visionneur de table QLikView" width="365" height="201" /><p class="wp-caption-text">Figure 7.2 - Fenêtre du visionneur de table QLikView</p></div>
<p>Nous allons ajouter un objet de type &laquo;&nbsp;tableau&nbsp;&raquo; (figure 7.3). Cliquez sur appliquer puis valider et vous obtiendrez un tableau avec les champs joints (figure 7.4).</p>
<div id="attachment_316" class="wp-caption alignnone" style="width: 721px"><img class="size-full wp-image-316" title="7.3-qlik-add-tableau" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/7.3-qlik-add-tableau.jpg" alt="Tableau d'affichage de données" width="711" height="563" /><p class="wp-caption-text">Figure 7.3 - Création d&#39;un tableau de données</p></div>
<div id="attachment_317" class="wp-caption alignnone" style="width: 564px"><img class="size-full wp-image-317" title="7.4-qlik-resultat-tableau-jointures" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/7.4-qlik-resultat-tableau-jointures.jpg" alt="Résultat du tableau avec jointure" width="554" height="158" /><p class="wp-caption-text">Figure 7.4 - Résultat du tableau avec jointure</p></div>
<h2>VIII – Les graphiques</h2>
<p>Nous allons ajouter à notre rapport un simple graphique listant le nombre de livre par catégorie.Clique droit sur la feuille puis &laquo;&nbsp;Ajouter un objet =&gt; Graphique&nbsp;&raquo;.Complétez les informations nécessaires (figure 8.1 à 8.3) .</p>
<div id="attachment_319" class="wp-caption alignnone" style="width: 824px"><img class="size-full wp-image-319" title="8.1-qlik-Graphisme-step1" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.1-qlik-Graphisme-step1.jpg" alt="Création d'un graphique - Etape 1" width="814" height="593" /><p class="wp-caption-text">Figure 8.1 - Création d&#39;un graphique - Etape 1</p></div>
<div id="attachment_320" class="wp-caption alignnone" style="width: 819px"><img class="size-full wp-image-320" title="8.2-qlik-Graphisme-step2" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.2-qlik-Graphisme-step2.jpg" alt="Création d'un graphique - Etape 1" width="809" height="585" /><p class="wp-caption-text">Figure 8.2 - Création d&#39;un graphique - Etape 2</p></div>
<div id="attachment_321" class="wp-caption alignnone" style="width: 894px"><img class="size-full wp-image-321" title="8.3-qlik-Graphisme-step3" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.3-qlik-Graphisme-step3.jpg" alt="Création d'un graphique - Etape 3" width="884" height="602" /><p class="wp-caption-text">Figure 8.3 - Création d&#39;un graphique - Etape 3</p></div>
<p>Une fois renseigner l&#8217;ensemble des informations, vous pouvez valider. Vous devriez obtenir le résulat suivant (figure 8.4).</p>
<div id="attachment_322" class="wp-caption alignnone" style="width: 1065px"><img class="size-full wp-image-322" title="8.4-qlik-graph-resultat" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.4-qlik-graph-resultat.jpg" alt="Résultat création graphique" width="1055" height="399" /><p class="wp-caption-text">Figure 8.4 - Résultat création graphique</p></div>
<p>Vous pouvez cloner l&#8217;objet que nous venons de créer afin de le décliner dans une autre forme ; pour cela, clic droit sur l&#8217;objet puis cloner (figure 8.5).</p>
<div id="attachment_323" class="wp-caption alignnone" style="width: 568px"><img class="size-full wp-image-323" title="8.5-qlik-clone-objet" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.5-qlik-clone-objet.jpg" alt="Clonage objet graphique" width="558" height="338" /><p class="wp-caption-text">Figure 8.6 - Clonage objet graphique</p></div>
<p>Modifier l&#8217;élément en cliquant sur propriété dans le menu contextuel puis sélectionnez un autre type de graphisme ; Dans l&#8217;exemple j&#8217;ai choisi un Tableau croisé dynamique (figure 8.6).</p>
<div id="attachment_324" class="wp-caption alignnone" style="width: 823px"><img class="size-full wp-image-324" title="8.6-qlik-clone-tableau-croise-dyn" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.6-qlik-clone-tableau-croise-dyn.jpg" alt="Sélection tableau croisé dynamique" width="813" height="593" /><p class="wp-caption-text">Figure 8.6 - Sélection tableau croisé dynamique</p></div>
<p>Validez afin de visualiser le résultat (figure 8.7).</p>
<div id="attachment_325" class="wp-caption alignnone" style="width: 611px"><img class="size-full wp-image-325" title="8.7-qlik-resultat-tableau-croise-dyn" src="http://sldesign.openwab.com/wp-content/uploads/2010/06/8.7-qlik-resultat-tableau-croise-dyn.jpg" alt="Résultat tableau croisé dynamique" width="601" height="177" /><p class="wp-caption-text">Figure 8.7 - Résultat tableau croisé dynamique</p></div>
<h2>IX &#8211; Conclusion</h2>
<p>Vous venez de découvrir en quelques minutes QLikView. Ce logiciel est relativement simple à prendre en main et le rendu est surprenant !</p>
<p>J&#8217;aurai l&#8217;occasion dans un autre tutoriel en cours de préparation de vous présenter d&#8217;autres possibilités qu&#8217;offre cette solution.</p>
<p>Le décisionnel devient accessible sans connaissance extrêmes du langage SQL.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/06/28/tutoriel-qlikview-prise-en-main-et-premiere-application-decisonnel-et-bi/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CSS3 &#8211; Quelques nouveautés en image</title>
		<link>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/</link>
		<comments>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 05:19:20 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[HTML / CSS]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=173</guid>
		<description><![CDATA[Je suis persuadé que lorsque vous développez un site WEB, vous avez un multitude de logiciels ouverts sur votre bureau ; encore aujourd&#8217;hui, j&#8217;utilise Gimp pour éditer des images aux coins arrondis. Bientôt, avec CSS3, nous allons pouvoir nous passer d&#8217;éditer certaines images et gagner un temps précieux dans le développement de nos sites. Dans [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F23%2Fcss3-quelques-nouveautes-en-image%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F23%2Fcss3-quelques-nouveautes-en-image%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/css3-article.jpg"><img class="alignleft size-full wp-image-146" title="Icone Article CSS3 Gradient" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/css3-article.jpg" alt="Icone de l'article sur CSS 3 et la gestion de dégradés" width="175" height="187" /></a>Je suis persuadé que lorsque vous développez un site WEB, vous avez un multitude de logiciels ouverts sur votre bureau ; encore aujourd&#8217;hui, j&#8217;utilise Gimp pour éditer des images aux coins arrondis. Bientôt, avec CSS3, nous allons pouvoir nous passer d&#8217;éditer certaines images et gagner un temps précieux dans le développement de nos sites.</p>
<p>Dans cet article, je vais vous montrer certaines techniques CSS3 qui vous permettront de changer vos méthodes de travail.</p>
<p><span id="more-173"></span></p>
<h3>CSS3?  What&#8217;s  that?! Qu&#8217;est-ce que c&#8217;est?!</h3>
<p>Je  suis sûr que vous avez entendu parler de CSS en général. CSS3 n&#8217;est pas très différent, en termes de  syntaxe, mais la puissance de CSS3 est beaucoup plus grande. Comme vous le verrez dans ces techniques comment il est possible redimensionner  dynamiquement des éléments, créer des ombres de texte,  et plus encore!</p>
<p>Voici la définition donnée par le W3C de CSS3 :</p>
<blockquote><p>CSS3 est le petit nouveau dans la famille feuille de style. Il offre de nouvelles possibilités intéressantes  pour créer un impact avec vos dessins, vous permet d&#8217;utiliser des  feuilles de style plus variés pour des effets de style beaucoup plus puissants et variés.</p></blockquote>
<h3>1°) Les coins arrondis en CSS3</h3>
<p>Alors qu&#8217;auparavant il était nécessaire de créer des coins arrondis avec des images ou encore utiliser javascript il est désormais possible de faire appel à CSS3 ; Voici le code et le résultat (figure 1) que vous obtiendrez avec la propriété &#8216;border-radius&#8217; :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box {
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 -moz-border-radius: 10px;
 -webkit-border-radius: 10px;
 border-radius: 10px;
}
&lt;/style&gt;

&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_174" class="wp-caption alignnone" style="width: 226px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/01-corner-radius.jpg"><img class="size-full wp-image-174" title="01-corner-radius" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/01-corner-radius.jpg" alt="Corner radius en CSS3" width="216" height="220" /></a><p class="wp-caption-text">Figure 1 - Résultat obtenu avec la propriété corner radius</p></div>
<p>Vous avez la possibilité de manipuler chacun des coins ; voici un exemple courbant les coins haut gauche et bas droit (figure 2) :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_2{
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 -moz-border-radius-topleft: 10px;
 -webkit-border-top-left-radius: 10px;
 -moz-border-radius-bottomright:10px;
 -webkit-border-bottom-right-radius:10px;
}
&lt;/style&gt;
&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_176" class="wp-caption alignnone" style="width: 176px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/02-corner-radius-exemple2.jpg"><img class="size-full wp-image-176" title="02-corner-radius-exemple2" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/02-corner-radius-exemple2.jpg" alt="Border-radius exemple 2" width="166" height="170" /></a><p class="wp-caption-text">Figure 2 - Coins arrondis sur deux angles</p></div>
<h3>2°) Les ombre sur div en CSS3</h3>
<p>Encore une fois CSS3 va nous faire gagner du temps ; fini les DIV superposés et décalés ou encore l&#8217;utilisation de javascript pour générer de belles ombres. La propriété &#8216;box-shadow&#8217; nous permet maintenant de réaliser ce type d&#8217;effet (Figure 3)</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_3 {
 background: #e3e3e3;
 border: 1px solid #000; border-radius : 10px;
 width:150px;
 height:150px;
 box-shadow: 10px 10px 5px #888;
 -moz-box-shadow: 10px 10px 5px #888;
 -webkit-box-shadow: 10px 10px 5px #888;
}
&lt;/style&gt;
&lt;div&gt;&lt;!--CONTENT--&gt;&lt;/div&gt;</pre>
<div id="attachment_177" class="wp-caption alignnone" style="width: 191px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/03-ombre-protée.jpg"><img class="size-full wp-image-177" title="03-ombre-protée" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/03-ombre-protée.jpg" alt="Figure 3 - Ombre portée sur un DIV" width="181" height="178" /></a><p class="wp-caption-text">Figure 3 - Ombre portée sur un DIV</p></div>
<p><span style="text-decoration: underline;"><strong>Voici les propriétés de notre élément &#8216;box-shadow&#8217; :</strong></span></p>
<ol>
<li>Décalage horizontal : en négatif le décalage sera à gauche en positif, il sera à droite</li>
<li>Décalage vertical : négatif il sera vers le haut, positif il sera vers le bas</li>
<li>Rayon de flou : par défaut 0, c&#8217;est à dire aucun.</li>
</ol>
<h3>3°) Les ombres de texte en CSS3</h3>
<p>Voici le code vous pemettant d&#8217;implémenter ce nouvel effet CSS3 ; Vous verrez en figure 4 le résultat, la première ligne sert à montrer la différence entre un texte sans ombre et un second avec :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.not-shadowed{
 color:blue;
 font-size:20px;
}
.shadowed{
 color:blue;
 font-size:20px;
 text-shadow: 0 1px 0 #000;
}
&lt;/style&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor...&lt;/p&gt;
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor...&lt;/p&gt;</pre>
<div id="attachment_179" class="wp-caption alignnone" style="width: 679px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/04-text-shadow.jpg"><img class="size-full wp-image-179" title="04-text-shadow" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/04-text-shadow.jpg" alt="Résultat CSS3 Text shadow" width="669" height="77" /></a><p class="wp-caption-text">Figure 4 - Text shadow</p></div>
<p>Les propriétés sont les mêmes que pour un DIV.</p>
<h3>4°) Les polices de caractères embarquées :</h3>
<p>Nous en avons rêvé pendant longtemps, CSS3 l&#8217;a fait ! Il est maintenant possible de choisir votre police et de l&#8217;utiliser dans vos pages WEB &#8211; veillez toutefois à faire attention aux droits d&#8217;utilisation, toutes les polices ne sont pas libres de droit. Dans l&#8217;exemple suivant, j&#8217;ai opté pour la police &#8216;LIBRE&#8217;.</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
@font-face {
 font-family: 'libre';
 src: url('design/mido_igual.ttf');
}
.font {
 font-family: libre;
 font-size: 30px;
}
&lt;/style&gt;

&lt;p&gt;Lorem ipsum dolor sit amet...&lt;/p&gt;</pre>
<div id="attachment_181" class="wp-caption alignnone" style="width: 529px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/05-police-embarquée.jpg"><img class="size-full wp-image-181" title="05-police-embarquée" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/05-police-embarquée.jpg" alt="Figure 5 - CSS3 et police embarquée" width="519" height="50" /></a><p class="wp-caption-text">Figure 5 - CSS3 et police embarquée</p></div>
<h3>5°) CSS3 et opacité :</h3>
<p>Vous pouvez maintenant gérer l&#8217;opacité des éléments HTML dans vos feuilles de styles ; Il était déjà possible de réaliser cette opération avec les propriétés CSS &#8216;opacity&#8217; et &#8216;filter&#8217;. Maintenant la tache est plus facile comme vous pouvez le voir :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.main-box{
 background:red;
 height:200px;
 width:200px;
 border:1px solid #000;
}
.box_4 {
 height:100px;
 width:100px;
 opacity: .6;
 border:1px solid #000;
 background:#C3C3C3;
 float:left;
 margin-left:150px;
 margin-top:50px;
}
&lt;/style&gt;
&lt;div&gt;
 &lt;div&gt;
 &lt;!--CONTENT--&gt;
 &lt;/div&gt;
&lt;/div&gt;</pre>
<p>La figure 6 vous montre un carré gris dont l&#8217;opacité est fixée à 60% :</p>
<div id="attachment_182" class="wp-caption alignnone" style="width: 282px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/06-opacity.jpg"><img class="size-full wp-image-182" title="06-opacity" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/06-opacity.jpg" alt="Figure 6 - Opacité d'un élément " width="272" height="226" /></a><p class="wp-caption-text">Figure 6 - Opacité d&#39;un élément </p></div>
<h3>6°) Taille des &laquo;&nbsp;background&nbsp;&raquo;</h3>
<p>Il est maintenant possible d&#8217;utiliser la propriété &#8216;background-size&#8217; ; cette propriété sert à fixer la tailles des backgrounds ce qui était jusqu&#8217;alors impossible.</p>
<p>Voici un exemple avec une image dont la taille initiale est de 400px X 566px et ramenée à 50% d&#8217;un div dont les dimensions sont de 200px X 200px :</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.box_5 {
 height:200px;
 width:200px;
 border:1px solid #000;
 background:#C3C3C3;
 background: #ccc url(medias/img_400x566.png) no-repeat;
 -moz-background-size: 50%; /* Mozilla */
 -webkit-background-size: 50%; /* Safari */
 -o-background-size: 50%; /* Opera */
 -khtml-background-size: 50%; /* Konqueror */
}
&lt;/style&gt;

&lt;div&gt;
 &lt;!--CONTENT--&gt;
&lt;/div&gt;</pre>
<div id="attachment_184" class="wp-caption alignnone" style="width: 227px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/07-background-size.jpg"><img class="size-full wp-image-184" title="07-background-size" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/07-background-size.jpg" alt="Figure 7 - Propriété Background-size" width="217" height="218" /></a><p class="wp-caption-text">Figure 7 - Propriété Background-size</p></div>
<p><strong>Attention !</strong> Le résultat ne sera pas le même sur tous les navigateurs ! Pour exemple, Mozilla conserve les proportions de votre image ce qui n&#8217;est pas le cas sur Chrome&#8230;</p>
<h3>7°) Propriétés columns :</h3>
<p>Voici une propriété qui vous permet de diviser un DIV en plusieurs colonnes. pour cela, il vous suffit d&#8217;en spécifier le nombre.</p>
<pre class="brush:html">&lt;style type="text/css"&gt;
.columns {
 width:600px;
 -moz-column-count: 2;
 -webkit-column-count: 2;
}
&lt;/style&gt;

&lt;div&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum accumsan mi. Maecenas id dui a magna tempor pretium. Quisque id enim. Proin id tortor. Curabitur sit amet enim vitae quam pharetra imperdiet. Nulla diam ante, pellentesque eu, vestibulum non, adipiscing nec, eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis a nunc. Donec non dui a velit pulvinar gravida. Nunc rutrum libero vel tortor. Duis sed mi eu metus tincidunt ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In purus lorem, aliquam ac, congue ac, vestibulum quis, felis. Aliquam non sapien.&lt;/p&gt;
 &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum accumsan mi. Maecenas id dui a magna tempor pretium. Quisque id enim. Proin id tortor. Curabitur sit amet enim vitae quam pharetra imperdiet. Nulla diam ante, pellentesque eu, vestibulum non, adipiscing nec, eros. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis a nunc. Donec non dui a velit pulvinar gravida. Nunc rutrum libero vel tortor. Duis sed mi eu metus tincidunt ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In purus lorem, aliquam ac, congue ac, vestibulum quis, felis. Aliquam non sapien.&lt;/p&gt;
&lt;/div&gt;</pre>
<div id="attachment_185" class="wp-caption alignnone" style="width: 638px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/08-columns.jpg"><img class="size-full wp-image-185" title="08-columns" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/08-columns.jpg" alt="Figure 8 - Propriété colonnes" width="628" height="313" /></a><p class="wp-caption-text">Figure 8 - Propriété colonnes</p></div>
<p>8°) Bordures &#8216;images&#8217;</p>
<p>Euh&#8230; Comment dire ? l&#8217;utilité de cette nouvelle propriété est contestable mais elle a le mérite d&#8217;exister. Donc, vous allez pouvoir créer des bordures à partir d&#8217;images.</p>
<p>Je ne vais pas m&#8217;étendre sur cette propriété donc passons tout de suite au code et au résultat :</p>
<pre class="brsh:html">&lt;style type="text/css"&gt;
.box_6 {
 height:200px;
 width:200px;
 border-width: 20px;
 -webkit-border-image: url(design/border2.png) 27 round;
 -moz-border-image: url(design/border2.png) 27 round;
 border-image: url(design/border2.png) 27 round;
}
&lt;/style&gt;

&lt;div&gt;
 &lt;!--CONTENT--&gt;
&lt;/div&gt;</pre>
<div id="attachment_186" class="wp-caption alignnone" style="width: 91px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/border2.png"><img class="size-full wp-image-186" title="border2" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/border2.png" alt="Figure 9 - Image source" width="81" height="81" /></a><p class="wp-caption-text">Figure 9 - Image source</p></div>
<div id="attachment_187" class="wp-caption alignnone" style="width: 267px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/09-image-border.jpg"><img class="size-full wp-image-187" title="09-image-border" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/09-image-border.jpg" alt="Figure 10 - Résultat d'une bordure 'image'" width="257" height="255" /></a><p class="wp-caption-text">Figure 10 - Résultat d&#39;une bordure &#39;image&#39;</p></div>
<h3>Les sélecteurs CSS3</h3>
<p>Je n&#8217;ai pas d&#8217;exemple imagé, sachez simplement que de nouveaux sélecteurs font leur arrivée dans vos feuilles de style ; Cela signifie que vous pourrez créer des design encore plus puissants et personnalisés.</p>
<p>Je vous renvoi à l&#8217;excellent article parru sur le site <a href="http://www.456bereastreet.com/archive/200601/css_3_selectors_explained/">www.456bereastreet.com</a></p>
<p>Je réaliserai un post complet à ce sujet dans les jours qui viennent.</p>
<h3>Conclusion</h3>
<p><span onmouseover="_tipon(this)" onmouseout="_tipoff()">Vous venez de consulter quelques techniques CSS qui vous faciliteront le développement de vos interfaces et design WEB.</span> <span onmouseover="_tipon(this)" onmouseout="_tipoff()">Malheureusement, il faudra encore attendre un peu avant que ceci soit réalisable sur tous les navigateurs&#8230; alors pensez utilisateurs et dites vous bien que de nombreuses personnes n&#8217;aurons pas accès à toues ces propriétés.<br />
</span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 6503px; width: 1px; height: 1px; overflow: hidden;">
<table>
<caption><span onmouseover="_tipon(this)" onmouseout="_tipoff()">Vue d&#8217;ensemble de la syntaxe CSS 3 Sélecteur</span> </caption>
<thead>
<tr>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Selector type</span> Sélecteur de type</span></th>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Pattern</span> Modèle</span></th>
<th scope="col"> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Description</span> <a href="http://translate.googleusercontent.com/translate_c?hl=fr&amp;sl=en&amp;tl=fr&amp;u=http://www.w3.org/TR/2005/WD-css3-selectors-20051215/&amp;rurl=translate.google.fr&amp;usg=ALkJrhio3IcrAl3wjSeyIm2tFahr3fR9IQ">Description</a></span></th>
</tr>
</thead>
<tbody>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att^=”val”]</span> E [^ att = "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value begins with “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de  l&#8217;attribut commence par &laquo;&nbsp;val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att$=”val”]</span> E [att $ = "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value ends with “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de  l&#8217;attribut se termine par &laquo;&nbsp;Val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Substring  matching attribute selector</span> sélecteur de sous-chaîne  correspondant à l&#8217;attribut</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E[att*=”val”]</span> E [att *= "val"]</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element whose <code>att</code> attribute value contains the  substring “val”.</span> Correspond à tout élément E dont l&#8217; <code>att</code> valeur de l&#8217;attribut contient la chaîne &laquo;&nbsp;val&nbsp;&raquo;.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:root</span> E: root</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches the document&#8217;s root element.</span> Correspondances élément racine du document.</span> <span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">In  HTML, the root element is always the HTML element.</span> En HTML,  l&#8217;élément racine est toujours l&#8217;élément HTML.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-child(n)</span> E: nth-child (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the n-th child of  its parent.</span> Correspond à tout élément E qui est l&#8217;enfant n-ième  de son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-last-child(n)</span> E: nth-last-child (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the n-th child of  its parent, counting from the last child.</span> Correspond à tout  élément E qui est l&#8217;enfant n-ième de sa mère, à compter du dernier  enfant.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-of-type(n)</span> E: nth-of-type (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the n-th sibling of its type.</span> Correspond à  tout élément E qui est le frère n-ème de sa catégorie.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:nth-last-of-type(n)</span> E: nth-last-of-type (n)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the n-th sibling of its type, counting from the  last sibling.</span> Correspond à tout élément E qui est le frère n-ème  de sa catégorie, à compter de la fratrie dernier.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:last-child</span> E: last-child</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the last child of  its parent.</span> Correspond à tout élément E qui est le dernier enfant  de son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:first-of-type</span> E: first-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the first sibling  of its type.</span> Correspond à tout élément E qui est le premier frère  de son type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:last-of-type</span> E: last-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the last sibling of its type.</span> Correspond à  tout élément E qui est le frère dernière de ce type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:only-child</span> E: que l&#8217;enfant</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that is the only child of  its parent.</span> Correspond à tout élément E qui est le seul enfant de  son parent.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural pseudo-class</span> Structurels  pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:only-of-type</span> E: only-of-type</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any E element that is the only sibling of its type.</span> Correspond à  tout élément E qui est le seul frère de son type.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Structural  pseudo-class</span> Structurels pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:empty</span> E: vide</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that has no children  (including text nodes).</span> Correspond à tout élément E qui n&#8217;a pas  d&#8217;enfants (y compris les nœuds de texte).</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Target  pseudo-class</span> Objectif pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:target</span> E: l&#8217;objectif</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches an E element that is the target of the  referring URL.</span> Correspond à un élément E qui est la cible de  l&#8217;URL de renvoi.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:enabled</span> E: activé</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any user interface element (form  control) E that is enabled.</span> Correspond à tout élément d&#8217;interface  utilisateur (contrôle de formulaire) E qui est activé.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:disabled</span> E: personnes handicapées</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  any user interface element (form control) E that is disabled.</span> Correspond à tout élément d&#8217;interface utilisateur (contrôle de  formulaire) E qui est désactivé.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element states pseudo-class</span> UI élément Etats pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:checked</span> E: checked</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any user interface element (form  control) E that is checked.</span> Correspond à tout élément d&#8217;interface  utilisateur (contrôle de formulaire) E qui est vérifiée.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">UI  element fragments pseudo-element</span> élément d&#8217;interface fragments  pseudo-élément</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E::selection</span> E:: sélection</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches  the portion of an element E that is currently selected or highlighted  by the user.</span> Correspond à la partie d&#8217;un élément E qui est  actuellement sélectionné ou mis en valeur par l&#8217;utilisateur.</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Negation  pseudo-class</span> Négation pseudo-classe</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E:not(s)</span> E: pas (s)</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any E element that does not match the  simple selector s.</span> Correspond à tout élément E qui ne correspond  pas à la simple sélection de l&#8217;art</span></td>
</tr>
<tr>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">General  sibling combinator</span> Générale frère combinateur</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">E ~ F</span> E ~ F</span></td>
<td><span onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left;">Matches any F element that is preceded by an E  element.</span> Correspond à tout élément F qui est précédé par un  élément E.</span></td>
</tr>
</tbody>
</table>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/04/23/css3-quelques-nouveautes-en-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel Graphisme : Création d&#8217;une Malette en cuir avec TheGimp !</title>
		<link>http://sldesign.openwab.com/2010/04/08/tutoriel-graphisme-creation-dune-malette-en-cuir-avec-thegimp/</link>
		<comments>http://sldesign.openwab.com/2010/04/08/tutoriel-graphisme-creation-dune-malette-en-cuir-avec-thegimp/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 09:23:00 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Graphisme]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Gimp]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=30</guid>
		<description><![CDATA[Nous allons voir ensemble comment réaliser cette mallette en cuir ; Il s&#8217;agit en fait à la base d&#8217;une mallette réalisée sous Photoshop et dont j&#8217;ai adapté la réalisation sur mon logiciel préféré Avant de commencer vérifiez que vous avez 1 heure devant vous Informations sur le tutoriel : Logiciels utilisés : The Gimp ! [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F08%2Ftutoriel-graphisme-creation-dune-malette-en-cuir-avec-thegimp%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F08%2Ftutoriel-graphisme-creation-dune-malette-en-cuir-avec-thegimp%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<div id="attachment_31" class="wp-caption alignleft" style="width: 310px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/leather_case_final.jpg"><img class="size-full wp-image-31 " title="leather_case_final" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/leather_case_final.jpg" alt="Malette en cuir réalisée sous The Gimp" width="300" height="300" /></a><p class="wp-caption-text">Mallette en cuir réalisée sous The Gimp</p></div>
<p>Nous allons voir ensemble comment réaliser cette mallette en cuir ; Il s&#8217;agit en fait à la base d&#8217;une mallette réalisée sous Photoshop et dont j&#8217;ai adapté la réalisation sur mon logiciel préféré <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Avant de commencer vérifiez que vous avez 1 heure devant vous <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Informations sur le tutoriel :</p>
<ul>
<li>Logiciels utilisés : The Gimp !</li>
<li>Difficulté : Avancée</li>
<li>Durée de réalisation : 1 à 2 heures</li>
</ul>
<p><span id="more-30"></span></p>
<hr class="clearAll" />
<h3>Étape 1 &#8211; Préparation</h3>
<p>1ere chose et pas des moindres, il vous faut le logiciel The Gimp ! , pour ceux qui ne connaissent pas ce logiciel et qui ne le possèdent pas encore, je vous invite à consulter ce Post =&gt; <a title="Post The Gimp" href="http://sldesign.openwab.com/2010/04/08/the-gimp-solution-pour-graphistes-open-source/">Post : The Gimp !</a></p>
<p>Si vous possédez le logiciel et que ce dernier est installé, il ne vous reste plus qu&#8217;à le lancer et créer un nouveau document ; J&#8217;ai choisi un document 1000*1000 ce qui vous permettra d&#8217;avoir un bon rendu, si vous le souhaitez, vous pouvez réduire cette taille&#8230; (voir figure 1)</p>
<div id="attachment_48" class="wp-caption alignnone" style="width: 400px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/new_doc.jpg"><img class="size-full wp-image-48 " title="Nouveau document Gimp Leather Case" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/new_doc.jpg" alt="" width="390" height="264" /></a><p class="wp-caption-text">Figure 1</p></div>
<h3>Étape 2 &#8211; Le Patron</h3>
<p>Nous allons créer le patron, c&#8217;est à dire la forme principale de notre mallette.</p>
<p>Créez un calque que vous appellerez &laquo;&nbsp;mallette_bas&nbsp;&raquo;, sélectionnez l&#8217;outil rectangle et dessinez un rectangle avec les propriétés que vous pouvez voir en figure 2.</p>
<div id="attachment_53" class="wp-caption alignnone" style="width: 184px"><img class="size-full wp-image-53" title="Patron leather Case rectangle bas" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/03_patron_bas_rectangle.jpg" alt="" width="174" height="424" /><p class="wp-caption-text">Figure 2</p></div>
<p>Remplissez ce rectangle d&#8217;une couleur quelconque et vous devriez obtenir le résultat suivant (Figure 3).</p>
<div id="attachment_54" class="wp-caption alignnone" style="width: 453px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/04_patron_bas_resultat.jpg"><img class="size-full wp-image-54 " title="Patron bas leather case resultat" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/04_patron_bas_resultat.jpg" alt="" width="443" height="402" /></a><p class="wp-caption-text">Figure 3</p></div>
<p>Nous allons maintenant créer notre patron haut qui correspond au battant de notre mallette. Pour cela, nous allons utiliser l&#8217;outil rectangle et placer cette forme au dessus de notre élément bas ; il faudra veiller à ce que cette forme soit un peu plus grande que notre élément bas</p>
<p>Vous devriez obtenir le resultat suivant (Figure 5)</p>
<div id="attachment_64" class="wp-caption alignnone" style="width: 563px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/07_patron_haut_resultat_11.jpg"><img class="size-full wp-image-64" title="Patron haut" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/07_patron_haut_resultat_11.jpg" alt="Patron haut" width="553" height="388" /></a><p class="wp-caption-text">Figure 5</p></div>
<p>Une fois cette opération réalisée, vous pouvez réaliser les arrondis à l&#8217;aide de l&#8217;outil ellipse. Ceci va nous permettre de donner de l&#8217;arrondi à notre mallette. Pour ce faire, créez un calque que vous nommerez &laquo;&nbsp;tmp_arrondi_haut&nbsp;&raquo;, puis réalisez un ellipse comme montré ci-dessous (Figure 6).</p>
<div id="attachment_66" class="wp-caption alignnone" style="width: 570px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/08_patron_haut_arrondi_1.jpg"><img class="size-full wp-image-66" title="Patron arrondi haut" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/08_patron_haut_arrondi_1.jpg" alt="" width="560" height="410" /></a><p class="wp-caption-text">Figure 6</p></div>
<p>Dupliquez ce calque et nommez le &laquo;&nbsp;tmp_arrondi_bas&nbsp;&raquo; et placez le en bas pour obtenir le résultat suivant (Figure 7).</p>
<div id="attachment_67" class="wp-caption alignnone" style="width: 575px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/09_patron_haut_arrondi_2.jpg"><img class="size-full wp-image-67" title="09_patron_haut_arrondi_2" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/09_patron_haut_arrondi_2.jpg" alt="" width="565" height="396" /></a><p class="wp-caption-text">Figure 7</p></div>
<p>Nous allons réaliser le même type d&#8217;opération mais pour les arrondis latéraux. Procédez de même que pour les arrondis bas et haut afin d&#8217;obtenir le résultat suivant (Figure 8).</p>
<div id="attachment_69" class="wp-caption alignnone" style="width: 573px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/10_patron_arrondi_gauche.jpg"><img class="size-full wp-image-69" title="10_patron_arrondi_gauche" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/10_patron_arrondi_gauche.jpg" alt="" width="563" height="395" /></a><p class="wp-caption-text">Figure 8</p></div>
<div id="attachment_70" class="wp-caption alignnone" style="width: 575px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/11_patron_arrondi_droite.jpg"><img class="size-full wp-image-70" title="11_patron_arrondi_droite" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/11_patron_arrondi_droite.jpg" alt="" width="565" height="399" /></a><p class="wp-caption-text">Figure 9</p></div>
<p>Fusionnez l&#8217;ensemble des calques temporaires (tmp_&#8230;.) avec le calque &laquo;&nbsp;patron_haut&nbsp;&raquo; puis réalisez un Alpha ver sélection de ce dernier calque et remplissez d&#8217;une couleur quelconque. Vous devriez obtenir le résultat suivant (Figure 10).</p>
<div id="attachment_71" class="wp-caption alignnone" style="width: 577px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/12_patron_haut_final.jpg"><img class="size-full wp-image-71" title="12_patron_haut_final" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/12_patron_haut_final.jpg" alt="" width="567" height="570" /></a><p class="wp-caption-text">Figure 10</p></div>
<h3>Étape 3 &#8211; Couleur et relief</h3>
<p>Nous allons aborder la phase de couleur dans un 1er temps. Dans votre logiciel, sélectionnez l&#8217;outil &laquo;&nbsp;Dégradé&nbsp;&raquo; puis modifiez respectivement la couleur de 1er et 2eme plan comme ceci (Figure 11 et 12)</p>
<div id="attachment_75" class="wp-caption alignnone" style="width: 515px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/13_degrade_1.jpg"><img class="size-full wp-image-75" title="Degradé 1er plan" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/13_degrade_1.jpg" alt="" width="505" height="338" /></a><p class="wp-caption-text">Figure 11</p></div>
<div id="attachment_76" class="wp-caption alignnone" style="width: 518px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/14_degrade_2.jpg"><img class="size-full wp-image-76" title="Degradé second plan" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/14_degrade_2.jpg" alt="" width="508" height="341" /></a><p class="wp-caption-text">Figure 12</p></div>
<p>Créez un nouveau calque (au dessus du patron bas) et nommez le &laquo;&nbsp;Mallette_bas&nbsp;&raquo;. Faites un Alpha vers sélection de votre patron bas et sélectionnez votre nouveau calque afin de réaliser un dégradé du haut gauche ver bas droit de la sélection active. Vous devriez obtenir le résultat suivant (Figure 13).</p>
<p>Dupliquez ce calque et nommez le nuages_bas ; Sélectionnez ce calque puis réalisez les opérations suivantes :</p>
<p>Clique Droit =&gt;Rendu =&gt; Nuages =&gt; Nuage par différence</p>
<p>Appliquez les réglages comme indiqué sur la figure 14 (La graine n&#8217;a que peu d&#8217;importance faites ce que bon vous semble en mode aléatoire) et obtenir le résultat présent en figure 15.</p>
<div id="attachment_78" class="wp-caption alignnone" style="width: 470px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/16_nuage_apr_difference.jpg"><img class="size-full wp-image-78" title="16_nuage_apr_difference" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/16_nuage_apr_difference.jpg" alt="" width="460" height="364" /></a><p class="wp-caption-text">Figure 14</p></div>
<div id="attachment_79" class="wp-caption alignnone" style="width: 475px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/17_nuage_par_difference.jpg"><img class="size-full wp-image-79" title="17_nuage_par_difference" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/17_nuage_par_difference.jpg" alt="" width="465" height="554" /></a><p class="wp-caption-text">Figure 15</p></div>
<p>Réglez l&#8217;opacité de ce calque sur 10 et fusionnez vers le bas.</p>
<h3>Étape 4 &#8211; La texture</h3>
<p>Maintenant que votre patron est terminé, nous allons passer à la texture. Pour notre exemple, vous pouvez utiliser tout type de texture de type cuir ; Je vous en livre une qui est celle utilisée pour mon tutoriel.</p>
<div id="attachment_51" class="wp-caption alignnone" style="width: 160px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/pater_leather_case.jpg"><img class="size-thumbnail wp-image-51 " title="Patern Leather Case" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/pater_leather_case-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Texture Cuir</p></div>
<p>Une fois téléchargé, placez cette image sur un nouveau calque (Vous pouvez glisser=&gt;déposer) et dupliquez la. Masquez l&#8217;une des textures.</p>
<p>Sélectionnez le calque &laquo;&nbsp;Patron_bas&nbsp;&raquo; et faites un clic droit pour afficher le menu contextuel puis choisissez &laquo;&nbsp;Alpha vers sélection&nbsp;&raquo; ; cette action à pour effet de rendre la forme sélectionnée.</p>
<p>Cliquez sur le calque de texture pour l&#8217;activer puis inverser la sélection (Sélection=&gt;Inverser) puis faites un Suppr.</p>
<p>Nous allons ajouter un peu de relief à notre mallette, sélectionnez le patron bas puis faite une réduction de la sélection de 4px. Il faut maintenant réaliser un dégradé blanc vers transparent de 50px qui partira de notre sélection vers le cente et ceci dans chacun des coins. Une fois cette opération réalisée, appliquez un flou gaussien de 25 afin de nuancer la lumière.</p>
<p>Réalisez une reduction de la selection de 20px puis réalisez la même opération mais avec un dégradé de noir vers transparent. Ceci va permettre de donner un effet de profondeur. Voici le resultat que vous devriez obtenir (figure ?).</p>
<div id="attachment_91" class="wp-caption alignnone" style="width: 529px"><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/20_texture_et_profondeur.jpg"><img class="size-full wp-image-91" title="Profondeur et lumiere final" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/20_texture_et_profondeur.jpg" alt="" width="519" height="572" /></a><p class="wp-caption-text">Figure</p></div>
<p>Vous pouvez réaliser les mêmes opérations pour le patron haut. Je vous laisse faire, voici ce que vous devriez obtenir.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/04/08/tutoriel-graphisme-creation-dune-malette-en-cuir-avec-thegimp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création d&#8217;un Plug-In jQuery</title>
		<link>http://sldesign.openwab.com/2010/04/07/creation-dun-plug-in-jquery/</link>
		<comments>http://sldesign.openwab.com/2010/04/07/creation-dun-plug-in-jquery/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 11:19:21 +0000</pubDate>
		<dc:creator>Steve Leherpeux</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://sldesign.openwab.com/?p=12</guid>
		<description><![CDATA[jQuery est sans doute l&#8217;un des plus puissant Framework  JavaScript. Une de ses forces réside dans le développement de plug-in facile à intégrer et à développer. Dans ce tutoriel, nous allons voir comment développer un plug-in jQuery autour d&#8217;un simple carrousel pour publier vos images ou réalisations graphiques. Etape 1 &#8211; Préambule Avant toute chose [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F07%2Fcreation-dun-plug-in-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsldesign.openwab.com%2F2010%2F04%2F07%2Fcreation-dun-plug-in-jquery%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>jQuery est sans doute l&#8217;un des plus puissant Framework  JavaScript. Une de ses forces réside dans le développement de plug-in facile à intégrer et à développer.</p>
<h2><a href="http://sldesign.openwab.com/wp-content/uploads/2010/04/jquery_01.jpg"><img class="alignleft  size-full wp-image-13" title="jquery_01" src="http://sldesign.openwab.com/wp-content/uploads/2010/04/jquery_01-e1270639031705.jpg" alt="Capture d'écran jQuery Coding" width="230" height="230" /></a></h2>
<p>Dans ce tutoriel, nous allons voir comment développer un plug-in jQuery autour d&#8217;un simple carrousel pour publier vos images ou réalisations graphiques.</p>
<h2><span id="more-12"></span></h2>
<hr class="clearAll" />
<h2>Etape 1 &#8211; Préambule</h2>
<p><span style="text-decoration: underline;"><strong>Avant toute chose :</strong></span></p>
<p>Si vous répondez oui à l&#8217;ensemble de ces questions, vous pouvez continuer à suivre ce tutoriel :</p>
<ul>
<li>Je connais jQuery et je sais l&#8217;intégrer dans une page WEB</li>
<li>Je sais comment déclencher une action à l&#8217;aide de jQuery</li>
<li>J&#8217;ai un éditeur de code HTML / CSS / JAVASCRIPT</li>
<li>Je sais comment initialiser jQuery</li>
</ul>
<p>Continuons&#8230;</p>
<p><span style="text-decoration: underline;"><strong>Informations techniques :</strong></span></p>
<p>J&#8217;utilise Aptana IDE comme éditeur</p>
<p>La version jQuery utilisée est la suivante : 1.4.2</p>
<h2>Etape 2 &#8211; Comprendre</h2>
<h3 id="LI">Qu&#8217;est-ce qu&#8217;un plugin jQuery ?</h3>
<p>Un plugin jQuery est un ensemble de fonctions que  l&#8217;on va rajouter à l&#8217;espace de noms de jQuery de manière à         enrichir les possibilités du framework. De nombreux plugins  existent déjà (<a href="http://plugins.jquery.com/">la  page des plugins jQuery</a>), qu&#8217;il s&#8217;agisse de créer de nouveaux  widgets, de rajouter         des fonctions aux opérations de base de jQuery ou de créer de  nouveaux comportements. Un plugin est avant tout une fonction qui         sera appelable sur un objet jQuery, il sera composé d&#8217;une  fonction publique et de plusieurs fonctions privées incluses dans la         fonction publique.</p>
<p>Dans sa structure, jQuery est fait pour que  tout le monde puisse y rajouter facilement des plugins. Un espace de     noms est dédié aux plugins : <em>$.fn</em>. Chaque plugin que vous  rajouterez est censé se trouver à cet endroit.     En créant du contenu dans <em>$.fn.exemple(paramètres)</em>, votre  plugin sera appelable directement par <em>jQuery.exemple(paramètres)</em>.  Un plugin     sera appliqué sur un objet jQuery, provenant par exemple d&#8217;une  recherche dans le DOM de la page et possèdera des paramètres,     indiqués par le développeur.</p>
<h3>Etape 3 &#8211; Initialiser</h3>
<p>Nous allons commencer par créer un nouveau fichier JavaScript ; dans le cadre de notre tutoriel j&#8217;ai décidé d&#8217;appeler mon plugIn &laquo;&nbsp;sldGal&nbsp;&raquo;. Chose important, veillez à ce que le nom de votre plugin soit unique <img src='http://sldesign.openwab.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Il nous faudra également un document de base &laquo;&nbsp;index.html&nbsp;&raquo;.</p>
<p>Code du fichier index.html</p>
<pre class="brush:html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;title&gt;slDesign - Tutoriel Plugin jQuery&lt;/title&gt;
&lt;link href="design/style.css" rel="stylesheet" type="text/css" /&gt;
&lt;script type="text/javascript" src="js/jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="js/sldGal.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- Contenu principal --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Code du fichier sldGal.js</p>
<pre class="brush:javascript">/**
 * sldGals.js - jQuery plugin
 */

//initialisation du plugin
(function($) {
 $.fn.sldGal = function(options) {
 //Initialise les options par défaut de notre plugin
 var defaults = {
 title: ""
 //Ajout des options ici...
 };   

 //Récupére les paramètres par défaut si ces paramètres ne sont pas fournis à la fonction.
 var opts = $.extend(defaults, options); 

 //Nous déclancherons notre fonction ici
 return $(this);
 };
})(jQuery);</pre>
<h2>3- Le code</h2>
<p><span style="color: #941504;"><strong>Cette partie est en cours de refonte&#8230; Merci de votre compréhension&#8230;</strong></span></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://sldesign.openwab.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://sldesign.openwab.com/2010/04/07/creation-dun-plug-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

