<?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>JBJ's Blog &#187; Développement</title>
	<atom:link href="http://www.lyxia.org/blog/category/developpement/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lyxia.org/blog</link>
	<description>Lyxia.org</description>
	<lastBuildDate>Sat, 27 Feb 2010 10:24:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>script php de sauvegarde mysql</title>
		<link>http://www.lyxia.org/blog/developpement/script-php-de-sauvegarde-mysql-571</link>
		<comments>http://www.lyxia.org/blog/developpement/script-php-de-sauvegarde-mysql-571#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:49:22 +0000</pubDate>
		<dc:creator>jbl</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=571</guid>
		<description><![CDATA[Cet article fait suite à cet autre article Sauvegarder/Exporter une base de données avec PHP. J'en ai eu besoin ce matin pour faire une sauvegarde d'une base de données mysql d'un site. Seul moyen d'accès que j'avais : l'accès par ftp et le site en safe mode. Pas la peine de préciser que ce script [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article fait suite à cet autre article <a href="http://www.lyxia.org/blog/developpement/php/sauvegarderexporter-une-base-de-donnees-avec-php-44">Sauvegarder/Exporter une base de données avec PHP</a>. J'en ai eu besoin ce matin pour faire une sauvegarde d'une base de données mysql d'un site. Seul moyen d'accès que j'avais : l'accès par ftp et le site en safe mode. Pas la peine de préciser que ce script m'a été bien utile !</p>
<p>J'ai fais quelques modifications dans le script, pour éviter de me heurter au timeout (non modifiable en safe mode) :</p>
<p>- un fichier par table, dans un répertoire accessible en écriture. Dans ce cas précis il s'agit du répertoire temp</p>
<p>- enregistrement immédiat de chaque ligne, qui est compressée à la volée par gz </p>
<p>- procédure de reprise en cas de problème, on relance le script après avoir modifié l'appel, <i>$dump = dump(5);</i> pour sauter les 5 premières tables par exemple.</p>
<p>- le $tables = mysql_list_tables($database, $db); m'ayant parfois causé des soucis, je l'ai remplacé par  $sql = "SHOW TABLES FROM $database";</p>
<pre>function dump($ignore)
{
 $server = '*********';
 $database = '*********';
 $user = '*********';
 $password = '*********';

 //Connexion à la base
 $db = mysql_connect($server, $user, $password) or die(mysql_error());
 mysql_select_db($database, $db) or die(mysql_error());

 //on récupère la liste des tables de la base de données
 //$tables = mysql_list_tables($database, $db) or die(mysql_error());
 $sql = 'SHOW TABLES FROM '.$database;
 $tables = mysql_query($sql) or die(mysql_error());

 // si on ne veut pas récupérer les $ignore premières tables
 for ($i=0; $i<$ignore; $i++) ($donnees = mysql_fetch_array($tables));

 // aller on boucle sur toutes les tables
 while ($donnees = mysql_fetch_array($tables))
 {
  // on récupère le create table (structure de la table)
  $table = $donnees[0];
  $sql = 'SHOW CREATE TABLE '.$table;
  $res = mysql_query($sql) or die(mysql_error().$sql);
  if ($res)
  {
   $backup_file = '../temp/backup_' . $table . '.sql.gz';
   $fp = gzopen($backup_file, 'w');

   $tableau = mysql_fetch_array($res);
   $tableau[1] .= ";\n";
   $insertions = $tableau[1];
   gzwrite($fp, $insertions);

   $req_table = mysql_query('SELECT * FROM '.$table) or die(mysql_error());
   $nbr_champs = mysql_num_fields($req_table);
   while ($ligne = mysql_fetch_array($req_table))
   {
    $insertions = 'INSERT INTO '.$table.' VALUES (';
    for ($i=0; $i<$nbr_champs; $i++)
    {
     $insertions .= '\'' . mysql_real_escape_string($ligne[$i]) . '\', ';
    }
    $insertions = substr($insertions, 0, -2);
    $insertions .= ");\n";
    gzwrite($fp, $insertions);
   }
  } // fin if ($res)
  mysql_free_result($res);
  gzclose($fp);
 }
 return true;
}

//appel de la fonction
$dump = dump(0);
</pre>
<p>Et voilà un script de sauvegarde très rapide. Il suffit d'aller récupérer les fichiers.</p>
<p>Pour ceux qui veulent sauvegarder qu'une seule table dont le nom est connu :</p>
<pre>function dump($table)
{
 $server = '******';
 $database = '******';
 $user = '******';
 $password = '******';
 //Connexion à la base
 $db = mysql_connect($server, $user, $password) or die(mysql_error());
 mysql_select_db($database, $db) or die(mysql_error());

 $sql = 'SHOW CREATE TABLE '.$table;
 $res = mysql_query($sql) or die(mysql_error().$sql);
 if ($res)
 {
   $backup_file = '../temp/backup_' . $table . '.sql.gz';
   $fp = gzopen($backup_file, 'w');

   $tableau = mysql_fetch_array($res);
   $tableau[1] .= ";\n";
   $insertions = $tableau[1];
   gzwrite($fp, $insertions);

   $req_table = mysql_query('SELECT * FROM '.$table) or die(mysql_error());
   $nbr_champs = mysql_num_fields($req_table);
   while ($ligne = mysql_fetch_array($req_table))
   {
    $insertions = 'INSERT INTO '.$table.' VALUES (';
    for ($i=0; $i<$nbr_champs; $i++)
    {
     $insertions .= '\'' . mysql_real_escape_string($ligne[$i]) . '\', ';
    }
    $insertions = substr($insertions, 0, -2);
    $insertions .= ");\n";
    gzwrite($fp, $insertions);
   }
 } // fin if ($res)
 mysql_free_result($res);
 gzclose($fp);
 return true;
}

//appel de la fonction
$dump = dump('nomdelatable');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/script-php-de-sauvegarde-mysql-571/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Monitoring de site avec alerte mail et SMS</title>
		<link>http://www.lyxia.org/blog/developpement/php/monitoring-de-site-avec-alerte-mail-et-sms-456</link>
		<comments>http://www.lyxia.org/blog/developpement/php/monitoring-de-site-avec-alerte-mail-et-sms-456#comments</comments>
		<pubDate>Sun, 31 May 2009 09:48:49 +0000</pubDate>
		<dc:creator>jbl</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=456</guid>
		<description><![CDATA[Dans la série bout de code PHP sympathique, voici un monitoring de site (surveillance) avec alerte mail et SMS.]]></description>
			<content:encoded><![CDATA[<p>En cette période de longs week-end il est toujours intéressant d'être alerté automatiquement en cas de soucis sur son ou ses sites. </p>
<p>Voici un code PHP pour surveiller que son site web répond (monitoring de site).</p>
<p>Il pourra ainsi détecter si le site ne répond pas ou si la page d'accueil contient bien le mot clé indiqué. C'est toujours utile de vérifier le contenu, dans le cas par exemple où on se fait hacker et que le hacker met juste sa signature en page d'accueil, ou plus classique le site web répond mais affiche juste un message d'erreur.</p>
<p>Ce programme de monitoring de site doit être placé sur un autre serveur que le site à surveiller afin justement de ne pas risquer d'être down en même temps. <strong>Un hébergement php gratuit</strong> fera très bien l'affaire.</p>
<p>En cas de problème ce monitoring de site envoie un mail ou une alerte SMS.</p>
<p>On crée une page PHP et on y met son include de connexion à la base de données.</p>
<p>La première chose à écrire est la fonction de monitoring de site (surveillance).</p>
<p>On regarde si le site (host) répond et si on a bien la chaine de caractères désirée (find).<br />
Retourne True si tout est ok, sinon retourne False.</p>
<pre>function check($host, $find) {
 $fp = fsockopen($host, 80, $errno, $errstr, 10);
 if (!$fp) {
  echo "$errstr ($errno)\n";
 } else {
  $header = "GET / HTTP/1.1\r\n";
  $header .= "Host: $host\r\n";
  $header .= "Connection: close\r\n\r\n";
  fputs($fp, $header);
  while (!feof($fp)) {
   $str .= fgets($fp, 1024);
  }
  fclose($fp);
  return (strpos($str, $find) !== false);
 }
}
</pre>
<p>On va maintenant écrire la fonction qui envoie le mail d'alerte et le SMS.<br />
On utilise ici le service d'envoi de sms : smsbox.fr.</p>
<pre>function alert($host) {
 global $ConnString2;
 $conn = mysql_connect($ConnString2['ip'],$ConnString2['uid'],$ConnString2['pwd']) or die('impossible de se connecter');
 mysql_select_db($ConnString2['db'], $conn) or die('erreur bdd'); 

 // on purge la table des vieux enregistrements
 $sql = 'delete from monitoring where date_add(date, interval 12 hour) < NOW()';
 mysql_query($sql) or erreurbdd (mysql_error(),$sql);

 // on historise l'alerte
 $sql = 'insert into monitoring (host, date) values (\''.$host.'\', now())';
 mysql_query($sql) or erreurbdd (mysql_error(),$sql);

 // on compte le nombre d'échecs
 $sql = 'select count(*) as tot from monitoring where host=\''.$host.'\'';
 $rs = mysql_query($sql) or erreurbdd (mysql_error(),$sql);
 $row = mysql_fetch_array($rs);

 // on envoi le sms au deuxième échec
 if ($row['tot'] == 2) {
  mail('monmail@gmail.com', 'Monitoring', $host.' down');
  mail('sms@smsbox.fr', 'login=****&#038;pass=****&#038;dest=**********&#038;mode=Expert&#038;notif=1', $host.' down');
 }
 mysql_close();
}
</pre>
<p>C'est presque terminé il faut juste écrire les appels du monitoring :</p>
<pre>$host = 'www.lyxia.org';
$find = 'Theme par JBJ';
if (!check($host, $find)) alert($host);
</pre>
<p>Et dans la base de données on crée la table monitoring</p>
<pre>CREATE TABLE `monitoring` (
  `host` varchar(25) NOT NULL,
  `date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
</pre>
<p>Voilà on peut partir en week-end rassuré, on sera alerté en cas de soucis, et il suffira d'agir en conséquence : appel à l'hébergeur, reboot du serveur etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/php/monitoring-de-site-avec-alerte-mail-et-sms-456/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Communiquer entre serveurs par requêtes xml</title>
		<link>http://www.lyxia.org/blog/developpement/php/communiquer-entre-serveurs-par-requetes-xml-422</link>
		<comments>http://www.lyxia.org/blog/developpement/php/communiquer-entre-serveurs-par-requetes-xml-422#comments</comments>
		<pubDate>Sat, 28 Mar 2009 11:02:02 +0000</pubDate>
		<dc:creator>jbl</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=422</guid>
		<description><![CDATA[J'ai eu comme problématique de convertir en php une fonctionnalité écrite en asp. Un serveur communique avec un autre par le biais de requêtes xml.]]></description>
			<content:encoded><![CDATA[<p>J'ai eu comme problématique de convertir en php une fonctionnalité écrite en asp. Un serveur communique avec un autre par le biais de requêtes xml.</p>
<p>Le serveur A envoie une requête XML au serveur B. Dans cette requête xml il indique les informations désirées.</p>
<p>Le serveur B lui retourne en xml les informations demandées. Le serveur A avec apache et php doit donc <strong>récupérer et traiter des données xml</strong>. C'est ici que j'interviens.</p>
<p>En ASP on se sert de :</p>
<pre>
// envoyer et récupérer le xml
set objSrvHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
// pour traiter le xml
set objXMLReceive = Server.CreateObject("MSXML2.DOMDocument")
</pre>
<p>En php sans installer rien de plus on a la solution basique du fsockopen</p>
<pre>
$page = '/GetProduct.aspx';
$host = 'www.urldusite.com';
//requête xml afin de demander la catégorie produit 250
$req = '&lt;?xml version="1.0"?>&lt;Request>'.
'&lt;Category>250&lt;/Category>'.
'&lt;/Request>';

$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)\n";
} else {
    $header = "GET $page HTTP/1.1\r\n";
    $header .= "Host: $host\r\n";
    $header .= "Content-Type: text/xml\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n";
    $header .= "Connection: close\r\n\r\n";

    fwrite($fp, $header.$req);
    while (!feof($fp)) {
        $items .= fgets($fp, 1024);
    }
    fclose($fp);
}
// la réponse du serveur est stockée dans $items
</pre>
<p>Avec cette méthode on récupère ce qu'on veut à savoir les données xml mais aussi des choses moins intéressantes qu'on appelle entête. Selon comment on va traiter ces informations il est important d'en tenir compte.</p>
<pre>
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Sat, 28 Mar 2009 10:42:26 GMT
Connection: close
Content-Type: text/xml
Expires: Fri, 27 Mar 2009 10:42:24 GMT
Set-Cookie: ShopperManager%2F=SHOPPERMANAGER%2F=0LX925TK2PT92GW500AL08MS25MSEBE2; expires=Thu, 31-Dec-2009 23:00:00 GMT; path=/
Set-Cookie: ASPSESSIONIDGQQQGRQQ=HIJLBCCAKCINKHKNLBGGNDGL; path=/
Cache-control: no-cache
Transfer-Encoding: chunked

11a6
&lt;?xml version="1.0" encoding="ISO-8859-1"?>&lt;Response>
&lt;Product>&lt;Reference>A55222&lt;/Reference>&lt;Description>En stock&lt;/Description>&lt;/Product>
&lt;Product>&lt;Reference>A65892&lt;/Reference>&lt;Description>En stock&lt;/Description>&lt;/Product>
&lt;/Response>
0
</pre>
<p>SimpleXML n'est pas installé sur le serveur j'ai donc utilisé l'expression rationnelle eregi pour récupérer les informations désirées. L'entête comprise dans la réponse ne me gène donc pas.</p>
<pre>
// on vérifie que la syntaxe xml corresponde à ce qu'on attend
if( !eregi('&lt;Response>(.*)&lt;/Response>', $items) ) {

 die("erreur");

} else {

 // on crée un tableau avec l'ensemble des informations produit
 $items = explode('&lt;Product>', $items);
 $countitems = count($items)-1;

 for( $i = 0; $i < $countitems; $i++ ) {
  // produit par produit on va chercher l'info
  eregi('&lt;Reference>(.*)&lt;/Reference>', $items[$i+1], $name);
  eregi('&lt;Description>(.*)&lt;/Description>', $items[$i+1], $desc);
  echo $name[1].'&lt;br/>'.$desc[1].'&lt;br/>&lt;br/>';
 }

}
</pre>
<p>Pour plus d'informations sur le fsockopen et en particulier <a href="http://us2.php.net/manual/en/function.fsockopen.php#36703" rel="nofollow" target="_blank">cet exemple de code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/php/communiquer-entre-serveurs-par-requetes-xml-422/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>8 &#171;&#160;Accordéons&#160;&#187; JQuery</title>
		<link>http://www.lyxia.org/blog/developpement/javascriptajax/8-accordeons-jquery-397</link>
		<comments>http://www.lyxia.org/blog/developpement/javascriptajax/8-accordeons-jquery-397#comments</comments>
		<pubDate>Sat, 14 Mar 2009 17:07:35 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[Javascript/Ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=397</guid>
		<description><![CDATA[C'est une certitude, les "accordéons" Javascript ont le vent en poupe ces temps ci. Ils sont en effet très utiles et peuvent être utilisés comme menus de navigation, galerie de contenu, et bien d'autres encore.
Je vous propose ici une liste des 8 meilleurs - selon moi - accordéons Javascript à utiliser avec le framework JQuery.
1 [...]]]></description>
			<content:encoded><![CDATA[<p>C'est une certitude, les "accordéons" Javascript ont le vent en poupe ces temps ci. Ils sont en effet très utiles et peuvent être utilisés comme menus de navigation, galerie de contenu, et bien d'autres encore.<br />
Je vous propose ici une liste des 8 meilleurs - selon moi - accordéons Javascript à utiliser avec le framework JQuery.</p>
<h2>1 - L'accordéon Dynamic Drive</h2>
<p><a href="http://www.dynamicdrive.com/dynamicindex17/ddaccordion.htm" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s1.png" alt="JavaScript Accordéon" /></a><br />
Un accordéon aux possibilités de customisation impressionnantes. Absolument parfait dans la sidebar d'un blog, par exemple.<br />
<a href="http://www.dynamicdrive.com/dynamicindex17/ddaccordion.htm" rel="nofollow" target="_blank">Source</a></p>
<h2>2 - Design Reviver Horizontal Accordion</h2>
<p><a href="http://designreviver.com/tutorials/jquery-examples-horizontal-accordion/" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s2.png" alt="jQuery Accordéon" /></a><br />
Un de mes préférés. Lorsque vous passez la souris sur une image, il laisse voir la légende. Particulièrement adapté pour créer des animations "Featured posts" comme on en trouve sur la homepage de ce blog.<br />
<a href="http://designreviver.com/tutorials/jquery-examples-horizontal-accordion/" rel="nofollow" target="_blank">Source</a></p>
<h2>3 - jQuery UI Accordion</h2>
<p><a href="http://jquery.bassistance.de/accordion/demo/" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s3.png" alt="" /></a><br />
Parfait pour créer un menu ou sous menu, même si plutôt limité dans l'ensemble.<br />
<a href="http://jquery.bassistance.de/accordion/demo/" rel="nofollow" target="_blank">Source</a></p>
<h2>4 - Simple jQuery Accordion Menu</h2>
<p><a href="http://www.i-marco.nl/weblog/jquery-accordion-menu-redux/" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s4.png" alt="" /></a><br />
Même genre que celui dont je viens de parler en plus complexe et avec des tas d'options. Il peut notamment être utilisé comme menu, mais pas seulement. Une petite visite sur le site de l'auteur vous donnera un avant gout de ce dont ce petit plugin est capable.<br />
<a href="http://www.i-marco.nl/weblog/jquery-accordion-menu-redux/" rel="nofollow" target="_blank">Source</a></p>
<h2>5 - Accordion menu using jQuery</h2>
<p><a href="http://roshanbh.com.np/2008/06/accordion-menu-using-jquery.html" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s5.png" alt="" /></a><br />
Un autre accordéon dédié à la création d'un menu de navigation. Extrêmement simple, il se révèle particulièrement adapté au débutant. A noter, il est très simple de définir l'ouverture du menu soit au clic, soit au rollover.<br />
<a href="http://roshanbh.com.np/2008/06/accordion-menu-using-jquery.html" rel="nofollow" target="_blank">Source</a></p>
<h2>6 - Xbox 360-like horizontal jQuery accordion</h2>
<p><a href="http://www.portalzine.de/index?/Horizontal_Accordion--print" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s6.png" alt="" /></a><br />
Comme son nom l'indique, ce plugin est une réplique d'un slideshow que l'on retrouve sur la console x-box. Si vous cherchez à créer une galerie "featured" d'articles sur votre blog, il est une excellente alternative au "Smoothgallery" que l'on voit un peu partout.<br />
<a href="http://www.portalzine.de/index?/Horizontal_Accordion--print" rel="nofollow" target="_blank">Source</a></p>
<h2>7 - Simple horizontal jQuery accordion</h2>
<p><a href="http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s7.png" alt="" /></a><br />
Un accordéon horizontal simplissime mais extrêmement personnalisable. Bien qu'il soit assez moche par défaut, vous pouvez lui donnez un look d'enfer grâce aux CSS.<br />
<a href="http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html" rel="nofollow" target="_blank">Source</a></p>
<h2>8 - HoverAccordion jQuery Plugin</h2>
<p><a href="http://berndmatzner.de/jquery/hoveraccordion/" rel="nofollow" target="_blank"><img src="/blog/wp-content/uploads/2009/03/s8.png" alt="" /></a><br />
Vous aimez le site d'Apple? Si oui, alors vous aimerez à coup sur cet accordéon qui imite plutôt bien celui qu'on trouve sur le site du constructeur Américain.<br />
<a href="http://berndmatzner.de/jquery/hoveraccordion/" rel="nofollow" target="_blank">Source</a></p>
<p>Et voilà pour aujourd'hui. Des idées pour rallonger cette liste ?</p>
<style type="text/css">
h2 { padding-bottom:10px; }
</style>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/javascriptajax/8-accordeons-jquery-397/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vérifier les données d&#8217;un formulaire avec AJAX</title>
		<link>http://www.lyxia.org/blog/developpement/javascriptajax/verifier-les-donnees-dun-formulaire-avec-ajax-342</link>
		<comments>http://www.lyxia.org/blog/developpement/javascriptajax/verifier-les-donnees-dun-formulaire-avec-ajax-342#comments</comments>
		<pubDate>Sat, 28 Feb 2009 12:56:04 +0000</pubDate>
		<dc:creator>jbl</dc:creator>
				<category><![CDATA[Javascript/Ajax]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=342</guid>
		<description><![CDATA[Dernièrement je suis encore tombé sur l'un de ces longs formulaires où l'on doit indiquer plein d'informations, se choisir un pseudo et lorsqu'on le valide, les informations sont envoyées vers le serveur, qui les contrôle, et si on a commis une erreur, on se retrouve sur le même formulaire avec le message d'erreur "Pseudo déjà [...]]]></description>
			<content:encoded><![CDATA[<p>Dernièrement je suis encore tombé sur l'un de ces longs formulaires où l'on doit indiquer plein d'informations, se choisir un pseudo et lorsqu'on le valide, les informations sont envoyées vers le serveur, qui les contrôle, et si on a commis une erreur, on se retrouve sur le même formulaire avec le message d'erreur "Pseudo déjà utilisé merci d'en choisir un autre".</p>
<p>C'est un peu pénible surtout qu'il faut alors ressaisir les mots de passe qui se sont effacés, et le code de vérification anti-robot.</p>
<p>Il y a pourtant une technique simple, qui existe depuis longtemps et qui fonctionne à merveille : L'AJAX et son XMLHttpRequest.</p>
<p>AJAX : Asynchronous JavaScript and XML, c'est un nom qui a été donné à un ensemble de techniques qui permettent de modifier les informations d'une page web sans avoir à la recharger. Le "client" est donc sollicité un peu plus et le "serveur" un peu moins.</p>
<p>Concrètement, dès qu'une personne a saisi le pseudo désiré, une requête va être automatiquement envoyée au serveur afin de vérifier que ce pseudo n'est pas déjà utilisé.<br />
En retour on affichera un flag vert à côté du champ pseudo s'il est libre et une croix rouge s'il existe déjà. Dans ce cas on verrouillera la possibilité de valider le formulaire en affichant une alerte javascript.</p>
<p>La classe XMLHttpRequest </p>
<p>Attributs</p>
<pre>
<b>readyState</b>
code d'état qui passe successivement de 0 à 4 indiquant qu'il est "prêt"
<b>status</b>
200 si tout est ok et 404 si page non trouvée
<b>responseText</b>
la réponse sous forme d'une chaîne de caractères
<b>responseXml</b>
la réponse sous forme xml on utilisera  les méthodes de DOM pour les extraire
<b>onreadystatechange</b>
on lui assigne une fonction qui sera appelée lors d'un changement d'état
</pre>
<p>Méthodes</p>
<pre>
<b>open</b> (mode, url, boolean)
- mode : 2 valeurs possibles qui sont GET ou POST
- url : la page à appeler
- boolean : true pour asynchrone et false pour synchrone
<b>send</b>("arg")
- des parametres, en général les données à analyser
</pre>
<p>La création de cet objet est différente selon le navigateur :</p>
<pre>
if(document.all) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); //IE
else var XhrObj = new XMLHttpRequest(); //Mozilla
</pre>
<p>On indique l'endroit d'affichage de la réponse : </p>
<pre>
content = document.getElementById("pseudo_check"); 	//zone d'affichage
</pre>
<p>On aura donc dans le code html de notre page, à droite du champ à vérifier </p>
<pre>
&lt;span id="pseudo_check">&lt;/span>
</pre>
<p>Ce qui concrètement ressemblera à ça, notre champ de saisie, l'appel par un <i>onblur</i> à notre fonction javascript de contrôle dès que la personne quitte le champ, et la zone de la réponse du contrôle :</p>
<pre>
&lt;input type="text" name="pseudo" value="" onblur="req_pseudo(this.value);"> &lt;span id="pseudo_check">&lt;/span>
</pre>
<p>Voyons comment va se faire la requête vers le serveur,<br />
on indique le nom de la page php qui fait le contrôle d'existence et la méthode (POST ou GET) :</p>
<pre>
  XhrObj.open("POST", "verification_pseudo.php");
</pre>
<p>L'envoi de la requête vers le serveur en passant le pseudo à contrôler :</p>
<pre>
  XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  XhrObj.send('p='+pseudo);
</pre>
<p>La page php qui aura à charge de faire une requête dans la base de données afin de vérifier l'existence ou non du pseudo.<br />
Si le pseudo est absent, elle retournera 'OK' sinon elle retournera 'FAIL'. On va tester ces réponses dans notre javascript </p>
<pre>
XhrObj.onreadystatechange = function()
{
  if (XhrObj.readyState == 4 &#038;& XhrObj.status == 200) {
    if (XhrObj.responseText == 'OK') {
      // ok nouveau pseudo
      content.innerHTML='&lt;img src="images/accepter.png" alt=""/> Ok';
    } else {
      // erreur pseudo déjà existant
      content.innerHTML='&lt;img src="images/refuser.png" alt=""/> Déjà pris';
    }
  }
}
</pre>
<p>La fonction au complet :</p>
<pre>
var bPseudo = false; // servira pour empêcher de poster le formulaire si vérification pseudo non ok
function req_pseudo(pseudo) {

  //XMLHttpRequest est supporté par Internet Explorer 5.0+, Safari 1.2, Mozilla 1.0 / Firefox, Netscape 7
  if(document.all) var XhrObj = new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
  else var XhrObj = new XMLHttpRequest(); //Mozilla

  content = document.getElementById("pseudo_check"); 	//zone d'affichage

  XhrObj.open("POST", "verif_pseudo.php");

  //Ok pour la page cible
  XhrObj.onreadystatechange = function()
  {
    if (XhrObj.readyState == 4 &#038;& XhrObj.status == 200) {
      if (XhrObj.responseText == 'OK') {
        // ok nouveau pseudo
        content.innerHTML='&lt;img src="images/accepter.png" alt=""/> Ok';
      } else {
        // erreur pseudo déjà existant
        content.innerHTML='&lt;img src="images/refuser.png" alt=""/> Déjà pris';
      }
    }
  }

  XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  XhrObj.send('p='+pseudo);

}
</pre>
<p>La page verification_pseudo.php</p>
<pre>
&lt;?php
$pseudo = htmlentities(addslashes($_POST['p']));
if (!empty($pseudo)) {
  $res = mysql_query("select * from users where pseudo='".$pseudo."'");
  echo (($row = mysql_fetch_array($res)) ? 'FAIL' : 'OK');
}
?>
</pre>
<p>Pour verrouiller l'envoi du formulaire tant que le pseudo n'est pas unique, il suffira de tester une variable bPseudo mise à jour lors du contrôle ajax.</p>
<pre>
function testChamps(f) {
  if (!bPseudo) return false;
  return true;
}
</pre>
<p>Pour les plus exigeants afin d'éviter qu'une personne ayant modifié son pseudo juste avant d'appuyer sur Valider passe au travers des contrôles :</p>
<pre>
function testChamps(f) {
  bPseudo = false; // on va revalider le champ
  req_pseudo(f.pseudo.value);
  if (!bPseudo) {
    alert('Erreur pseudo');
    return false;
  }
}
</pre>
<p>Cette fonction est bien entendu appelée lors de la demande soumission du formulaire.</p>
<pre>
&lt;form method="post" onSubmit="return testChamps(this);">
</pre>
<p>Vous pouvez tester ce code sur cette page <a href="/exemple/ajax_test.php" target="_blank">Test AJAX</a>.</p>
<p>Vous savez maintenant comment <strong>vérifier les données d'un formulaire avec AJAX</strong>.</p>
<p><br/><br/><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/javascriptajax/verifier-les-donnees-dun-formulaire-avec-ajax-342/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial Noobslide avancé: Galerie avec images cliquables</title>
		<link>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-noobslide-avance-galerie-avec-images-cliquables-313</link>
		<comments>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-noobslide-avance-galerie-avec-images-cliquables-313#comments</comments>
		<pubDate>Tue, 15 Jul 2008 21:26:09 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[Javascript/Ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[noobslide]]></category>
		<category><![CDATA[slideshow]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=313</guid>
		<description><![CDATA[Il y a quelques temps, j'avais posté sur ce blog un tutorial parlant de Noobslide, script Javascript basé sur Mootools et permettant de mettre en place de magnifiques galeries et slideshows. Je vous propose aujourd'hui un nouveau tuto expliquant la mise en place d'une galerie d'images animée.]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques temps, j'avais posté sur ce blog un tutorial parlant de Noobslide, script Javascript basé sur Mootools et permettant de mettre en place de magnifiques galeries et slideshows. Je vous propose aujourd'hui un nouveau tuto expliquant la mise en place d'une galerie d'images animée.</p>
<p><img src="http://www.catswhocode.com/blog/wp-content/uploads/2008/07/nooblide-advanced-tutorial.png" alt="Noobslide tutorial: advanced slideshow" /></p>
<h2>Première partie: Création du document HTML</h2>
<p>Une fois que vous avez téléchargé l'archive de Noobslide, créez un document html que vous nommerez <em>sample7.html</em>, dans le répertoire <em>class.noobSlide.js</em>.<br />
Nous devons inclure les feuilles de style, ainsi que les classes Mootools nécessaires au fonctionnement de Noobslide:</p>
<pre>
&lt;link rel="stylesheet" href="_web.css" type="text/css" media="screen" />
&lt;link rel="stylesheet" href="style.css" type="text/css" media="screen" />
&lt;script type="text/javascript" src="_mootools.js">&lt;/script>
&lt;script type="text/javascript" src="_class.noobSlide.js">&lt;/script>
</pre>
<p>Nous pouvons maintenant créer le html pour notre galerie. Collez le code ci-dessous dans la partie body de votre document html.</p>
<pre>
&lt;h2&gt;Sample 7&lt;/h2&gt;
&lt;div class=&quot;sample&quot;&gt;
	&lt;div class=&quot;mask6&quot;&gt;
		&lt;div id=&quot;box7&quot;&gt;
			&lt;span&gt;&lt;img src=&quot;img1.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img2.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img3.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img4.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img5.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img6.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img7.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
			&lt;span&gt;&lt;img src=&quot;img8.jpg&quot; alt=&quot;Photo&quot; /&gt;&lt;/span&gt;
		&lt;/div&gt;
	&lt;/div&gt;

	&lt;div id=&quot;thumbs7&quot;&gt;
		&lt;div class=&quot;thumbs&quot;&gt;
			&lt;div&gt;&lt;img src=&quot;img1.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img2.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img3.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img4.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img5.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img6.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img7.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
			&lt;div&gt;&lt;img src=&quot;img8.jpg&quot; alt=&quot;Photo Thumb&quot; /&gt;&lt;/div&gt;
		&lt;/div&gt;

		&lt;div id=&quot;thumbs_mask7&quot;&gt;&lt;/div&gt;

		&lt;p id=&quot;thumbs_handles7&quot;&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
			&lt;span&gt;&lt;/span&gt;
		&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;</pre>
<p>Ce bout de html est loin d'être parfait en terme de sémantique, même si ça ira parfaitement pour cet exemple. D'ailleurs, pourquoi ne pas réécrire ce code avec une meilleure structure en guise d'exercise?</p>
<h2>Deuxième partie: Javascript</h2>
<p>On va pouvoir s'amuser <img src='http://www.lyxia.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Voici donc le fameux code qui animera notre contenu.<br />
Vous n'avez qu'à le coller dans la partie head de votre document html, ou mieux, le placer dans un fichier <em>.js</em> séparé.</p>
<pre>
&lt;script type="text/javascript">
	window.addEvent('domready',function(){
		var startItem = 3; // First item to be displayed
		var thumbs_mask7 = $('thumbs_mask7').setStyle('left',(startItem*60-568)+'px').setOpacity(0.8);
		var fxOptions7 = {duration:1000, transition:Fx.Transitions.Back.easeOut, wait:false}
		var thumbsFx = new Fx.Style(thumbs_mask7,'left',fxOptions7);
		var hs7 = new noobSlide({
			box: $('box7'),
			items: [0,1,2,3,4,5,6,7],
			handles: $ES('span','thumbs_handles7'),
			fxOptions: fxOptions7,
			onWalk: function(currentItem){
				thumbsFx.start(currentItem*60-568);
			},
			startItem: startItem
		});
		hs7.walk(0);
	});
&lt;/script>
</pre>
<p>Et voilà! Vous diposez désormais d'un magnifique slideshow. Si vous avez des commentaires, des questions ou des idées d'amélioration, n'hésitez pas à m'en faire part <img src='http://www.lyxia.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-noobslide-avance-galerie-avec-images-cliquables-313/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Tutorial: Créer un slideshow avec Mootools et NoobSlide</title>
		<link>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-creer-un-slideshow-avec-mootools-et-noobslide-303</link>
		<comments>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-creer-un-slideshow-avec-mootools-et-noobslide-303#comments</comments>
		<pubDate>Mon, 16 Jun 2008 06:50:41 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[Javascript/Ajax]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[noobslide]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[slideshow]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=303</guid>
		<description><![CDATA[Cela fait plusieurs jours que j'entends parler de Noobslide. Il s'agit d'un slideshow qui vous permettra de faire défiler textes et images dans un espace restreint, le tout agrémenté de transitions du meilleur effet. Seul bémol: Noobslide n'est pas particulièrement bien documenté, ce qui le rend difficilement accessible aux débutants. Voici un tuto pour débuter avec Noobslide et créer votre premier slideshow.]]></description>
			<content:encoded><![CDATA[<p>Cela fait plusieurs jours que j'entends parler de Noobslide. Il s'agit d'un slideshow qui vous permettra de faire défiler textes et images dans un espace restreint, le tout agrémenté de transitions du meilleur effet. Seul bémol: Noobslide n'est pas particulièrement bien documenté, ce qui le rend difficilement accessible aux débutants. Voici un tuto pour débuter avec Noobslide et créer votre premier slideshow.</p>
<h2>C'est parti!</h2>
<p>Commençons d'emblée par une petite capture d'écran histoire de vous montrer ce que vous pourrez faire de beau avec Noobslide:<br />
<img src="http://www.lyxia.org/blog/wp-content/uploads/2008/06/tutorial-noobslide.png" alt="Tutorial Noobslide"/></p>
<p>Si vous n'êtes toujours pas convaincus, ou que vous voulez voir le script en action (pour un slideshow c'est quand même mieux <img src='http://www.lyxia.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) c'est <a href="http://efectorelativo.net/laboratory/noobSlide/sample.html">ici</a> que ça se passe.<br />
Comme on peut le voir sur la démo, Noobslide propose pas moins de 8 slides différents. Il est bien entendu possible de les customiser à votre guise.</p>
<h2>Mise en place</h2>
<p>Pour ce tuto, j'ai choisi le premier exemple de la série. C'est à la fois le plus simple à mettre en place et le plus courant. </p>
<p>Nous allons bien entendu commencer par <a href="http://efectorelativo.net/laboratory/noobSlide/class.noobSlide.js.zip">récupérer l'archive de Noobslide</a>.<br />
Une fois dézippée, l'archive contient quelques images (très jolies, d'ailleurs) d'exemple, les scripts js, les css et le framework Mootools.</p>
<p>Nous allons donc inclure tout ce beau monde dans la partie <em>head</em> de notre document html:</p>
<pre>
&lt;link rel="stylesheet" href="_web.css" type="text/css" media="screen" />
&lt;link rel="stylesheet" href="style.css" type="text/css" media="screen" />
&lt;script type="text/javascript" src="_mootools.js">&lt;/script>
&lt;script type="text/javascript" src="_class.noobSlide.js">&lt;/script>
</pre>
<p>Dans la partie <em>body</em> de notre document html, nous allons créer notre contenu:</p>
<pre>
&lt;h2>Slideshow&lt;/h2>
&lt;div class="sample">
	&lt;div class="mask1">
		&lt;div id="box1">
			&lt;span>&lt;img src="img1.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img2.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img3.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img4.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img5.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img6.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img7.jpg" alt="Photo" />&lt;/span>
			&lt;span>&lt;img src="img8.jpg" alt="Photo" />&lt;/span>
		&lt;/div>
	&lt;/div>
&lt;/div>
</pre>
<p>Voilà pour le contenu. Nous avons créé trois conteneurs: <em>sample</em>, <em>box1</em> et <em>mask1</em>, le dernier faisant comme son nom l'indique office de masque.<br />
Sémantiquement parlant, j'aurais préféré utiliser une liste non-ordonnée (<em>&lt;li></em>), plutôt que cette longue suite de <em>&lt;span></em> sans fin, mais pour être honnête je m'en suis à l'heure actuelle tenu à décortiquer les exemples fournis par l'auteur.</p>
<p>Dernière étape: le javascript. Il est temps de donner vie à notre slideshow. Ajoutez le code qui suit dans la partie <em>head</em> de votre document html, ou mieux dans un fichier <em>.js</em> séparé:</p>
<pre>
&lt;script type="text/javascript">
	window.addEvent('domready',function(){
		var hs1 = new noobSlide({
			box: $('box1'),
			items: [1,2,3,4],
			size: 480,
			autoPlay: true
		});
	});
&lt;/script>
</pre>
<p>Observons ce bout de code de plus près:<br />
La méthode <em>window.addEvent()</em> permet de charger ce code dès que le navigateur à fini de charger l'arbre dom. On gagne donc on performance étant donné que nous n'avons pas besoin d'attendre le chargement complet de la page (et de toute les images!) pour charger ce script. J'avais déja parlé de cette méthode fort utile dans <a href="http://www.lyxia.org/blog/developpement/javascriptajax/bonnes-pratiques-javascript-le-code-non-intrusif-139">cet article</a>.</p>
<p>Ensuite, nous allons créer une instance de la classe noobSlide. Voyons ce que ça donne au niveau des paramètres:</p>
<ul>
<li><strong>box</strong>: l'id de l'élément contenant nos images. Dans notre exemple, il s'agit donc de box1. Notez que le sign $ n'est autre qu'un raccourci Mootools de la fonction <em>document.getElementById()</em>.</li>
<li><strong>items</strong>: Le nombre de pas du début à la fin du slideshow.</li>
<li><strong>size</strong>: la longueur du slideshow, en pixels.</li>
<li><strong>autoPlay</strong>: Réglé à <em>true</em>, ce paramètre permet, comme son nom l'indique, le défilement automatique.</li>
</ul>
<p>Pour ce qui est du styling css, étant donné que cet exemple utilise les ids et classes définies par défaut dans la feuille de style fournie, le rendu visuel sera identique à celui des exemples en ligne. Pour ce qui est de la personnalisation, c'est à vous de jouer <img src='http://www.lyxia.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Conclusion</h2>
<p>Autant être clair, je suis sous le charme de ce script. D'ailleurs, <strong>je pense faire d'autres tutos dans la veine de celui-ci</strong>, comme par exemple l'étude des exemples <a href="http://efectorelativo.net/laboratory/noobSlide/sample.html">du site</a> ou encore l'intégration de noobslide dans Wordpress.<br />
<strong>N'hésitez pas à me dire ce qui vous intéresserais!</strong> <img src='http://www.lyxia.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/javascriptajax/tutorial-creer-un-slideshow-avec-mootools-et-noobslide-303/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>CSS: 5 possibilités haut de gamme</title>
		<link>http://www.lyxia.org/blog/developpement/xhtmlcss/css-5-possibilites-haut-de-gamme-293</link>
		<comments>http://www.lyxia.org/blog/developpement/xhtmlcss/css-5-possibilites-haut-de-gamme-293#comments</comments>
		<pubDate>Mon, 26 May 2008 07:37:14 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[(x)HTML/CSS]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[galerie]]></category>
		<category><![CDATA[graphiques]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=293</guid>
		<description><![CDATA[Les css – feuilles de style en cascade – proposent de très nombreuses possibilités pour le rendu visuel de votre site web. Après mes listes sur les meilleurs scripts Javascript pour sublimer votre site, je vous propose les meilleurs codes css trouvés sur le web. Au menu: Graphiques, coins arrondis, galeries photos...]]></description>
			<content:encoded><![CDATA[<p>Les css – feuilles de style en cascade – proposent de très nombreuses possibilités pour le rendu visuel de votre site web. Après mes listes sur les meilleurs scripts Javascript pour sublimer votre site, je vous propose les meilleurs codes css trouvés sur le web. Au menu: Graphiques, coins arrondis, galeries photos...</p>
<h2>Graphiques</h2>
<p><img style="float:right;margin-left:10px;" src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/graph-css.gif" alt="Graphiques en CSS" /><br />
Bien qu'il soit tout à fait possible de générer des graphiques coté serveur, notamment grâce à la lib GD, ce code vous permettra de faire des économies d'images qui prennent de la place sur le serveur et bouffent de la bande passante.</p>
<p>Voici un <a href="http://applestooranges.com/blog/post/css-for-bar-graphs/?id=55">tutorial complet</a> sur la création de graphiques au visuel saisissant, le tout en 100% pur css à partir d'une simple liste html.</p>
<h2>Coins arrondis</h2>
<p><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/spiffy.jpg" alt="Spiffy Corners" /><br />
Ce n'est pas un scoop: Dans l'univers du web 2.0, les coins arrondis ont plus que jamais la cote. Si visuellement ils sont saisissants, ils ont l'inconvénient d'être parfois assez lourds à mettre en place. Heureusement, le site <a href="http://www.spiffycorners.com/">Spiffy Corners</a> à tout prévu et vous propose un générateur de coins arrondis. Si le rendu visuel est excellent, je ne peut par contre pas en dire autant du code généré: Balises <em>&lt;b&gt;</em> dépréciées, code non sémantique... A vous de choisir entre rendu visuel et respect des standards.</p>
<h2>Galerie photo avec effet au survol</h2>
<p><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/galerie.jpg" alt="Galerie photo en css" /><br />
Niveau scripts pour galeries photos, il y a de quoi faire, surtout via des librairies javascript "Nouvelle génération" du style Mootools ou JQuery. Mais si vous ne souhaitez pas implémenter de solution javascript pour l'affichage de vos images, voici un code CSS qui devrait vous satisfaire: <a href="http://sonspring.com/journal/hoverbox-image-gallery">Hoverbox</a>, Une galerie photo simple, sobre, avec un agrandissement automatique des images survolées, le tout en 100% css.</p>
<h2>Mettre une photo en valeur avec une bordure, ou même une ombre</h2>
<p><img style="float:left;margin-right:5px;" src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/catFace.jpg" alt="Ombre portée en CSS" /><br />
Dans le cadre d'un site dynamique, si vous souhaitez décorer vos photos à l'aide d'un cadre, vous n'avez pas des milliers de possibilités: Passer par Php et GD pour générer de nouvelles images au termes de codages parfois fastidieux. Ou alors, utiliser css et ses possibilités souvent sous estimées.<br />
Dans ce second cas, le célèbrissime site <a href="http://www.alistapart.com/articles/cssdropshadows/">A List Apart</a> propose un tutorial précis sur l'ajout d'une ombre de bordure à vos images, en pur css, bien sûr.</p>
<h2>Et pour finir sur une note amusante...</h2>
<p>...mais pas pour autant exempte de technique: Il s'agit d'Homer Simpson, totalement réalisé en CSS par Román Cortés. ça vaut le détour, et ça se passe <a href="http://www.romancortes.com/blog/homer-css/">ici</a>.</p>
<p>Source: <a href="http://www.cameronolthuis.com/2006/04/top-10-css-tutorials">Cameron Olthuis</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/xhtmlcss/css-5-possibilites-haut-de-gamme-293/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CushyCMS, ou comment rendre éditable n&#8217;importe quel site web</title>
		<link>http://www.lyxia.org/blog/developpement/cushycms-ou-comment-rendre-editable-nimporte-quel-site-web-291</link>
		<comments>http://www.lyxia.org/blog/developpement/cushycms-ou-comment-rendre-editable-nimporte-quel-site-web-291#comments</comments>
		<pubDate>Fri, 23 May 2008 05:13:29 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[cushycms]]></category>
		<category><![CDATA[ftp]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=291</guid>
		<description><![CDATA[CushyCMS, comme son nom ne l'indique pas, n'est pas vraiment un CMS : il s'agit d'une interface qui permet d'éditer son site internet à partir de n'importe quel ordinateur connecté au web, le tout  sans devoir transférer un seul fichier par ftp.]]></description>
			<content:encoded><![CDATA[<p>CushyCMS, comme son nom ne l'indique pas, n'est pas vraiment un CMS : il s'agit d'une interface qui permet d'éditer son site internet à partir de n'importe quel ordinateur connecté au web, le tout  sans devoir transférer un seul fichier par ftp.</p>
<h2>Principe et découverte</h2>
<p>S'il y a vraiment une fonction que j'adore avec Wordpress, c'est l'éditeur de thèmes: Quel bonheur de pouvoir éditer ses fichiers directement dans l'interface d'administration, sans upload FTP... Seulement, je suis actuellement en train de créer un site qui n'est pas basé sur Wordpress et après 3 jours de développement je commençais à en avoir ras le bol de devoir me connecter sans cesse au FTP du site et envoyer les fichiers, tout ça pour une modification minime.</p>
<p>Je suis alors tombé sur CushyCMS: Comme je le disais dans le chapeau de l'article, il ne s'agit absolument pas d'un CMS au sens <em>Système de gestion de contenu</em>: Rien à voir avec Drupal, Joomla! et consorts.</p>
<h2>Mise en place</h2>
<p>La première chose à faire est de s'inscrire au service. Bonne nouvelle, on vous demande votre nom/pseudo, votre adresse mail et un mot de passe. Le site ne vous envoie pas de mail de vérification et une fois le formulaire validé, vous serez automatiquement connecté à votre interface d'administration.</p>
<p>Dès lors que vous disposez d'un compte, vous pouvez ajouter un site: Là aussi on vous demande uniquement le minimum vital: l'url du site et les détails de connexion ftp comme le serveur, le nom d'utilisateur et le login. Le chemin, lui, est optionnel.</p>
<p><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/crushycms.jpg" alt="CushyCMS" /></p>
<p>Une fois validé, le site est ajouté à votre interface d'administration. Vous pouvez maintenant définir les pages que vous souhaitez rendre éditable. Comme précédemment, vous n'aurez qu'un petit formulaire, comprenant le nom de la page et son chemin sur le serveur, à remplir.</p>
<h2>Ajout de la classe cushycms sur les fichiers à rendre éditables</h2>
<p>La dernière chose à faire avant de pouvoir éditer nos fichier dans CushyCMS, est d'ajouter la classe <em>cushycms</em> au éléments à rendre éditables.</p>
<p>Prenons par exemple, un bloc de contenu:</p>
<pre>&lt;div id="presentation"&gt;
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut ligula leo, pulvinar et, pharetra ac, auctor quis, nisi.
&lt;/div&gt;
</pre>
<p>En lui ajoutant la classe <em>cushycms</em> à notre fichier source, nous allons définir une zone éditable dans <em>CushyCMS</em>:</p>
<pre>&lt;div id="presentation" class="cushycms"&gt;
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut ligula leo, pulvinar et, pharetra ac, auctor quis, nisi.
&lt;/div&gt;
</pre>
<p>Il ne vous reste plus qu'à envoyer les fichiers modifiés sur le serveur. C'est la dernière fois que vous aurez à passer par FTP, car désormais CushyCMS se charge de vous permettre l'édition de vos fichiers.</p>
<p><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/crushy.jpg" alt="CrushyCMS" /></p>
<p>Comme le montre la capture ci-dessus, (<em>réalisée par Nettuts</em>) les zones éditables que nous avons définies sont clairement identifiées et l'édition se fait zone par zone.<br />
CushyCMS mets à votre disposition un éditeur somme toute assez basique comprenant des boutons pour mettre en gras, italique, couleur, faire un lien, insérer une image...<br />
Notons la présence de deux modes d'édition: <em>Source</em>, qui conviendra parfaitement aux développeurs, et <em>Wysiwyg</em>, qui lui sera plus adapté aux novices n'ayant pas ou peu de connaissances en html.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/cushycms-ou-comment-rendre-editable-nimporte-quel-site-web-291/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>10 scripts Mootools pour l&#8217;interface utilisateur</title>
		<link>http://www.lyxia.org/blog/developpement/javascriptajax/10-scripts-mootools-pour-linterface-utilisateur-275</link>
		<comments>http://www.lyxia.org/blog/developpement/javascriptajax/10-scripts-mootools-pour-linterface-utilisateur-275#comments</comments>
		<pubDate>Tue, 06 May 2008 22:18:49 +0000</pubDate>
		<dc:creator>jbj</dc:creator>
				<category><![CDATA[Javascript/Ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://www.lyxia.org/blog/?p=275</guid>
		<description><![CDATA[Vous connaissez certainement déja Mootools, cette librairie Javascript très légère et permettant de se simplifier le développement tout en codant d'une manière très propre. Je vous propose ici de découvrir 10 scripts basés sur Mootools dans le but de mettre en place l'ergonomie et l'esthétisme que l'on est en droit d'attendre d'une appli web d'aujourd'hui.]]></description>
			<content:encoded><![CDATA[<p>Vous connaissez certainement déja Mootools, cette librairie Javascript très légère et permettant de se simplifier le développement tout en codant d'une manière très propre. Je vous propose ici de découvrir 10 scripts basés sur Mootools dans le but de mettre en place l'ergonomie et l'esthétisme que l'on est en droit d'attendre d'une appli web d'aujourd'hui.</p>
<h2>Mocha UI</h2>
<p><a href="http://greghoustondesign.com/demos/mocha/"><br />
<img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/mochaui.jpg" alt="Mocha UI" /></a><br />
Si vous aimez les fenêtres, vous aimerez Mocha UI: En effet, qu'elles soient modales, fixes, flottantes ou redimensionnables, Mocha UI propose toutes sortes de fenêtres pour sublimer l'expérience utilisateur dans votre application web.</p>
<h2>Mootable</h2>
<p><a href="http://joomlicious.com/mootable/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/mootable.jpg" alt="Mootable" /></a><br />
J'ai découvert Mootable sur <a href="http://www.x-or.be/blog/">le blog d'X-or</a>: Il s'agit d'un script permettant de traiter un tableau html de la même manière qu'un tableau provenant d'une application desktop. Il devient ainsi possible de redimensionner les colonnes, de trier les éléments du tableau, de souligner la ligne sur laquelle passe la souris...<br />
Bref, le must pour les tableaux de votre prochaine appli!</p>
<h2>Slimbox</h2>
<p><a href="http://www.digitalia.be/software/slimbox"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/slimbox.jpg" alt="Slimbox" /></a><br />
On ne présente plus ces fenêtres modales servant essentiellement à afficher du contenu multimedia. Il existe Lightwindow, Lightbox...Voici Slimbox, qui en plus d'être basé sur Mootools, se révèle est très légère. </p>
<h2>MooEditable</h2>
<p><a href="http://phoenity.com/mooeditable/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/mooeditable.jpg" alt="MooEditable" /></a><br />
MooEditable est un éditeur wysiwyg dans le style de TinyMCE ou FckEditor. Il pèse moins de 10kb et est totalement cross-browser. Sa légèreté ainsi que son extensibilité en font selon moi un bon choix face à des éditeurs beaucoup plus lourds et pas nécessairement plus intuitifs pour l'utilisateur.<br />
Le rendu est correct pour du wysiwyg, mais bien entendu n'espérez pas obtenir un html aussi propre que si il avait été codé à la main.</p>
<h2>Mooflow</h2>
<p><a href="http://www.outcut.de/MooFlow/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/mooflow.jpg" alt="Mooflow" /></a><br />
Les utilisateurs de Leopard, dernier OS d'Apple, apprécient énormément Coverflow, cette fonction permettant d'afficher les fichiers d'une manière esthétique et très intuitive. Alors, pourquoi ne pas en faire profiter les utilisateurs de votre site? A noter, ce script est un peu lourd, donc à utiliser avec parcimonie.</p>
<h2>Date Picker Widget</h2>
<p><a href="http://www.frequency-decoder.com/demo/date-picker-v2/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/datepicker.jpg" alt="Date Picker Widget" /></a><br />
Si vous travaillez avec des dates, ce <em>Date picker</em> vous simplifiera la tâche tout en améliorant le coté user-friendly.</p>
<h2>Calendar</h2>
<p><a href="http://www.electricprism.com/aeron/calendar/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/calendar.jpg" alt="Calendar" /></a><br />
Ce script fait un peu double emploi avec le date picker que nous venons de voir, mais c'est pour la bonne cause: Proposé en trois déclinaisons, (Noire, bleue et blanche) <em>Calendar</em> est le genre de script que l'on aimerait trouver sur tous les sites qui utilisent des dates: Très léger, esthétique et faisant également office de validation côté client, (impossible de rentrer une date invalide) que demander de plus?</p>
<h2>Mootools UI Menu</h2>
<p><a href="http://glutock.free.fr/mootools/UI/menu.html"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/uimenu.jpg" alt="Mootools UI Menu" /></a><br />
Je ne suis pas spécialement fan des menus contextuels apparaissant au clic droit en lieu et place du menu du navigateur, mais je me suis dit que ce script pourrait intéresser certains d'entre vous. A noter, il est également possible d'utiliser ce script pour faire apparaitre un menu lors d'un évènement, comme un clic sur un bouton, par exemple.</p>
<h2>Roar Notifications</h2>
<p><a href="http://digitarald.de/project/roar/1-0/showcase/messages/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/roar.jpg" alt="Roar Notifications" /></a><br />
Une interface utilisateur à très souvent besoin d'avertir l'utilisateur: Champ mal renseigné, opération impossible...Bien sûr, la bonne vieille fonction <em>alert()</em> permet d'afficher des messages à l'attention de l'utilisateur, mais si vous recherchez une manière beaucoup plus esthétique de transmettre ce genre d'information, Roar Notifications est fait pour vous.</p>
<h2>Checkboxes and Lists</h2>
<p><a href="http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/"><img src="http://www.lyxia.org/blog/wp-content/uploads/2008/05/checkboxes.jpg" alt="Checkboxes and Lists" /></a><br />
J'avais déja présenté un script équivalent lors de mon article intitulé <a href="http://www.lyxia.org/blog/design/8-scripts-javascript-pour-sublimer-votre-site-257">8 scripts Javascript pour sublimer votre site</a>. Bien qu'il ne s'agisse ici que d'esthétisme pur et non d'amélioration des fonctionnalités existantes,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lyxia.org/blog/developpement/javascriptajax/10-scripts-mootools-pour-linterface-utilisateur-275/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
