
<?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>Waanser &#187; Général</title>
	<atom:link href="http://www.waanser.com/category/javascript/general-js/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Javascript comme vous ne l&#8217;avez jamais vu !</title>
		<link>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html</link>
		<comments>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html#comments</comments>
		<pubDate>Mon, 18 May 2009 15:01:25 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1945</guid>
		<description><![CDATA[Le Javascript est souvent considéré à tord comme un langage jouet, alors qu&#8217;il offre d&#8217;énorme possibilités. Nous allons voir dans cet article des fonctions que vous avez jamais soupçonné l&#8217;existence ainsi que des façons de développer propre à JS. Vous êtes prêt à avoir un regard nouveau sur le javascript ? Alors c&#8217;est parti Prototype [...]]]></description>
			<content:encoded><![CDATA[<p>Le Javascript est souvent considéré à tord comme un langage jouet, alors qu&#8217;il offre d&#8217;énorme possibilités.<br />
Nous allons voir dans cet article des fonctions que vous avez jamais soupçonné l&#8217;existence ainsi que des façons de développer propre à JS.</p>
<p>Vous êtes prêt à avoir un regard nouveau sur le javascript ? Alors c&#8217;est parti <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Prototype</h2>
<p>Vous avez jamais entendu parler d&#8217;héritage en JS ? C&#8217;est normal, puisque nous sommes dans un langage de prototype. Mais nous avons autre chose qui remplace le système d&#8217;héritage ; <strong>l&#8217;ajout de propriété</strong>.</p>
<p>Voici une chaine toute simple :</p>
<pre class="brush: javascript">
var sMoi = &#039;Roul&#039;;
</pre>
<p><br/><br />
Nous allons ajouter une fonction à notre chaine. Pour cela nous allons ajouter une propriété à au <strong>prototype </strong>String. On peux dire que le prototype est la structure de l&#8217;entité concerné (String).</p>
<p>Cela va donner :</p>
<pre class="brush: javascript">
String.prototype.direBonjour=function(){
	return &#039;Bonjour &#039; + this.valueOf();
};
</pre>
<p>Pour faire appel à cette fonction il suffit de faire :</p>
<pre class="brush: javascript">
var sMoi = &#039;Roul&#039;;
alert(sMoi.direBonjour());
</pre>
<p>Le navigateur affiche :<br />
<div id="attachment_1953" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js1.png"><img src="http://media.waanser.com/2009/05/js1.png" alt="javascript prototype" title="js1" width="326" height="125" class="size-full wp-image-1953" /></a><p class="wp-caption-text">javascript prototype</p></div></p>
<p>Pas mal, non ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si vous ne connaissez pas, je vous conseille d&#8217;avoir toujours sous la main le site de <a href="http://www.w3schools.com/jsref/">w3schools</a> qui contient la référence complète du javascript.</p>
<p>Un autre exemple plus complexe :</p>
<p>On va adapter la méthode array_map de php (Applique une fonction sur les éléments d&#8217;un tableau) pour<br />
les tableau JS.</p>
<pre class="brush: javascript">
Array.prototype.map= function(fx)
{
	if (0 == this.length)
		return undefined;

	for (var index = 0; index &lt; this.length; ++index)
		this[index] = fx(this[index]);
	return this;
}

alert([1, 2, 3, 4, 5].map(function(iNb)
{
	iNb = parseInt (iNb, 10);
	return (iNb * iNb);
}));
</pre>
<p>Voilà le rendu :<br />
<div id="attachment_1958" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js2.png"><img src="http://media.waanser.com/2009/05/js2.png" alt="js prototype" title="js2" width="326" height="126" class="size-full wp-image-1958" /></a><p class="wp-caption-text">js prototype</p></div></p>
<p>Vous êtes toujours là ? On peut passer à la suite. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>La variable native : arguments</h2>
<p><strong>arguments</strong> est une variable locale créer nativement dans une fonction. Les arguments de la fonction y sont stockés. Cela peu être pratique pour certaines fonctions.<br />
Voici un exemple :</p>
<pre class="brush: javascript">
function getSum() {
	var iSum =0;
	for (var iCompt = 0; iCompt &lt; arguments.length; ++iCompt)
		iSum += arguments[iCompt];
	return iSum;
}

alert(getSum(1,2,3,4,5,6));
</pre>
<p>Le résultat :</p>
<div id="attachment_1961" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/05/js3.png"><img src="http://media.waanser.com/2009/05/js3.png" alt="js prototype" title="js3" width="326" height="126" class="size-full wp-image-1961" /></a><p class="wp-caption-text">js prototype</p></div>
<h2>Attention à la portée des variables</h2>
<p>Il faut bien faire attention de bien déclarer vos variables, parce que vous risquez d&#8217;avoir des surprises.<br />
Voyez l&#8217;exemple :</p>
<pre class="brush: javascript">
function getCalc(iEntierA)
{
	iEntierA = iEntierA + 2;
	iResultat = iEntierA * 2;
	var EntierB = 3;
	return iResultat;
}

var iResultat = 8;
var iEntierA = 6;
var iEntierB = 4;

document.write(&#039;iResultat = &#039; + iResultat + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierA = &#039; + iEntierA + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierB = &#039; + iEntierB + &#039;&lt;br/&gt;&#039;);
document.write(&#039;--------------------------&lt;br/&gt;&#039;);
document.write(&#039;getCalc(1) = &#039; + getCalc(1)+ &#039;&lt;br/&gt;&#039;);
document.write(&#039;--------------------------&lt;br/&gt;&#039;);
document.write(&#039;iResultat = &#039; + iResultat + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierA = &#039; + iEntierA + &#039;&lt;br/&gt;&#039;);
document.write(&#039;iEntierB = &#039; + iEntierB + &#039;&lt;br/&gt;&#039;);
</pre>
<p>Voici le rendu : </p>
<hr/>
iResultat = 8<br />
iEntierA = 6<br />
iEntierB = 4<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
getCalc(1) = 6<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
iResultat = 6<br />
iEntierA = 6<br />
iEntierB = 4</p>
<hr/>
<p>On voit clairement que <strong>iResultat</strong> est modifiée et qu&#8217;elle a prit la variable de la fonction.<br/><br />
<strong>Mais pourquoi ?</strong><br/><br />
Comme elle n&#8217;a pas été déclarée localement dans la fonction (comme <strong>EntierB </strong>), Javascript la retrouvée dans les variables globales. Et l&#8217;affectation de la nouvelle valeur a touchée la variable global.<br/><br />
Et <strong>iEntierA</strong> ? Comment ça ce fait qu&#8217;elle ne soit pas modifiée ?<br />
Comme elle est en paramètre de la fonction <strong>getCalc</strong>, la déclaration se fait implicitement.</p>
<h2>Les objets anonymes</h2>
<p>Les objets anonymes sont des objets très flexibles où l&#8217;on peut ajouter toutes sorte de propriétés.</p>
<p>Voici une utilisation utile dans une fonction de ces objets :</p>
<pre class="brush: javascript">
function getPresentation(oMe)
{
	undefined === oMe.prenom ? 0 : alert(&#039;nom : &#039; + oMe.prenom);
	undefined === oMe.nom ? 0 : alert(&#039;nom : &#039; + oMe.nom);
	undefined === oMe.age ? 0 : alert(&#039;age : &#039; + oMe.age);
}

getPresentation({prenom: &#039;Yann&#039;, age: 26});
getPresentation({prenom: &#039;Romain&#039;});
</pre>
<hr/>
<p>Eh voilà, on a vu quelques notions méconnues de javascript. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si vous avez des remarques où des interrogations sur le JS, n&#8217;hésitez pas à nous le faire partager <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/1945-le-javascript-comme-vous-lavez-jamais-vu.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>script.aculo.us. redimension fenêtre</title>
		<link>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html</link>
		<comments>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html#comments</comments>
		<pubDate>Wed, 25 Mar 2009 14:27:53 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[user-frendly]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1228</guid>
		<description><![CDATA[Redimensionner une fenêtre donne toujours un peu effet user-frendly sympa pour un site web. Nous allons voir pas à pas comment l&#8217;intégrer à vos pages (avec une petite aide de script.aculo.us). Mise en place des divs Cette étape c&#8217;est la plus simple. Dans le head, il faut juste charger les librairies script.aculo.us. &#60;script src=&#34;./lib/prototype.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Redimensionner une fenêtre donne toujours un peu effet user-frendly sympa pour un site web.<br />
Nous allons voir pas à pas comment l&#8217;intégrer à vos pages (avec une petite aide de script.aculo.us).<br />
<span id="more-1228"></span></p>
<h2>Mise en place des divs</h2>
<p>Cette étape c&#8217;est la plus simple. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Dans le head, il faut juste charger les librairies script.aculo.us.</p>
<pre class="brush: javascript">
&lt;script src=&quot;./lib/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/effects.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/dragdrop.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>On va ajouter nos fonctions sympa pour l&#8217;effet drag and drop.</p>
<pre class="brush: javascript">
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;

	function cache ( id ) {
		id.style.border = &#039;1px dashed #000000&#039;;
	}

	function affiche ( id ) {
		id.style.border = &#039;1px solid #000000&#039;;
	}
&lt;/script&gt;
</pre>
<p>Là on prépare notre CSS :</p>
<pre class="brush: css">
&lt;style type=&quot;text/css&quot;&gt;
	#boiteDimToMove {
		border: 1px solid #000000;
		width: 120px;
		height: 120px;
		float: left;
		background:#FF00FF;
	}

	#boiteDim {
		border: 1px solid #000000;
		width: 10px;
		height: 10px;
		margin-left: 109px;
		margin-top: 109px;
		float: left;
		background:#FF0000;
	}
&lt;/style&gt;
</pre>
<p>Maintenant on créer nos divs (dans le body)</p>
<pre class="brush: html">
&lt;div id=&quot;boiteDimToMove&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot;&gt;
	&lt;div id=&quot;boiteDim&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot; &gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Et on affecte à nos div la fonction draggable (sinon sans ça, nous pourrions pas déplacer nos divs).</p>
<pre class="brush: javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
	new Draggable(&#039;boiteDim&#039;);
	new Draggable(&#039;boiteDimToMove&#039;);
&lt;/script&gt;
</pre>
<p>Voila ce que ça va donner au final : <a href='http://media.waanser.com/2009/03/div1.html'>sur ce lien</a></p>
<p>Bon tout est prêt, on va pouvoir s&#8217;attaquer au plu dur :p</p>
<hr/>
<h2>Agrandir une fenêtre</h2>
<p>Dans cette exemple c&#8217;est la petite div rouge qui va définir la taille de la plus grosse.</p>
<p><strong>Mais comment on va procéder roul ?</strong></p>
<p>C&#8217;est pas compliqué, quand l&#8217;utilisateur va déplacer la div rouge, au moment de relâcher le bouton de la souris, le javascript va récupérer la position de la souris et va élargir la fenêtre (le div rose) jusqu&#8217;à cette position.</p>
<p>En traduction html ce la va donné :</p>
<pre class="brush: html">
	&lt;div id=&quot;boiteDimToMove&quot; onmouseup=&quot;affiche(this)&quot; onmousedown=&quot;cache(this)&quot;&gt;
		&lt;div id=&quot;boiteDim&quot; onmouseup=&quot;UpdateDiv(event,this)&quot; onmousedown=&quot;cache(this)&quot; &gt;
		&lt;/div&gt;
	&lt;/div&gt;
</pre>
<hr/>
envent : c&#8217;est les évènements utilisateur comme des clics de souris ou des entrées clavier.<br />
Nous, ce qui va nous intéresser, c&#8217;est la position du curseur.</p>
<pre class="brush: javascript">
function UpdateDiv(e,boiteDim){
    var iPosY = e.pageY; // position ordonnée du curseur
    var iPosX = e.pageX;  // position abscisse du curseur
    alert(&#039;iPosY : &#039;+iPosY+&quot;\n&quot;+&#039;iPosX : &#039;+iPosX)
    affiche(boiteDim);
}
</pre>
<p>Voila ce que cela doit afficher :</p>
<p><a href="http://media.waanser.com/2009/03/script-aculo-us.png"><img src="http://media.waanser.com/2009/03/script-aculo-us.png" alt="script-aculo-us" title="script-aculo-us" class="alignnone size-full wp-image-1233" /></a></p>
<p>Le code source est <a href='http://media.waanser.com/2009/03/div2.html'>ici</a></p>
<hr/>
<strong><u>dimessionner notre div</u></strong></p>
<p>Pour modifier la taille de la fenêtre, on va toucher au style. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
pour récupérer le style en javascript il faut utiliser :<br />
<strong>document.getElementById(ID).style</strong></p>
<p>Après pour définir les attributs, il faut tout simplement utiliser le <strong>.</strong><br />
<strong>document.getElementById(&#8216;boite&#8217;).style.width</strong> correspond à la propriété <strong>width </strong>du style du div <em>boite</em></p>
<p>Voila ce que la va donner :</p>
<pre class="brush: javascript">
function UpdateDiv(e,boiteDim){
    var iPosY = e.pageY; // position ordonnée du curseur
    var iPosX = e.pageX;  // position abscisse du curseur
    var oStyleToMove = document.getElementById(boiteDim.id+&#039;ToMove&#039;).style;
    // oStyleToMove le style de la div boiteDimToMove

    oStyleToMove.width = iPosX; // on élargi la div
    oStyleToMove.height = iPosY; // on allonge la div
    cache(boiteDim);
}
</pre>
<p>Le code source est <a href='http://media.waanser.com/2009/03/div3.html'>ici</a></p>
<hr/>
<strong><u>Ça fonctionne seulement si on bouge pas la fenêtre (div rose) !</u></strong></p>
<p>Oui en effet ce script ne prend pas en compte de l&#8217;emplacement de la fenêtre, pour son redimensionnement.<br />
Nous allons corriger cela. Pour connaitre la dimension de la fenêtre nous allons soustraire la position de la fenêtre à celle du curseur. (pas besoin d&#8217;être fort en math ^^)</p>
<p>Pour récupérer la position de la fenêtre nous allons concentrer sur son style (plus précisément à la propriété top et left).<br />
<strong>oStyleToMove.top</strong><br />
<strong>oStyleToMove.left</strong></p>
<p>on va afficher ces variables :</p>
<pre class="brush: javascript">
alert(&#039;Y : &#039;+oStyleToMove.top+&quot;\n X : &quot;+oStyleToMove.left);
</pre>
<div id="attachment_1241" class="wp-caption alignnone" style="width: 336px"><a href="http://media.waanser.com/2009/03/soustr.png"><img src="http://media.waanser.com/2009/03/soustr.png" alt="soustraction" title="soustr" width="326" height="125" class="size-full wp-image-1241" /></a><p class="wp-caption-text">soustraction</p></div>
<hr/>
On voit que le nombre est du type <em>XX</em>px. On ne peut pas faire de calcul avec ce type de chaine.<br />
On va donc supprimer ces px avec l&#8217;aide d&#8217;une expression régulière.</p>
<pre class="brush: javascript">
    // on enlève le px au coordonnée de la fenêtre
    var oExp =new RegExp(&quot;px&quot;, &quot;g&quot;);
    var sTop = oStyleToMove.top.replace(oExp,&#039;&#039;);
    var sLeft = oStyleToMove.left.replace(oExp,&#039;&#039;);
</pre>
<p>On a plus qu&#8217;à faire la soustraction :</p>
<pre class="brush: javascript">
    var iPosY = e.pageY - sTop; // position ordonnée de la fenêtre
    var iPosX = e.pageX - sLeft;  // position abscisse de la fenêtre
</pre>
<p>Le code source :<br />
<a href='http://media.waanser.com/2009/03/div4.html'>c&#8217;est là</a></p>
<hr/>
<p>Et voila, maintenant nos utilisateurs peuvent redimensionner leur fenêtre en quelque clics <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Pour aller plus loin</h2>
<p>Je me suis aperçus que le petit cadre rouge n&#8217;est pas exactement coller en bas à droite.</p>
<p><a href="http://media.waanser.com/2009/03/soustr1.png"><img src="http://media.waanser.com/2009/03/soustr1.png" alt="redimensionnement fenêtre" title="soustr1" class="alignnone size-full wp-image-1246" /></a></p>
<p>Pour réajuster le tir, on va mettre à zero le style left et top (qui est utilisé par script.aculo.us.)</p>
<p>voici la correction :</p>
<pre class="brush: javascript">
 var oStyle = boiteDim.style;
    oStyle.marginLeft=iPosX- boiteDim.offsetHeight;
    oStyle.marginTop=iPosY- boiteDim.offsetWidth;
    oStyle.left=0;
    oStyle.top=0
</pre>
<p>Ce qui va donner au final <a href='http://media.waanser.com/2009/03/div5.html'>ce code</a>.</p>
<hr/>
<h2>Compatibilité avec Internet Explorer</h2>
<p>Internet Explorer nous facile vraiment pas le vie. nous allons voir comment rendre ce script compatible avec<br />
IE.</p>
<p>Pour récupérer la position du curseur cela change :</p>
<pre class="brush: javascript">
var Xposition = (navigator.appName.substring(0,3) == &quot;Net&quot;) ? e.pageX : e.clientX ;
var Yposition = (navigator.appName.substring(0,3) == &quot;Net&quot;) ? e.pageY : e.clientY ;
</pre>
<p>et pour la position de la petite div</p>
<pre class="brush: javascript">
  if (navigator.appName.substring(0,3) == &quot;Net&quot;)
    {
    	oStyle.marginLeft=iPosX - boiteDim.offsetHeight;
    }else
    {
    	oStyle.marginLeft=iPosX;
    }
 </pre>
<p>Voila la version <a href='http://media.waanser.com/2009/03/div6.html'>final</a> compatible Internet Explorer</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/1228-scriptaculous-redimension-fenetre.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ajax en toute simplicité</title>
		<link>http://www.waanser.com/javascript/general-js/970-ajax-en-toute-simplicite.html</link>
		<comments>http://www.waanser.com/javascript/general-js/970-ajax-en-toute-simplicite.html#comments</comments>
		<pubDate>Fri, 27 Feb 2009 17:58:32 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[incontournable]]></category>
		<category><![CDATA[user-friendly]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=970</guid>
		<description><![CDATA[L’Ajax comment cela fonctionne ? Dès qu’un événement JavaScript se produit sur la page (ex : quand on clique sur un bouton), L’ajax va faire appel à un code php. Ce code php va faire un traitement (ex : rechercher une liste de client). Il va renvoyer le résultat au javascript. Et Celui-ci va ensuite [...]]]></description>
			<content:encoded><![CDATA[<h2>L’Ajax comment cela fonctionne ?</h2>
<p>Dès qu’un événement JavaScript se produit sur la page (ex : quand on clique sur un bouton),<br />
L’ajax va faire appel à un code php. Ce code php va faire un traitement (ex : rechercher une liste de client). Il va renvoyer le résultat au javascript. Et Celui-ci va ensuite l’afficher.</p>
<h2>Le jQuery c’est quoi ?</h2>
<p>Le jQuery est un framework Javascript libre qui porte sur l&#8217;interaction entre JavaScript (comprenant l&#8217;AJAX) et HTML, et a pour but de simplifier des commandes communes de Javascript. </p>
<p>En route !</p>
<p>Quoi déjà ? Eh oui, dans cette documentation,  nous allons voir directement l’utilisation de l’Ajax à travers un exemple concret en évitant les explications longues et fastidieuses. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Mise en situation :</h2>
<p>Pour une école nous devons développer une page où l’instituteur pourra afficher les notes de chaque élève pour chaque matière. </p>
<p>Oh lala, ça va nous donner beaucoup de boulot tout ça ! Pas de panique les amis j’ai déjà tout préparé, il suffit juste de télécharger le pack :<a href='http://media.waanser.com/2009/02/ecole71.rar'>ecole</a><br />
Vous le mettez dans votre dossier www.</p>
<p><a href="http://media.waanser.com/2009/02/ajax2.png"><img src="http://media.waanser.com/2009/02/ajax2.png" alt="ajax" title="ajax2" class="alignnone size-full wp-image-980" /></a></p>
<p>Dans un premier temps, il faut créer une base de données <em>ecole</em>. Une fois ceci fait, il suffit de lancer le script ecole.sql dans phpmyadmin. Maintenant, on peut ouvrir notre <a href="http://localhost/ecole/ecole.php">page </a>dans notre navigateur.</p>
<p>Voila notre belle page : </p>
<div id="attachment_983" class="wp-caption alignnone" style="width: 412px"><a href="http://media.waanser.com/2009/02/ajax3.png"><img src="http://media.waanser.com/2009/02/ajax3.png" alt="ajax" title="ajax3" width="402" height="328" class="size-full wp-image-983" /></a><p class="wp-caption-text">ajax</p></div>
<p>L&#8217;utilisation d&#8217;ajax dans cet exemple :</p>
<p>A chaque fois que l&#8217;utilisateur sélectionnera un élève ou une matière, les notes et la moyenne s&#8217;afficheront automatiquement sans rafraîchissement de page.</p>
<p>Dans le code le déclencheur sera donc :</p>
<pre class="brush: html">
&lt;select id =&#039;eleve&#039; onchange=&#039;javascript: chargeNote();&#039;&gt;
</pre>
<p>Et c&#8217;est la fonction <strong>chargeNote</strong> qui va faire appel à php pour afficher les informations.</p>
<h2>Mon premier appel Ajax</h2>
<p>Déjà on va faire appel à notre librairie jQuery.</p>
<pre class="brush: html">
&lt;script src=&quot;http://localhost/ecole/js/jquery-1.3.2.js&quot; type=&quot;text/javascript&quot;  type=&quot;text/javascript&quot;&gt;1&lt;/script
</pre>
<p><u>Astuce :</u></p>
<p>Si vous voulez voir les scripts javascripts chargés sur une page, vous pouvez utiliser le plugin <a href="https://addons.mozilla.org/fr/firefox/addon/2076">JSview </a> sur Firefox. Pour notre page, on voit bien que nos 2 scripts sont chargés.  voila ce que le JSview affiche :<br />
 <div id="attachment_990" class="wp-caption alignnone" style="width: 216px"><a href="http://media.waanser.com/2009/02/jsview.png"><img src="http://media.waanser.com/2009/02/jsview.png" alt="jsview" title="jsview" width="206" height="125" class="size-full wp-image-990" /></a><p class="wp-caption-text">jsview</p></div></p>
<p>Comme notre ajax va faire appel à un code php, nous allons créer cette page php tout de suite.<br />
Pour une meilleur lisibilité nous allons créer un dossier <em>ajax </em>où tous nos codes sources php (appelé par l&#8217;ajax)  seront stockés. Notre premier fichier php qui sera chargé par l&#8217;ajax sera appelé <em>chargeNote.php</em>.</p>
<p>Avant de charger les notes d&#8217;un élève on va juste lui demander d&#8217;afficher un message &laquo;&nbsp;le fichier chargeNote.php est bien appele, l&#8217;ajax fonctionne !&nbsp;&raquo;.</p>
<pre class="brush: php">

echo &quot;le fichier chargeNote.php est bien appele, l&#039;ajax fonctionne !&quot;;
</pre>
<p>Maintenant on va retourner dans fonction javascript chargeNote();</p>
<p>On va utiliser la méthode <strong>jQuery.post</strong> :</p>
<p>Dans le code :</p>
<pre class="brush: jscript">
jQuery.post(&quot;http://localhost/ecole/ajax/chargeNote.php&quot;,
			{},function (sData) {}
	);
</pre>
<p><strong>jQuery.post</strong> a trois paramètres :</p>
<ul>
<li><strong>le premier</strong>  : c&#8217;est l&#8217;adresse du script php qui va être chargée</li>
<li><strong>le deuxième</strong> : c&#8217;est les paramètres qui sont envoyés, attention il faut tout mettre entre accolade{}</li>
<li><strong>le troisième</strong> : c&#8217;est le traitement du retour de la fonction php, pour ceci on fait appel à function (sData) {}(attention le traitement se fera entre accolade{})</li>
</ul>
<p>Ne vous inquiétez pas si vous ne comprenez  pas les détails de ces 3 paramètres, on y reviendra un peu plus tard avec des exemples plus parlant. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Maintenant nous allons voir si notre script fonctionne avec <a href="https://addons.mozilla.org/fr/firefox/addon/1843">firebug</a>, sur note page <a href="http://localhost/ecole/ecole.php">ecole.php</a>. il faut sélectionner un élève ou une matière pour déclencher l&#8217;ajax.</p>
<p>Si tout marche vous devriez voir ça, dans votre console firebug :<br />
<a href="http://media.waanser.com/2009/02/firebug1.png"><img src="http://media.waanser.com/2009/02/firebug1.png" alt="firebug" title="firebug1" class="alignnone size-full wp-image-1002" /></a></p>
<p>Sans plus de détail, on voit que notre message s&#8217;affiche correctement.</p>
<p>Si vous ne vous en sortez vraiment pas voici le <a href='http://media.waanser.com/2009/02/ecole6.rar'>dossier complet</a>.</p>
<h2>Envoyer des paramètres Ajax</h2>
<p>Maintenant que nous avons fait appel à notre premier appel ajax, nous allons voir comment envoyer des paramètres.<br />
En javascript, cela ce passe bien naturellement dans notre fonction <strong>jQuery.post</strong> </p>
<pre class="brush: jscript">
iEleve = document.getElementById(&#039;eleve&#039;).value;
iMatiere = document.getElementById(&#039;matiere&#039;).value;

jQuery.post(&quot;http://localhost/ecole/ajax/chargeNote.php&quot;,
			{iPostEleve : iEleve,iPostMatiere : iMatiere},function (sData) {}
	);
</pre>
<p><strong>iPostEleve  </strong>et <strong>iPostMatiere </strong> sont les noms des variables qui vont être envoyées par l&#8217;ajax. iEleve et iMatiere ce sont les valeurs que l&#8217;on va envoyer( soit les données sélectionnées pas les listes deux listes déroulantes).</p>
<p><strong>Du cotés de chageNote.php comment ça se passe ?</strong></p>
<p>On va récupérer les données comme si on recevait ces données d&#8217;un formulaire, grâce à la variable <strong>$_POST<br />
</strong>.</p>
<p> On va changer le code de notre fichier chargeNote.php : </p>
<pre class="brush: php">
echo &quot;Eleve : &quot;.$_POST[&#039;iPostEleve&#039;];
echo &quot; Matiere : &quot;.$_POST[&#039;iPostMatiere&#039;];
</pre>
<p>Voila ce que cela donne : </p>
<p><a href="http://media.waanser.com/2009/02/ajax4.png"><img src="http://media.waanser.com/2009/02/ajax4.png" alt="ajax" title="ajax4" class="alignnone size-full wp-image-1006" /></a></p>
<p>Maintenant que l&#8217;on sait récupérer <em>l&#8217;id_eleve </em> et <em>l&#8217;id_matiere</em>, ça ne va pas être compliqué pour récupérer la liste de notes. Notre fichier  chargeNote.php va se transformer en :</p>
<pre class="brush: php">

mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;&quot;); // Connexion à MySQL
mysql_select_db(&quot;ecole&quot;); // Selection de la base ecole

$iEleve = $_POST[&#039;iPostEleve&#039;];
$iMatiere = $_POST[&#039;iPostMatiere&#039;];

if ($iEleve &gt; 0 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; $iMatiere &gt; 0)
{
	$oNote = mysql_query(&#039;SELECT note FROM note where id_eleve = &#039;.$iEleve.&#039; and id_matiere = &#039;.$iMatiere); // Requête SQL
	while ($aNote = mysql_fetch_assoc($oNote))
	{
		echo $aNote[&#039;note&#039;].&#039;;&#039;;
	}
}
mysql_close();
</pre>
<p>Ce qui va donner : </p>
<p><a href="http://media.waanser.com/2009/02/ajax5.png"><img src="http://media.waanser.com/2009/02/ajax5.png" alt="ajax" title="ajax5" class="alignnone size-full wp-image-1011" /></a></p>
<p>Vous pouvez télécharger l&#8217;avancement de cet exercice juste<a href='http://media.waanser.com/2009/02/ecole7.rar'> ici </a>.</p>
<h2>Recevoir et traiter les données</h2>
<p>Le travail va se faire autour du script <strong>ecole.js</strong>, et plus précisément dans notre fonction jQuery.post.</p>
<p>Voici ce que l&#8217;on va mettre :</p>
<pre class="brush: jscript">
jQuery.post(&quot;http://localhost/ecole/ajax/chargeNote.php&quot;,
			{iPostEleve : iEleve,iPostMatiere : iMatiere},
			function (sData) {
					var aNotes = sData.split(&quot;;&quot;);
					document.getElementById(&#039;note&#039;).innerHTML=&quot;&quot;;
					for (iNote in aNotes) {
						document.getElementById(&#039;note&#039;).innerHTML = document.getElementById(&#039;note&#039;).innerHTML+&#039; &#039;+aNotes[iNote];
					}

			}
	);
</pre>
<p>C&#8217;est la fonction <strong>function () {}</strong> qui va  récupérer les données et les mettre dans sData.<br />
Une fois ce ceci fait, il nous suffit de transformer le résultat en tableau à l&#8217;aide de la commande sPlit.<br />
il nous reste plus qu&#8217;a afficher les données.</p>
<p>Une petite visualisation :</p>
<p><a href="http://media.waanser.com/2009/02/ajax6.png"><img src="http://media.waanser.com/2009/02/ajax6.png" alt="ajax" title="ajax6" class="alignnone size-full wp-image-1019" /></a></p>
<p>Voila vous savez faire de l&#8217;ajax <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  !</p>
<p>Maintenant vous devriez être capable de faire la moyenne tout seul (surtout que c&#8217;est plus simple). :p</p>
<p>Voici la <a href='http://media.waanser.com/2009/02/ecole8.rar'>correction </a> :</p>
<p>Si vous avez des questions, c&#8217;est juste en dessous <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/970-ajax-en-toute-simplicite.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>script.aculo.us. drag and drop</title>
		<link>http://www.waanser.com/javascript/general-js/542-scriptaculous-drag-and-drop.html</link>
		<comments>http://www.waanser.com/javascript/general-js/542-scriptaculous-drag-and-drop.html#comments</comments>
		<pubDate>Thu, 22 Jan 2009 17:06:21 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[dynamique]]></category>
		<category><![CDATA[user-friendly]]></category>
		<category><![CDATA[WEB 2.0]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=542</guid>
		<description><![CDATA[Le framework script.aculo.us. est très utile pour rendre vos applications user-friendly. Nous allons apprendre à utiliser le drag and drop. Mise en place de script.aculo.us. Voici les étapes nécessaires pour la mise en place du framework script.aculo.us Téléchargement Création de l&#8217;arborescence Téléchargement script.aculo.us Nous allons commencer par télécharger la librairie script.aculo.us sur le site officiel. [...]]]></description>
			<content:encoded><![CDATA[<p>Le framework script.aculo.us. est très utile pour rendre vos applications user-friendly.<br />
Nous allons apprendre à utiliser le drag and drop.<br />
<br/></p>
<h2>Mise en place de script.aculo.us.</h2>
<p>Voici les étapes nécessaires pour la mise en place du framework script.aculo.us</p>
<ol>
<li>Téléchargement</li>
<li>Création de l&#8217;arborescence</li>
</ol>
<h2>Téléchargement script.aculo.us</h2>
<p>Nous allons commencer par télécharger la librairie script.aculo.us sur le <a href="http://script.aculo.us/dist/scriptaculous-js-1.8.2.zip">site officiel</a>.</p>
<div id="attachment_544" class="wp-caption alignnone" style="width: 221px"><img src="http://media.waanser.com/2009/01/script-aculo-us.png" alt="librairie script.aculo.us " title="script-aculo-us" width="211" height="39" class="size-full wp-image-544" /><p class="wp-caption-text">librairie script.aculo.us </p></div>
<h2>Création de l&#8217;arborescence</h2>
<p>Pas de prise de tête, on va faire une arborescence très simple.<br />
On va décompresser la librairie script.aculo.us. et copier les dossier lib et src pour les mettre dans la racine<br />
de notre dossier dragNdrop. Et on va créer notre dossier image, où seront stockées les images à manipuler.</p>
<p><img src="http://media.waanser.com/2009/01/script-aculo-us2.png" alt="arboresence script.aculo.us" title="script-aculo-us2" class="alignnone size-full wp-image-550" /></p>
<p>Comme je suis sympa, je vous ai préparé <a href="http://media.waanser.com/2009/01/dragndrop.rar">l&#8217;arborescence</a>. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Fonctionnement du Drag And Drop</h2>
<p>Le fonctionnement du Drag And Drop se divise en 4 étapes.</p>
<p>La première partie, c&#8217;est de définir nos conteneurs que l&#8217;on va manipuler.<br />
Pour ceci on va utiliser la balise <strong>&lt;div&gt;</strong>.</p>
<p>Après nous allons définir les dimensions de nos conteneurs en utilisant le <strong>css</strong>.</p>
<p>C&#8217;est dans cette 3ème étape que nous allons faire appel à notre framework script.aculo.us. par le biais<br />
de fonctions <strong>javascript</strong>.</p>
<p>Enfin nous feront appel à ces fonctions JS en utilisant <strong>onload</strong>, <strong>onmousedown</strong> et <strong>onmouseup</strong>.</p>
<h2>Création de nos conteneurs</h2>
<p>Nous allons créer notre fichier index.html.</p>
<p>Nous allons créer un premier conteneur que l&#8217;on va appeler <em>plateau</em>.<br />
Dans celui-ci deux autres conteneurs (<em>boite1</em> et <em>boite2</em>) seront créés. </p>
<pre class="brush: html">
&lt;body&gt;
&lt;div id=&quot;plateau&quot;&gt;
	&lt;div id=&quot;boite1&quot;&gt;
		&lt;img id=&quot;image1&quot; src=&quot;./image/1.png&quot; /&gt;
	&lt;/div&gt;
	&lt;div id=&quot;boite2&quot;&gt;
		&lt;img id=&quot;image2&quot; src=&quot;./image/2.png&quot; /&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Le résultat :</p>
<div id="attachment_563" class="wp-caption alignnone" style="width: 144px"><a href="http://media.waanser.com/2009/01/ex0.png"><img src="http://media.waanser.com/2009/01/ex0.png" alt="exemple script.aculo.us." title="ex0" width="134" height="200" class="size-full wp-image-563" /></a><p class="wp-caption-text">exemple script.aculo.us.</p></div>
<h2>Définitions des dimensions de nos boîtes</h2>
<p>Bon beh la, ce n&#8217;est pas compliqué c&#8217;est du css tout basic. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: html">
&lt;head&gt;
&lt;style type=&quot;text/css&quot;&gt;
	#boite1 {
		border: 1px solid #000000;
		width: 116px;
		height: 97px;
		padding: 5px;
		margin-left: 10px;
		margin-bottom: 10px;
		float: left;
	}
	#boite2 {
		border: 1px solid #000000;
		width: 116px;
		height: 97px;
		padding: 5px;
		margin-left: 10px;
		margin-bottom: 10px;
		float: left;
	}
	#plateau {
		width: 1024px;
		height: 500px;
		border: 0px solid #FF0000;
	}
&lt;/style&gt;
&lt;/head&gt;
</pre>
<p>Cela rend déjà mieux <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  :</p>
<div id="attachment_565" class="wp-caption alignnone" style="width: 293px"><a href="http://media.waanser.com/2009/01/ex1.png"><img src="http://media.waanser.com/2009/01/ex1.png" alt="exemple script.aculo.us." title="ex1" width="283" height="118" class="size-full wp-image-565" /></a><p class="wp-caption-text">exemple script.aculo.us.</p></div>
<h2>Les fonctions javascripts</h2>
<p>On va faire appel au framework script.aculo.us.</p>
<pre class="brush: html">
&lt;script src=&quot;./lib/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/effects.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;./src/dragdrop.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>On va créer nos fonctions javascripts.</p>
<p>Cette fonction change le style de la bordure de notre boîte (en pointillé).</p>
<pre class="brush: javascript">
function cache ( id ) {
	id.style.border = &#039;1px dashed #000000&#039;;
}
</pre>
<p>Et celle-ci rend la bordure de la boîte continu.</p>
<pre class="brush: javascript">
function cache ( id ) {
	id.style.border = &#039;1px solid #000000&#039;;
}
</pre>
<p>Et la fonction la plus importante ; celle qui définit les boites à déplacer.</p>
<p><strong>new Draggable</strong> : définit la boite à manipuler.<br />
<strong>Sortable.create</strong> : définit le plateau où les boites pourront se déplacer.</p>
<pre class="brush: javascript">
var drag1;
var drag2;

function init () {
	drag1 = new Draggable(&#039;boite1&#039;, {ghosting: true});
	drag2 = new Draggable(&#039;boite2&#039;, {ghosting: true});
	Sortable.create(&#039;plateau&#039;,{
					tag:&#039;div&#039;,
					overlap:&#039;horizontal&#039;,
					ghosting: true,
					constraint: false
					});
}
</pre>
<h2>Appel de nos fonctions JS</h2>
<p>Pour préparer le plateau il suffit d&#8217;utiliser l&#8217;attribut <strong>onload</strong> qui fera appel à notre fonction <strong>init()</strong>.</p>
<p>Et pour faire l&#8217;effet de transparence, il faut utiliser l&#8217;attribut <strong>onmousedown </strong> et <strong>onmouseup</strong>.</p>
<pre class="brush: html">
&lt;body onload=&quot;init()&quot;&gt;
&lt;div id=&quot;plateau&quot;&gt;
	&lt;div id=&quot;boite1&quot;&gt;
		&lt;img id=&quot;image1&quot;  src=&quot;./image/1.png&quot; onmousedown=&quot;cache(this);&quot; onmouseup=&quot;affiche(this);&quot;/&gt;
	&lt;/div&gt;
	&lt;div id=&quot;boite2&quot;&gt;
		&lt;img id=&quot;image2&quot; src=&quot;./image/2.png&quot; onmousedown=&quot;cache(this);&quot; onmouseup=&quot;affiche (this);&quot;/&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Et voila c&#8217;est fini <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Voila le code source <a href="http://media.waanser.com/2009/01/dragndrop1.rar">complet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/javascript/general-js/542-scriptaculous-drag-and-drop.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

