Bonjour!
Je profite d’un peu de répit ce dimanche pour terminer la première partie de ce tutoriel. Nous allons voir comment faire des drag’n drop (glisser déposer) avec JQuery. Dans un second temps nous verrons comment sauvegarder les modifications directement en base de donnée avec de l’ajax. Pour voir un exemple je vous propose d’aller faire un tour sur mon site de gestion d’une équipe de rugby (projet en cour) : teamManagerXV.
Bon allez on attaque?!
- Le coté client : XHTML
Comme d’habitude le code puis les explications
- <meta http-equiv=”Content-type” content=”text/html; charset=utf-8″ />
- <script type=”text/javascript” src=”jquery.js”></script>
- <script type=”text/javascript” src=”interface.js”></script>
- <script type=”text/javascript” src=”script.js”></script>
- <link rel=”stylesheet” type=”text/css” href=”styles.css” media=”all”/>
- </head>
- <h1>Waouuuuuuuhhhhhh</h1>
- <div class=”ingredient”>
- <div id=”1″ class=”drag”>sucre</div>
- <div id=”2″ class=”drag”>lait</div>
- <div id=”3″ class=”drag”>farine</div>
- <div id=”4″ class=”drag”>oeuf</div>
- <div id=”5″ class=”drag”>sel</div>
- </div>
- <div class=”recette” id=”r_1″>
- <h3>Pâte à crêpe</h3>
- <div class=”recette_ingredient”></div>
- </div>
- <div class=”recette” id=”r_2″>
- <h3>Pâte brisée</h3>
- <div class=”recette_ingredient”></div>
- </div>
- </div>
- </body>
- </html>
Alors rien de particulier pour le moment en terme de structure du document. Vous pouvez remarquer que nous avons 3 divs « principaux » : un pour les ingrédients et un pour chaque recette. Celui pour les ingrédients contient nos éléments draggables tandis que ceux pour les recettes contiennent nos récepteurs (zone de drop).
- un peu de style : CSS
- div{border:1px solid black}
- .drag,.recette_ingredient{height:20px;width:60px}
Pas grand chose ici! Juste des bordures pour que ce soit « compréhensible » et un largeur/hauteur définie pour les zones de drop et les drags.
- Enfin des trucs cool! Le javascript!
Comme notre code est basé sur le framework JQuery il faut que vous téléchargiez la librairie ainsi que la sur-couche « interface » (vous pouvez télécharger les deux sur le site d’interface). Ajustez les noms avec votre fichier xhtml. Enfin créez votre fichier script.js. Je pense avoir suffisament commenté le code pour ne pas revenir dessus. Si vous avez des questions n’hésitez pas, un petit commentaire et je vous répond dans la journée!
EDIT : grâce à piouPiouM j’ai pu résoudre le problème du mouseover.
- //on créé uen fonction pour rendre nos éléments draggable (merci piouPiouM ^^)
- function addDraggable(el){
- el.Draggable(
- {
- revert: true,
- zIndex: 1000,
- ghosting: true,
- opacity: 0.7
- }
- )
- };
- $(document).ready(
- function()
- {
- //Nos élements draggable sont définis ici. Ce sont tous les éléments avec la class CSS ‘.drag’.
- addDraggable($(’.drag’));
- //le div avec la class ‘.ingredient’ est notre première zone droppable. Elle contient nos ingrédients (original hein!).
- $(’.ingredient’).Droppable(
- {
- //elle accept les élément ayant la class ‘drag’
- accept : ‘drag’,
- //ici cela affecte des classes css suivant que la zone est active ou hover. Pratique pour changer de style au survol.
- //activeclass: ‘activeEmplacement’,
- //hoverclass: ‘hoverEmplacement’,
- //plusieurs zone de tolerance existe. Allez faire un tour sur la doc.
- //Ici nous choisissons de pouvoir dropper un élément quand le pointeur de la souri est dans la zone.
- tolerance: ‘pointer’,
- //on définit ce qu’il va se passer lorsqu’on drop un élément dans la zone. On passe l’élément draggé en parametre.
- ondrop: function (drag)
- {
- //on on récupère l’attribut recette si le drag en possede un
- var id_recette=$(drag).attr(’recette’);
- //si il en possède un on suprime le drag. Cela correspond à si un ingredient d’une recette est enlevé de sa recette.
- //supprimez le bloc et testez!
- if(id_recette){
- $(drag).remove();
- }
- },
- fit: true
- }
- );
- //Ici nous allons dropper nos ingrédient pour construire nos recettes.
- $(’.recette_ingredient’).Droppable(
- {
- accept : ‘drag’,
- activeclass: ‘activeEmplacement’,
- hoverclass: ‘hoverEmplacement’,
- tolerance: ‘pointer’,
- ondrop: function (drag)
- {
- //nous récuperons l’id de la recette. Il est contenu dans le div parent de la zone droppabe (alez revoir le xhtml ;-p).
- var id_recette=$(this).parents().attr(’id’);
- //on clone l’élément draggable. Cela permet de réutiliser un autre élément pour une autre recette!
- var drag1 = $(drag).clone();
- //nous ajoutons un attribut recette ayant pour valeur l’id de la recette.
- $(drag1).attr(’recette’,id_recette);
- //puis nous récuperons l’id de l’ingredient…
- var id_ingredient=$(drag1).attr(’id’);
- //…pour verifier qu’il ne soit pas déjà présent!
- if (!$(this).children().is(’#’ + id_ingredient)) {
- //s’il n’est pas présent on l’ajoute
- $(this).append(drag1);
- //on rend notre “clone” draggable
- addDraggable(drag1);
- //avec un petit effet pour l’apaprition :p
- $(drag1).fadeIn(”slow”);
- }
- },
- fit: true
- }
- );
- }
- );
Voila! Cette première partie est fini! Je ferais bientôt la suite avec la sauvegarde de vos recettes dans une base de donnée grâce à l’ajax!
Si vous voulez que je détail un point précis demandez via un petit commentaire! Puis si vous avez aimé n’hésitez pas à le dire c’est toujours sympa et ça motive :p
User Responses
26 Responses and Counting...
Leave a Reply
[tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (2/2)
[tuto jquery] drag ‘n drop avec sauvegarde automatique en base de données (1/2)
[2 birthday] 2 ans aujourd'hui = 2 smashing book à gagner
[tuto web] cadre avec bordures extensibles valide xhtml/css
[tuto mashup] Google maps sur votre site : c'est possible! (version statique)
- Les clients français et le syndrome du verre à moitié vide 8 mars 2010 Julien
- Lever des fonds 5 mars 2010 Olivier Marone
- Why Google Pushed Buzz Out The Door Before It Was Ready 1 mars 2010 Erick Schonfeld
- Les levées de fonds dans les start-up : Des divergences d’intérêts entre entrepreneurs et investisseurs 1 mars 2010 Olivier Marone
- 11082 26 février 2010 (author unknown)




![[3615 mylife] Limoges, c’est fini. La suite?](http://antoine.guiral.info/wp-content/uploads/2010/02/stvincent.jpg)
![[facebook] Du nouveau sur la roadmap](http://antoine.guiral.info/wp-content/uploads/2010/02/facebook_logo.png)
![[facebook php] hiphop for php : une petite révolution dans le monde du développement web et de php](http://antoine.guiral.info/wp-content/uploads/2010/02/hiphop.jpg)
![[apple iPad] énorme succés de l’iPad à la dernière keynote d’apple](http://antoine.guiral.info/wp-content/uploads/2010/01/ipad.jpg)
![[google] google, le 51ème état?](http://antoine.guiral.info/wp-content/uploads/2010/01/51emeetat.jpg)
février 24, 2008
je suis en train de la rediger :p je twit dès que j’ai fini!
Edit : Ayééé il est en ligne —>> http://antoine.guiral.info/2008/03/09/tuto-jquery-drag-%e2%80%98n-drop-avec-sauvegarde-automatique-en-base-de-donnees-22/
février 24, 2008
Cool ce tuto sur jquery, exactement ce qui me manquait pour me mettre à l’ajax (vivemenent la deuxième partie, donc)
février 24, 2008
juste un petit mot pour te duire que tu gagnerais à être rceonnu par tous
février 24, 2008
Merci hoax Rss!
J’essaye de me faire connaitre mais je t’assure que ce n’est pas facile
donc toute aides est la bienvenue! N’hésite pas à revenir et à en parler autour de toi
A bentôt!!
février 24, 2008
Merci pour ce script !
J’ai voulu l’adapter mais ça bug sous IE6 et 7 ! Sur ton site teamManagerXV il est possible d’incrémenter les équipes mais impossible de sortir les joueurs ensuite (seuls les noms présents par défaut les peuvent). De plus, une fois sortis les noms par défaut il est impossible de dragger à nouveau les noms vers les équipes. Dommage car sous Firework ça roule super !
Enfin, d’un point de vue esthétique il aurait été agréable d’avoir dès la sélection le curseur de déplacement.
Que de critiques je sais, c’est facile, mais c’est important je pense.
Bravo tout de même
février 24, 2008
Bonjour Alain,
en effet sous IE (7 en tout cas dc surement sur le 6
) teamManager ne marche pas. Cependant le javascript de teamManager n’est pas celui du tuto…Je peux peut être essayer de le corriger pendant le week end mais je suis un peu débordé :s
En ce qui concerne le curseur, si tu regarde dans la méthode droppable j’ai mis un commentaire qui parle des classes CSS au survol du drag. La solution est là
.
En tout cas je vas essayer de corriger le drag’n drop sur IE…
Merci et à bientôt!
février 24, 2008
J’imagine que tout cela prend du temps !
En fait je suis plutôt webdesigner, je bidouille les scripts pour réaliser au plus près l’ergonomie que je souhaite.
.
J’ai fait une longue recherche et ton script correspond le mieux à ce que je recherchais. Je n’ai pas réussi à faire fonctionner celui du tuto alors je me suis permis de récupérer le code de ton site qui a le grand avantage d’être en action
Je suis en train de le fusionner avec un autre afin de pouvoir dragger aussi les boites de réception. Si cela t’interesse je pourrais te communiquer le lien du résultat.
Bon week-end
février 24, 2008
Si cela t’interesse je peux t’envoyer les sources du tuto (le script étant « mieux »). Pour le lien du résultat je me ferais un plaisir de te faire un backlink.
Merci bon week end a toi aussi.
février 24, 2008
Avec joie ! Tu peux utiliser l’adresse que j’ai inscrite pour laisser des commentaires.
Je te tiendrai au courant de mes avancées.
A bientôt
février 24, 2008
Hello Antoine
J’espère que ton weekend fut bon malgré que tu sois débordé actuellement. Par quel biais pensais-tu me faire parvenir les sources du tuto ? Je suis impatient de le tester car tu dis qu’il est mieux que celui que je trouve déjà très bien.
Merci par avance
Alain
février 24, 2008
Bonjour,
J’ai besoin d aide je débute en javascript, j’ai lu ton tuto,
pourrai tu m’envoyer les scripts du tuto, j’aimerai mieu comprendre,
merci d’avance
février 24, 2008
salut pariaud, je ne suis pas sur que te donner les script tels quels t’aiderais beaucoup si tu débutes en JS…Par contre je veux bien répondre à tes questions
février 24, 2008
Bonjour, félicitations pour votre travail.
Je n’arrive pas a trouver le fichier interface.js à ajouter.
J’ai crée mon package en y mettant tout pour être sur que celui fonctionne mais rien ne fonctionne.
Merci
février 24, 2008
Je viens de trouver qu’il s’agissait d’un plugins extérieur.
Merci tous de même
février 24, 2008
La fonction addDraggable ne fonctionne pas sous IE pour un élément créé après le chargement de la page, quelqu’un aurait-il une solution à ce problème ?
février 24, 2008
Salut,
la fonction fonctionne bien. Par contre, le plugin UI de jquery a changé et les noms de certaine méthode avec. Je ne peux pas au jour d’aujourd’hui corriger le tutoriel, mais en regardant la doc du plugin tu devrais t’en sortir.
février 24, 2008
Bonjour,
Les scripts présentés m’intéressent mais malheureusement je n’arrive pas à les faire fonctionner (évolution de jQuery). Serait-il possible d’avoir les versions ‘interface.js + jquery.js » d’indiquées ? ou alors d’avoirs les fichiers à dispos ?
Ca serait cool
Merci et bonne continuation.
février 24, 2008
Bonjour Far, je suis au courant que les scripts présentés ici correspondent à d’ancienne version…Cependant je les ai mis à jour pour la publication d’un article dans Linux+ magasine de septembre. Je vais pouvoir mettre l’article a disposition sur le blog d’ici quelques jours (disons ce wend en comptant large
). En attendant vous pouvez me contacter par mail : guiral.antoine[at]gmail[dot]com
see ya
février 24, 2008
Bonjour!
Il me tarde d’avoir la mise à jour du tuto par rapport aux évolutions de JQuery histoire d’arriver à faire fonctionner ce tuto qui a l’air de correspondre parfaitement à ce que je veux faire…
février 24, 2008
salut merci pour l’aide
tu peux m’envoyer la source de ce tuto a mon email ?
car j’ai pas trouver interface.js :s
février 24, 2008
Bonjour Guiral antoine,
Je viens de suivre ton tuto, je le trouve très intéressant (surtout la partie 2 ^^), par contre lorsque j’ai voulu le faire, je n’ai pas obtenu le résultat attendu (aucun drag ‘n drop).
J’aurais souhaité savoir s’il était possible d’avoir la source, afin de voir ou est(sont) mon(mes) erreur(s) :p
En tout cas félicitation pour ton tuto, j’en parlerais autour de moi
février 24, 2008
Salut,
Dommage l’exemple n’est plus en ligne, le « TeamManagerXV » sur http://www.e-caveavin.com/rugby/gerer-effectif.php affiche :
Erreur SQL !
select * from rugby_club order by club
Table ‘22860×2pxh.rugby_club’ doesn’t exist
@
février 24, 2008
bonsoir,
je vous remercie pour ce tuto, malheureusement j’ai pas arriver à faire le tuto;
est il possible de m’envoyer le code source ? merci d’avance
février 24, 2008
Bonsoir, désolé je n’envoi pas les sources. Il existe une version plus récente de ce tutoriel sur le blog.
A bientot
février 24, 2008
Bonjour,
Je n’arrive pas non plus à faire fonctionner ce code, je ne connais pas bien JQuery, je voulais le découvrir via cet exemple malheureusement, certaines choses ont apparement changées mais impossible de savoir quoi.
Je ne trouve pas non plus la version plus récente de ce tutoriel sur le blog.
Pouvez vous nous aider, nous indiquer ce qui a changé, faire remarcher ce code très intéressant.
D’avance merci
février 24, 2008
Bonjour,
la dernière version de ce tuto se trouve ici : http://antoine.guiral.info/2008/10/03/tuto-jquery-dragn-drop-avec-jquery-et-ajax-v2/.
cordialement