drag n' drop en php ?

Faouzi
Invité n'ayant pas de compte PHPfrance

13 févr. 2009, 13:07

Bonjour,

Je cherche une méthode autre que Flash qui permettrait de déplacer sur une carte un picto (situé dans une div) donc du drag n' drop et que les coordonnées du picto soit enregistré en base.
P'tet en Ajax ?

PHPment,

Faouzi

ViPHP
ViPHP | 4039 Messages

13 févr. 2009, 14:32

Javascript, tu voudrais dire, pour gérer le drag'n'drop.

Avec du php côté serveur pour enregistrer la modif.

Et entre deux un aller-retour avec du javascript asynchrone.

Tranquillement.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

13 févr. 2009, 14:50

Javascript, tu voudrais dire, pour gérer le drag'n'drop.
Avec du php côté serveur pour enregistrer la modif.
Et entre deux un aller-retour avec du javascript asynchrone.
Ça a pas l'air mal comme concept !
Et on appelerait ça comment ?
Ajax ? :langue:

Allez, hop !

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Javascript, AJAX".

Faouzi
Invité n'ayant pas de compte PHPfrance

13 févr. 2009, 15:10

héhé :)

J'ai jamais rien fait en ajax pour le moment, donc je ne sais trop par où commencer pour faire un simple update de coordonnées. Une piste pour moi ?

Faouzi

Faouzi
Invité n'ayant pas de compte PHPfrance

13 févr. 2009, 15:58

Re !

J'ai géré le drag and drop de cette façon (via dreamweaver) :

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Document sans titre</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script language="JavaScript" type="text/JavaScript"> <!-- function MM_reloadPage(init) { //reloads the window if Nav4 resized if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); } MM_reloadPage(true); function MM_findObj(n, d) { //v4.01 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x; } function MM_dragLayer(objName,x,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS) { //v4.01 //Copyright 1998 Macromedia, Inc. All rights reserved. var i,j,aLayer,retVal,curDrag=null,curLeft,curTop,IE=document.all,NS4=document.layers; var NS6=(!IE&&document.getElementById), NS=(NS4||NS6); if (!IE && !NS) return false; retVal = true; if(IE && event) event.returnValue = true; if (MM_dragLayer.arguments.length > 1) { curDrag = MM_findObj(objName); if (!curDrag) return false; if (!document.allLayers) { document.allLayers = new Array(); with (document) if (NS4) { for (i=0; i<layers.length; i++) allLayers[i]=layers[i]; for (i=0; i<allLayers.length; i++) if (allLayers[i].document && allLayers[i].document.layers) with (allLayers[i].document) for (j=0; j<layers.length; j++) allLayers[allLayers.length]=layers[j]; } else { if (NS6) { var spns = getElementsByTagName("span"); var all = getElementsByTagName("div"); for (i=0;i<spns.length;i++) if (spns[i].style&&spns[i].style.position) allLayers[allLayers.length]=spns[i];} for (i=0;i<all.length;i++) if (all[i].style&&all[i].style.position) allLayers[allLayers.length]=all[i]; } } curDrag.MM_dragOk=true; curDrag.MM_targL=targL; curDrag.MM_targT=targT; curDrag.MM_tol=Math.pow(tol,2); curDrag.MM_hLeft=hL; curDrag.MM_hTop=hT; curDrag.MM_hWidth=hW; curDrag.MM_hHeight=hH; curDrag.MM_toFront=toFront; curDrag.MM_dropBack=dropBack; curDrag.MM_dropJS=dropJS; curDrag.MM_everyTime=et; curDrag.MM_dragJS=dragJS; curDrag.MM_oldZ = (NS4)?curDrag.zIndex:curDrag.style.zIndex; curLeft= (NS4)?curDrag.left:(NS6)?parseInt(curDrag.style.left):curDrag.style.pixelLeft; if (String(curLeft)=="NaN") curLeft=0; curDrag.MM_startL = curLeft; curTop = (NS4)?curDrag.top:(NS6)?parseInt(curDrag.style.top):curDrag.style.pixelTop; if (String(curTop)=="NaN") curTop=0; curDrag.MM_startT = curTop; curDrag.MM_bL=(cL<0)?null:curLeft-cL; curDrag.MM_bT=(cU<0)?null:curTop-cU; curDrag.MM_bR=(cR<0)?null:curLeft+cR; curDrag.MM_bB=(cD<0)?null:curTop+cD; curDrag.MM_LEFTRIGHT=0; curDrag.MM_UPDOWN=0; curDrag.MM_SNAPPED=false; //use in your JS! document.onmousedown = MM_dragLayer; document.onmouseup = MM_dragLayer; if (NS) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP); } else { var theEvent = ((NS)?objName.type:event.type); if (theEvent == 'mousedown') { var mouseX = (NS)?objName.pageX : event.clientX + document.body.scrollLeft; var mouseY = (NS)?objName.pageY : event.clientY + document.body.scrollTop; var maxDragZ=null; document.MM_maxZ = 0; for (i=0; i<document.allLayers.length; i++) { aLayer = document.allLayers[i]; var aLayerZ = (NS4)?aLayer.zIndex:parseInt(aLayer.style.zIndex); if (aLayerZ > document.MM_maxZ) document.MM_maxZ = aLayerZ; var isVisible = (((NS4)?aLayer.visibility:aLayer.style.visibility).indexOf('hid') == -1); if (aLayer.MM_dragOk != null && isVisible) with (aLayer) { var parentL=0; var parentT=0; if (NS6) { parentLayer = aLayer.parentNode; while (parentLayer != null && parentLayer.style.position) { parentL += parseInt(parentLayer.offsetLeft); parentT += parseInt(parentLayer.offsetTop); parentLayer = parentLayer.parentNode; } } else if (IE) { parentLayer = aLayer.parentElement; while (parentLayer != null && parentLayer.style.position) { parentL += parentLayer.offsetLeft; parentT += parentLayer.offsetTop; parentLayer = parentLayer.parentElement; } } var tmpX=mouseX-(((NS4)?pageX:((NS6)?parseInt(style.left):style.pixelLeft)+parentL)+MM_hLeft); var tmpY=mouseY-(((NS4)?pageY:((NS6)?parseInt(style.top):style.pixelTop) +parentT)+MM_hTop); if (String(tmpX)=="NaN") tmpX=0; if (String(tmpY)=="NaN") tmpY=0; var tmpW = MM_hWidth; if (tmpW <= 0) tmpW += ((NS4)?clip.width :offsetWidth); var tmpH = MM_hHeight; if (tmpH <= 0) tmpH += ((NS4)?clip.height:offsetHeight); if ((0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) && (maxDragZ == null || maxDragZ <= aLayerZ)) { curDrag = aLayer; maxDragZ = aLayerZ; } } } if (curDrag) { document.onmousemove = MM_dragLayer; if (NS4) document.captureEvents(Event.MOUSEMOVE); curLeft = (NS4)?curDrag.left:(NS6)?parseInt(curDrag.style.left):curDrag.style.pixelLeft; curTop = (NS4)?curDrag.top:(NS6)?parseInt(curDrag.style.top):curDrag.style.pixelTop; if (String(curLeft)=="NaN") curLeft=0; if (String(curTop)=="NaN") curTop=0; MM_oldX = mouseX - curLeft; MM_oldY = mouseY - curTop; document.MM_curDrag = curDrag; curDrag.MM_SNAPPED=false; if(curDrag.MM_toFront) { eval('curDrag.'+((NS4)?'':'style.')+'zIndex=document.MM_maxZ+1'); if (!curDrag.MM_dropBack) document.MM_maxZ++; } retVal = false; if(!NS4&&!NS6) event.returnValue = false; } } else if (theEvent == 'mousemove') { if (document.MM_curDrag) with (document.MM_curDrag) { var mouseX = (NS)?objName.pageX : event.clientX + document.body.scrollLeft; var mouseY = (NS)?objName.pageY : event.clientY + document.body.scrollTop; newLeft = mouseX-MM_oldX; newTop = mouseY-MM_oldY; if (MM_bL!=null) newLeft = Math.max(newLeft,MM_bL); if (MM_bR!=null) newLeft = Math.min(newLeft,MM_bR); if (MM_bT!=null) newTop = Math.max(newTop ,MM_bT); if (MM_bB!=null) newTop = Math.min(newTop ,MM_bB); MM_LEFTRIGHT = newLeft-MM_startL; MM_UPDOWN = newTop-MM_startT; if (NS4) {left = newLeft; top = newTop;} else if (NS6){style.left = newLeft; style.top = newTop;} else {style.pixelLeft = newLeft; style.pixelTop = newTop;} if (MM_dragJS) eval(MM_dragJS); retVal = false; if(!NS) event.returnValue = false; } } else if (theEvent == 'mouseup') { document.onmousemove = null; if (NS) document.releaseEvents(Event.MOUSEMOVE); if (NS) document.captureEvents(Event.MOUSEDOWN); //for mac NS if (document.MM_curDrag) with (document.MM_curDrag) { if (typeof MM_targL =='number' && typeof MM_targT == 'number' && (Math.pow(MM_targL-((NS4)?left:(NS6)?parseInt(style.left):style.pixelLeft),2)+ Math.pow(MM_targT-((NS4)?top:(NS6)?parseInt(style.top):style.pixelTop),2))<=MM_tol) { if (NS4) {left = MM_targL; top = MM_targT;} else if (NS6) {style.left = MM_targL; style.top = MM_targT;} else {style.pixelLeft = MM_targL; style.pixelTop = MM_targT;} MM_SNAPPED = true; MM_LEFTRIGHT = MM_startL-MM_targL; MM_UPDOWN = MM_startT-MM_targT; } if (MM_everyTime || MM_SNAPPED) eval(MM_dropJS); if(MM_dropBack) {if (NS4) zIndex = MM_oldZ; else style.zIndex = MM_oldZ;} retVal = false; if(!NS) event.returnValue = false; } document.MM_curDrag = null; } if (NS) document.routeEvent(objName); } return retVal; } //--> </script> </head> <body> <div id="Layer1" style="position:absolute; left:66px; top:59px; width:40; height:40; z-index:1" ondrag="MM_dragLayer('Layer1','',0,0,0,0,true,false,-1,-1,-1,-1,false,false,0,'',false,'')"> <div align="center"><img src="star.gif" width="20" height="20" /></div> </div> </body> </html>
Maintenant comment via un "on dragend" sauvegarder la position de l'élément ?

F.

Mammouth du PHP | 2937 Messages

13 févr. 2009, 16:06

J'ai jamais rien fait en ajax pour le moment, donc je ne sais trop par où commencer pour faire un simple update de coordonnées. Une piste pour moi ?
et
J'ai géré le drag and drop de cette façon (via dreamweaver) :
Si tu n'as jamais fait de l'Ajax, pourquoi utiliser un éditeur WYSIWYG pour lui demander de générer un code que tu ne comprendras pas ? :roll:

Pour chercher à comprendre Ajax, si tu n'en as jamais fait, mieux vaut consulter des tutos en ligne, comme celui du site du zéro.

Si tu as besoin d'utiliser un drag and drop sans trop te casser la tête, tu peux utiliser des bibliothèques JavaScript, comme script.aculo.us.

Bon courage. ;)

ViPHP
ViPHP | 4039 Messages

13 févr. 2009, 16:09

Ou le framework Jquery, qui ajoute une myriade d'autres fonctionnalités ultrasympas.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
AB
ViPHP | 5818 Messages

13 févr. 2009, 18:39

Oui je te conseillerais plutôt d'utiliser les bibliothèques mentionnées par Victor ou Berze plutôt que d'utiliser les utilitaires dreamweaver où toute modification du code est quasiment impossible.

Sinon pour les bases de l'ajax, en plus du lien donné par Victor je crois me souvenir qu'il y a également quelques tutos sur ce site.