Table des matieres (X)

Chut, ca charge ...

Tutoriel Mootools, la suite (Drag’n Drop et Cookie)


Vu le vif interĂȘt qu'a suscitĂ© le prĂ©cĂ©dent tutoriel sur Mootools avec la galerie Ajax, voila donc la suite logique dans laquelle nous allons aborder le drag and drop (ou glisser-dĂ©poser pour les puristes) ainsi que la gestion des cookies (non pas les gateaux).

Comme d'hab, on se lance un peu de zik zen et c'est parti pour du drag and drop en folie !

Ce tutoriel est à faire à la suite de ce tutoriel sur Mootools que j'ai fait il y a peu de temps. Je vous conseille vivement de visiter d'abord le tutoriel précédent avant de faire celui ci.

Il vous est possible de rendre votre lecture plus agréable en cliquant sur la petite image en haut à droite.

Nous en étions resté à l'étape 7 de notre exemple de galerie photo en ajax si mes souvenirs sont exacts ) (et ils le sont)

Voila donc la suite bande de chanceux ! D

Pour rendre notre petite galerie un peu meilleure, on va ajouter un caddie. Et oui comme ça on pourra prendre n'importe laquelle de nos photos de bonnasses et les glisser-déposer dedans afin de sauvegarder, effacer, charger, admirer celles que nous préférons grùce à un cookie comme on peut le voir en cliquant sur l'image ci-dessous . Oui je sais, c'est formidable.

screenshot tutoriel mootools

Etape 8 : Le drag and Drop (glisser-déposer)

Alors pour commencer, nous allons modifier notre fichier recuperer_photo.php pour ajouter ces 3 lignes , afin de pouvoir avoir des elements à glisser/déposer :

PHP:
  1. <p class="drag">"; //on ajoute un div pour gerer le drag
  2. echo "<a href="http://fardeen.biz/wp-admin/%5C%22javascript:montrer_image%28%27images_big/%22.$tVals%5B1%5D.%22%27,%27%22.$tVals%5B1%5D.%22%27%29;%5C%22" title="Image : "><img src="http://fardeen.biz/wp-admin/images/$tVals%5B1%5D" /></a>";
  3. echo "";
  4. ";

On ajoute le code HTML du caddie :

HTML:
  1. <p class="caddie">Ici c'est notre caddie, on a plus qu'a choisir et glisser ces filles ici gratos D </p>

Ensuite on va se remettre un peu de le javascript, parcque je suis sur que vous kiffez ca )

Dans notre fonction windows.onload on va ajouter ces quelques lignes commentées afin de déclarer les options et comportements du drag and drop (autres options disponibles):

JavaScript:
  1. //les options pour nos objets qui recoit le drop,les caddie
  2. $$('.caddie').each(function(el)
  3. {
  4. el.extend({
  5. onOver: function(el){
  6. if (!this.dragEffect) {
  7. //on definit l'effet si ce n'est pas déjà fait
  8. this.dragEffect = new Fx.Color(this, 'background-color');
  9. }
  10. //effet de clignotement au survol
  11. this.dragEffect.clearTimer().custom('000000', '3399ff');
  12. },
  13. onLeave: function(el){
  14. //effet de clignotement a la fin survol
  15. this.dragEffect.clearTimer().custom('3399ff', '000000');
  16. },
  17. onDrop: function(el, drag){
  18. //effet de clignotement au drop (quand on lache l'element)
  19. this.dragEffect.clearTimer().custom('ff3366', '000000');
  20. //on ajoute l'element dans le div caddie
  21. drag.elementOrg.clone().injectInside(this).draggableTag();
  22. }
  23. })
  24. });
  25.  
  26. Element.extend({
  27. draggableTag: function(){
  28. this.makeDraggable({
  29. //on recupere les elements ou on peut dropper,
  30. droppables: $$('.caddie'),
  31. //permet de definir quel div permettra la selection
  32. handle: this.getElementsBySelector('.bouton')[0],
  33. onStart: function(){
  34. this.elementOrg = this.element;
  35. //on duplique le div que l'on place dans le div caddie
  36. this.element = this.element.clone().setStyles({
  37. position: 'absolute',
  38. top: this.element.getTop() + 'px',
  39. left: this.element.getLeft() + 'px',
  40. opacity: '0.6'
  41. }).injectInside(document.body);
  42. },
  43. onComplete: function(){
  44. this.element.remove(); //on supprime l'occurence en drag
  45. this.element = this.elementOrg; //on le replace ou il etait
  46. }
  47. });
  48. }
  49. });

Ensuite dans notre fonction photoFinished(), on ajoute ces lignes pour activer l'effet drag'n drop Ă  nos images:

JavaScript:
  1. //pr le drag and drop
  2. //on active le drag and drop pour les photos une fois chargées
  3. //on recup ts les div class="drag"
  4. $$('.drag').each(function(el){
  5. //on applique les options de drag  definit plus haut
  6. el.draggableTag();
  7. });

Et enfin evidemment la touche CSS, pour faire joli et aussi pour des raisons techniques sinon ca marche pas. (notamment le position : relative;)

CSS:
  1. /*classe des elements dans lequel on peut deposer un element*/
  2. .caddie {
  3. clear : both;
  4. border : 1px solid #FF3366;
  5. width : 600px;
  6. position:relative;
  7. float:left;
  8. margin-top : 60px;
  9. padding : 2px;
  10. }
  11.  
  12. /*apparence de nos images une fois dans le caddie*/
  13. .caddie img{
  14. width : 40px;  /* on fixe la taille des images en miniatures*/
  15. height:40px;
  16. border : 0px;
  17. margin: 0px 0px 0px 0px;
  18. }
  19.  
  20. .caddie img:hover{  /*au survol*/
  21. border : 1px solid #FF3366;
  22. width : 80px;
  23. height: 80px;
  24. }
  25.  
  26. .caddie .bouton{
  27. height : 0px; /*on enleve la barre de deplacement de images du caddie*/
  28. width : 0px;
  29. }
  30.  
  31. /*classe des elements draggables*/
  32. .drag {
  33. /*le position relative est necessaire pour activer le drag and drop*/
  34. position:relative;
  35. cursor : move;
  36. float : left;
  37. position:relative;
  38. padding:0px;
  39. margin-left: 10px;
  40. padding: 0px;
  41. display : block;
  42. text-align : center;
  43. }
  44.  
  45. /*bouton qui permet de dragger*/
  46. .bouton {
  47. position: relative;
  48. background-color: #FF3366;
  49. padding: 0px;
  50. cursor: move;
  51. height : 8px;
  52. color : white;
  53. font-size : 8px;
  54. }
  55.  
  56. /*hack special IE de merde*/
  57. * html .bouton {
  58. width : 100px;
  59. margin-top : 2px;
  60. }

On obtient ce résultat pour l'étape 8.

Il faut noter que je n'ai testé que sous Firefox et IE et que de nombreuses choses restent à faire (suppresion d'un element du caddie, empecher les doublons...) pour obtenir quelque chose de vraiment fonctionnel mais ce n'est pas l'objectif de ce tutoriel.

Etape 9 : Gestion des Cookies

Maintenant que notre caddie est Ă  peu prĂšs fonctionnel, on va s'occuper de l'enregistrement, chargement et suppression de notre caddie grĂące Ă  un cookie. (=petit fichier qui s'enregistre sur l'ordinateur du visiteur)

Pour vérifier les cookies n'hesitez pas à utiliser l'extension Firefox Web developper Toolbar qui est vraiment trÚs puissante et utile.

On va commencer par ajouter le HTML nécessaire pour ajouter nos boutons de controles du caddie.

HTML:
  1. <p id="menu_cookie">&nbsp;</p>
  2. <p class="bouton_cookie"><a href="javascript:sauvegarder_caddie();">Sauvegarder caddie</a></p>
  3. <p class="bouton_cookie"><a href="javascript:charger_caddie();">Charger caddie</a></p>
  4. <p class="bouton_cookie"><a href="javascript:effacer_caddie();">Effacer caddie</a></p>
  5. <p class="bouton_cookie"><a href="javascript:vider_caddie();">Vider caddie</a></p>

On ajoute une pincée de CSS histoire de rendre notre menu un peu moins triste.

CSS:
  1. /*pr les boutons de gestion de cookies*/
  2. #menu_cookie {
  3. clear : both ;
  4. margin : 0;
  5. }
  6.  
  7. .bouton_cookie  {
  8. float : left;
  9. background-color: #000;
  10. color : white;
  11. margin-left : 40px;
  12. margin-top : 10px;
  13. padding : 2px;
  14. }
  15.  
  16. .bouton_cookie:hover {
  17. background-color: #FF3366;
  18. }
  19.  
  20. .bouton_cookie a  {
  21. color : white ;
  22. }

Et enfin le Javascript qui va gérer le tout:

JavaScript:
  1. //vider le caddie
  2. function vider_caddie() {
  3. //on recupere toutes les div avec la class .drag dans le caddie
  4. var images = $$('.caddie .drag');
  5. images.each(function(el){
  6. //on les efface
  7. el.remove();
  8. });
  9. }
  10.  
  11. //effacer le caddie (cookie)
  12. function effacer_caddie() {
  13. Cookie.remove("tutoriel_mootools");
  14. alert('Cookie effacé.')
  15. }
  16.  
  17. //charge les images du caddie
  18. function charger_caddie() {
  19. //on recuper le contenu du cookie
  20. var contenu_caddie = Cookie.get("tutoriel_mootools");
  21. //si le caddie n'est pas vide
  22. if(contenu_caddie != undefined) {
  23. //on separe chaque nom d'image
  24. contenu_caddie = contenu_caddie.split('|');
  25. //on parcout le tableau d'image qu'on reinjecte dans le div caddie
  26. var caddie_html = "";
  27. for(var i = 0 ; i &lt;contenu_caddie.length - 1; i++) {
  28. //on recrée le HTML nécessaire pour chaque image
  29. caddie_html = caddie_html + "<a href="http://fardeen.biz/wp-admin/%5C%22javascript:montrer_image%28%27images_big/%22+contenu_caddie%5Bi%5D+%22%27,%27%22+contenu_caddie%5Bi%5D+%22%27%29;%5C%22"><img src="http://fardeen.biz/wp-admin/images/%22+contenu_caddie%5Bi%5D+%22" /></a> ";
  30. }
  31. //on rempli notre caddie
  32. $('caddie').setHTML("Caddie chargé )
  33. " + caddie_html);
  34. }
  35. else {
  36. alert('Caddie inexistant (Verifier que les cookies sont activés si le problÚme persiste)')
  37. }
  38. }
  39.  
  40. //sauvegarde les images du caddie
  41. function sauvegarder_caddie() {
  42. //on recupere toutes les images dans le caddie
  43. var images = $$('.caddie .drag img');
  44. var contenu_caddie ="";
  45. //un petit compteur pour savoir le nombre d'images sauvegardée
  46. var compteur = 0 ;
  47. images.each(function(el){
  48. //on ajoute a la variable contenu caddie les noms des images contenus dans le ALT
  49. contenu_caddie = el.getProperty('alt') + "|" + contenu_caddie ;
  50. compteur++;
  51. });
  52. //si le caddie n'est pas vide
  53. if(contenu_caddie.length&gt; 0) {
  54. //on creer le cookie tutoriel_mootools avec le contenu contenu_caddie pour 1 journée
  55. Cookie.set("tutoriel_mootools", contenu_caddie, 1);
  56. alert("Caddie enregistré. ( "+compteur+" element(s) )")
  57. }
  58. else {
  59. alert("Le caddie est vide.");
  60. }
  61. }

Et voila le résultat pour notre étape 9.

Conclusion

Vous ĂȘtes maintenant capable de rĂ©aliser une gallerie AJAX avec navigation en accordeon, drag and drop, gestion de caddie par cookie, ainsi que des effets graphiques simples. Vous ĂȘtes des winners !

Quelques de nouvelles de Mootools avant de clore ce chapitre, aujourd'hui est sortie une documentation par l'exemple de Mootools, Mootools-Primer ainsi qu'un exemple d'upload-multiple en Flash-Mootools qui déchire vraiment et qui sera bientÎt finalisé. (sur lequel je reviendrais quand il sera correctement terminé)

Vous maitrisez le framework Mootools , à vous de développez les super applications du Web2.0 !

PS: Comme d'hab si vous avez des questions, remarques ou éloges à faire, n'hésitez pas, je me ferais un plaisir de vous répondre dans les commentaires.

effort_reconfort

Vous pouvez consultez le tutoriel sur la super administration de base de données, facilement réalisable et modifiable avec PHPMyEdit, pour que vous puissiez par exemple lier la gallerie AJAX avec une base de donnée.

Billets en relation


19 réponses à “Tutoriel Mootools, la suite (Drag’n Drop et Cookie)”

Tutoriel Mootools Galerie AJAX, la suite...

Voila la suite du premier tutoriel sur Mootools (http://fardeen.biz/index.php/tutoriel-mootools-framework-...) qui aborde cette fois ci le drag and drop ainsi qu'une gestion de caddie grce au cookie. Encore une fois c'est du bon ) ...

Anonyme le 29 novembre 2006 9:45 |

j'étais venu sur ce blog un peu par hasard en cherchant des infos sur googlemap (et le bon tutoriel google map + php) et j'ai trouvé pleins d'autres infos, notamment sur mootools que j'ai découvert ici. Je n'ai pas encore exploité mais à voir les exemples de qualité proposé sur ton blog je vais m'y atteler prochainement (le blog est déjà dans les favoris).

encore bravo pour tout le travail pédagogique présenté ici ;)

Tartenpion le 30 novembre 2006 8:51 |

Merci pr ces compliments , ca me touche en plein coeur )

Fardeen le 30 novembre 2006 9:03 |

Je suis moi aussi venu un peu ici par hasard, en cherchant un tuto pour faire une galerie en ajax.
Je vais bientÎt me lancer à l'aventure, et pense m'inspirer un peu de votre tutorial et le customisé un peu ;)
Ce n'est pas que je n'aime pas le design de la galerie D juste le rose qui me dérange un peu D
En tout cas je tiens a vous remercier pour toutes ces informations, et le temps que vous passez Ă  le faire ;)
Je vous encourage Ă  continuer )
Cordialement

Ps : J'ai remarqué dans la galerie que lorsque l'on ouvre une photo plus grande, la page s'agrandit, mais ne se réduit pas quand on ferme l'image.

ouhman le 30 novembre 2006 22:57 |

Cela fait plusieurs soirée euh -nuit- que je cherche un tuto clair est efficace sur le drag n drop, grùce a toi je suis trÚs content de dormir 3h00 cette nuit :-)

Merci pour se travail de qualité
[AccÚssoirement, ton ton décaler me fait terriblement marrer !]

L le 14 décembre 2006 2:31 |

salut, et merci encore pour ce tuto.

mais j'avous nepas comprendre la logique du cookies. L'exemple donnée est un trop complexe pour moi parfait néophyte en js.

je cherche a reutiliser cette methode pour retenir une couleur.

pour introduire ma varibale de couleur, j'ai utiliser cela

HTML:
  1. <a href="void(0)" rel="nofollow" rel="nofollow">Bleu</a>

qui renvois d'une part a

var couleur = new Fx.Color('color', 'background-color');

et d'aute part au script correspondant au cookies

j'ai essayer de m'inspirer de votre script, mais j'avous me perdre allĂšgrement...

de mĂȘme pour renvoyer la variable ensuite dans ma div c'est encore pire.. je commence serieusement a m'arracher les cheveux.

pourriez vous m'y aider? en contre partie, je pourrais par exemple, mettre un liens dans les a propos et en bas de page dans ma nouvelle interface (le site compte actuellement entre 2000 et 5000 visiteurs unique par jours)

je desirerais comprendre le fonctionnement car les applications serraient alor trés nombreuses.

vous remerciant par avance de toute aide, orientation de recherche, ou autre que vous pourriez m'apporter, je vous souhaites une agréable fin de journée.

jer666 le 26 décembre 2006 19:50 |

Bravo et merci,
Grùce à toi (en partie) je me suis mis à faire mon site... du coup, j'ai repompé pal mal de chose et j'ai surtout beaucoup appris (je ne savais rien de javascript avant de faire ce site ! c'est aussi pourquoi il y a encore beaucoup de choses à optimiser ^^ )
Encore merci !

OrdiNathan le 4 janvier 2007 14:02 |

De rien et vraiment sympa ton site ;)

Fardeen le 4 janvier 2007 14:09 |

Salut et bravo!

un tutoriel comme ça on peut le lire vraiment sans se prendre la tĂȘte, respect!
J'ai une p'tite question subsidiaire: serait-il facile de complĂ©ter ton travail pour qu'une photo de "bonnasse" (un item) ne puisse ĂȘtre sĂ©lectionnĂ© qu'une seule fois? Style, quand on la drag-drop, elle disparaĂźt de la liste du dessus... Et si on vide le cadie, elle revient par magie?!
Si tu as le temps de répondre c'est sympa, je m'y connais pas trop en jvs ;-) !

encore merci pour cet esprit et ce partage ;-)

bonav le 27 janvier 2007 22:23 |

Salut et merci )

Nan ce serait pas si difficile (enfin c'est relatif Ă  ton niveau de prog aussi ) ) de ne permettre qu'une seule selection. (avec un tableau dans lequel on stocke les identifiants des images deja presente dans le caddie, et lorsqu'on en ajoute une nouvelle on verifie qu'elle n'est pas deja dedans en comparant avec les identifiant presents dans le tableau.

Le plus chiant c'est plutot le cote disparition de l'image de la liste et reapparation en cas de suppression du caddie. Mais c'est largement faisable avec un peu de volonté et de temps )

Fardeen le 27 janvier 2007 22:44 |

[...] Edit : la suite est disponible ! [...]

Tutoriel Mootools, framework Javascript gratuit < Fardeen GHULAM le 31 janvier 2007 17:57 |

'lut a tous !!

en bossant sur l exemple j ai remarqué un truc :

si on ajoute une image dans la caddie et apres on clique sur le bouton de la mĂȘme image dans la liste , elle se rajoute dans le caddie !!! Le seul moyen d arreter le phenomene est de deplacer l image mais sans la mettre dans le caddie (pas sur d etre bien clair la ...).

Si qq a la soluce je suis preneur !!! merci

mistermadgoose le 27 avril 2007 13:02 |

Ca déchire tout simplement, bravo et continues comme ça !!!!!!!!!!!!!!

nicocolt le 6 juin 2007 12:19 |

Bonjour,

Vraiment ce monde des mootools m'atire l'intention, et j'aimerai bien recevoir toutes nouvelle infos.

merci d'avance.

issam le 9 juin 2007 15:16 |

J'aimerais aussi avoir le temps de vous en donner davantage )

Fardeen le 14 juin 2007 20:52 |

ça serait trĂ©s intĂ©rĂȘssant si c'Ă©tait vide de sĂ©ane herotique

shahrayar le 23 novembre 2007 10:26 |

désolé j'ai rien compris

michel le 17 mars 2008 15:28 |

Salut!
J'aimerais tester ce super tuto mais apparement il y a un manque dans les quelques lignes Ă  ajouter en php, surement un pb d'affichage ???? Merci.

guims le 23 avril 2008 22:02 |

bonjour
j'ai regardé l'example il, marche super bien avec ie6 mais pas avec ie7 il manque les poignées pour le drag and drop donc impossible de deplacer les elements, j'arrive pas a comprendre pourquoi quelqu'un a t' il une idee ?

luis ferreira le 5 mai 2008 12:23 |

Laisser un commentaire