Archive pour le ‘Developpement’ catégorie

Alterner les couleurs des lignes d’un tableau (PHP ou jQuery)

9 mars 2010

Pour faciliter la lecture d’un tableau il est fréquent d’alterner la couleur de chaque ligne.
Le principe est d’attribuer aux lignes paires un style et un autre aux lignes impaires.

En PHP

Voir la démo
Créons tout d’abord 2 styles.
[cc lang=’css’ width=’100%’]
.style1{
background-color : #F2F1EB;
}
.style2{
background-color : #DAE9F4;
}
[/cc]

En PHP on utilise le modulo % (reste de la division) . Le modulo d’une division par 2 permet de savoir si la ligne est paire ou impaire, il ne reste plus qu’à affecter un style pour chacun des 2 cas.
[cc lang=’php’ width=’100%’]
echo « 

« ;
for($i=1; $i < = 10; $i++){ if($i%2){ $classe = "style1"; }else{ $classe = "style2"; } echo "

< /tr> « ;
}
echo « 

ligne $i ligne $i

« ;
[/cc]
On affecte à la variable $classe l’un ou l’autre des styles et on l’applique à la ligne.

En jQuery

Voir la démo
Partons du même tableau.
[cc lang=’php’ width=’100%’]
echo « 

« ;
for($i=1; $i < = 10; $i++){ echo "

< /tr> « ;
}
echo « 

ligne $i ligne $i

« ;
[/cc]
et appliquons un style différent selon que les lignes soient paires (even) ou impaires (odd)

[cc lang=’js’ width=’100%’]
$(document).ready(function(){
$(‘table.monTab tr:nth-child(even)’).addClass(‘style1’);
$(‘table.monTab tr:nth-child(odd)’).addClass(‘style2’);
});
[/cc]
On applique donc le style style1 à chaque ligne paire (even) et le style2 à chaque ligne impaire (odd) du/des tableau(x) dont la classe est monTab grâce à la méthode addClass de jQuery, qui ajoute une classe à un élément.

L’utilisation de nth-child permet d’éviter que jQuery se perde si vous avez plusieurs tableaux dans votre page, en effet sinon il continu d’attribuer les couleurs sans repartir à zéro. Ainsi la première ligne du tableau 1 pourrait être bleue alors que la première ligne du tableau 2 serait blanche.

Numéro de téléphone avec des points et conversion de date en français avec PHP

8 mars 2010

Téléphone

Lorsque vous demandez à un visiteur de saisir son numéro de téléphone, il est plus simple pour lui de le taper sans utiliser de points ou d’espaces etc… Pourtant lorsque vous l’affichez c’est quand même plus lisible que les chiffres ne soient pas tous collés.
Une possibilité, consiste à utiliser wordwrap
[cc lang=’php’ width=’100%’]
$tel = « 0145666666 »;
$tel_formate = wordwrap ($tel, 2, ‘.’, 1); // 01.45.66.66.66
[/cc]
string wordwrap ( string str , int width , string break , bool cut )
wordwrap retourne la chaîne str , après avoir inséré break tous les width caractères.

Convertir une date au format français

Si vous récupérez une date issue de votre base mysql par exemple, le format sera YYYY-MM-DD, cependant pour l’afficher à l’écran les français préféreront une date au format JJ/MM/AAAA.
Une solution consiste à utiliser preg_replace qui recherche et remplace par expression rationnelle.
[cc lang=’php’ width=’100%’]
$maDate = preg_replace(‘/^(.{4})-(.{2})-(.{2})$/’,’$3/$2/$1′, $maDate );
[/cc]
mixed preg_replace ( mixed pattern , mixed replacement , mixed subject , int limit , int count )
preg_replace analyse subject pour trouver l’expression rationnelle pattern et remplace les résultats par replacement

Téléphone 2

On peut aussi modifier le numéro de téléphone avec preg_replace.
Avec par exemple :
[cc lang=’php’ width=’100%’]
$tel = preg_replace(« /(\d{2}) *(?!\z)/ », »$1. »,$tel);
[/cc]
NB : pour wordwrap comme pour l’exemple ci-dessus, on n’a pas vérifié la taille de la chaine !

Mysql : ON DUPLICATE KEY UPDATE

4 mars 2010

Une petite clause bien pratique : ON DUPLICATE KEY UPDATE.
Imaginez que vous vouliez mettre à jour un enregistrement dans votre base dans le cas ou celui ci existe déjà et sinon, s’il n’existe pas, en créer un nouveau. Une solution serait de faire un SELECT sur la clé, et soit un UPDATE ou un INSERT selon que la clé existe ou non. Une autre solution serait de faire un UPDATE et si mysql_affected_rows == 0 alors vous faites un INSERT… Pourquoi pas.

Mais MySQL permet de faire tout ça en une seule requête !
[cc lang=’php’ width=’100%’]
INSERT INTO maTable (id_table,champ_table)
VALUES (‘152′,’valeur à modifier’)
ON DUPLICATE KEY UPDATE
champ_table=’valeur à modifier’;
[/cc]
Bien entendu, pas besoin de mettre de WHERE dans la partie UPDATE vu que c’est parce que la clé existe que le update est exécuté

A noter que ON DUPLICATE KEY UPDATE est différent de REPLACE qui s’apparente plutôt à un DELETE + INSERT qui oblige à donner une valeur à tous les champs, alors qu’avec ON DUPLICATE KEY UPDATE on ne spécifie que les champs qui sont à modifier.

Mementos jQuery

4 mars 2010

Voici quelques mémento jQuery que j’ai trouvé sur le net :

Mémento jQuery 1.4

Version HTML
Version PDF

jquery.cheatsheet.1.4
Créé par Future Colors.

Mémento complet jQuery 1.3

par Antonio Lupetti

memento jQuery

memento jQuery

Source : http://woork.blogspot.com/2009/09/jquery-visual-cheat-sheet.html

Mémento pour la balise select

http://comp345.awardspace.com/select_element_cheatsheet.pdf

memento_select

memento_select

Trouvé sur le blog myphpetc.com

Extension firefox jQuery

jQuery Menu de Simon Lang

jQuery menu

jQuery ou comment simplifier les requêtes Ajax

2 mars 2010

Avant il fallait jongler avec XMLHttpRequest, bien sûr ça fonctionne très bien, mais une fois qu’on a essayé jQuery difficile de faire machine arrière !
En effet ce simple code ci dessous permet d’envoyer la variable js info à page.php avec la méthode POST, pendant l’envoi et en attendant le retour de page.php, l’image load.gif est affichée dans le div chargement et enfin si tout s’est bien passé, retourPHP affiche ce que renvoi page.php.

Démo du script

[cc lang= »js » width=’100%’ line=’20’]
$.ajax({
type : « POST »,
url : « page.php »,
data : « info = »+info,
send : $(‘#chargement’).html(« chargement« ),
error :function(msg){
alert( « Erreur :  » + msg );
},
success : function(data){
$(‘#retourPHP’).html(data);
}});
[/cc]

Tout d’abord pour faire patienter l’internaute vous pouvez créer votre gif de chargement avec AjaxLoad

Mise en place du script :

D’abord insérez l’appel à jQuery
[cc lang= »js » width=’100%’]

[/cc]
Ensuite on va créer un champ monChamp qui contiendra les données à envoyer, un bouton envoiAjax et une balise div retourPHP qui renverra la valeur saisie dans le champ
[cc lang= »html » width=’100%’]

[/cc]
Avec jQuery on surveille le click sur envoiAjax et on récupère le value de monChamp que l’on stocke dans la variable info (le reste est expliqué au début de l’article)
[cc lang= »js » width=’100%’]

[/cc]

et page.php y’a quoi dedans ? pas pas grand chose on se contente d’afficher ce que l’on a reçu (sans vérification de contenu : ni isset, ni empty ni rien…)

[cc lang= »php » width= »100% »]
< ?php echo "reception de : " . $_POST['info']; ?>
[/cc]
et voilà !

Ajaxload créez votre gif de chargement Ajax

2 mars 2010

Vous utilisez ajax et vous avez besoin d’un petit gif animé pour occuper l’internaute pendant le chargement de votre script ? ne cherchez plus ! créez-le en quelques secondes avec http://www.ajaxload.info/

ajax-loader

Ajax-loader

SlideToggle : simplifiez vous la vie pour afficher et masquer un élément

2 mars 2010

Dans la série jQuery simplifie moi la vie, voici la méthode .slideToggle.

Voir la démo

Imaginez que vous avez un div monBloc que vous voulez masquer ou afficher en fonction du clic sur le lien displayBloc
[cc lang=’html’ width=’100%’]
Contenu masqué

Lorem Ipsum

[/cc]

Plutôt que de s’amuser à appeler une fonction afficheMasque sur l’évènement onclick du lien pour un résultat sans animation comme ci-dessous :
[cc lang=’javascript’ width=’100%’]
function afficheMasque(){
if(document.getElementById(‘monBloc’).style.display==’none’){
document.getElementById(‘monBloc’).style.display=’block’;
}else{
document.getElementById(‘monBloc’).style.display=’none’;
}
}
[/cc]

Utilisez slideToggle pour obtenir la même chose avec une animation.
[cc lang=’javascript’ width=’100%’]
$(document).ready(function(){
$(« #displayBloc »).click(function () {
$(« #monBloc »).slideToggle(« slow »);
});
});
[/cc]

La vitesse d’apparition/disparition du bloc est déterminée par ‘fast’ ou ‘slow’ ou être spécifié en millisecondes.

N’oubliez pas d’inclure l’appel à jQuery dans la balise HEAD.
[cc lang=’html’ width=’100%’]

[/cc]

Pour aller plus loin, vous pouvez également utiliser toggleClass qui vous permet de permuter une classe (ajouter/retirer la classe à l’élément). Ainsi on peut afficher une flèche haut/bas (ou +/-) en fonction de l’affichage du contenu.
Pour cela il faut ajouter une classe au lien
[cc lang=’html’ width=’100%’]
Contenu masqué

Lorem Ipsum

[/cc]

[cc lang=’css’ width=’100%’]
.deroule{
display : block;
width : 120px;
background: url(fleches.gif) no-repeat right -50px;
}

.enroule {
background: url(fleches.gif) no-repeat right 8px;
}
[/cc]

Ensuite on ajoute la méthode toggleClass qui va ajouter ou supprimer la classe enroule et donc dans l’exemple décaler l’image contenant les flèches
[cc lang=’javascript’ width=’100%’]
$(document).ready(function(){
$(« #displayBloc »).click(function () {
$(« #monBloc »).slideToggle(« slow »);
$(this).toggleClass(« enroule »); return false;
});
});
[/cc]

Plus d’infos sur la documentation de jQuery

Tester son site sur differents navigateurs (IE, Firefox, Safari, Chrome, Opera…)

1 mars 2010

Lorsque l’on créé son site, ce qui est pénible c’est la différence d’interprétation du code selon les navigateurs.
Afin de tester votre site sur les différentes versions d’internet Explorer (IE6, IE7, IE8), de Firefox, de Safari, de Chrome et d’Opéra. Il existe un utilitaire très pratique qui s’appelle : Spoon Browser Sandbox.
Une fois le petit programme installé (cliquez sur ‘install plugin Spoon’ en haut à droite d’une des capture de navigateur), il vous suffira de vous rendre à l’adresse de Spoon Browser Sandbox et de cliquer sur le navigateur de votre choix pour le lancer et tester votre site.

NB : le temps de bufferisation peut être assez long

browser_sandbox

browser_sandbox