Greetings, I have found the script at http://www.dhtmlgoodies.com/index.ht...=arrange_nodes
and would like to use it, but I want to be able to save the order of the nodes.
I have been reading through the forums and have been unsucessful in finding a solution.
I would like to store the order of the nodes in a database and would like to write to it using php.
Here is what I got so far based on the forums:
THE SCRIPT:
Code:<!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> <style type="text/css"> <style type="text/css"> body{ font-family: Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif; margin:0px; padding:0px; padding-left:10px; -moz-user-select:no; } h1{ margin-bottom:5px; } /* Don't change these options */ #movableNode{ position:absolute; } #arrDestInditcator{ position:absolute; display:none; width:100px; } /* End options that shouldn't be changed */ #arrangableNodes,#movableNode ul{ padding-left:0px; margin-left:0px; margin-top:0px; padding-top:0px; width:300px; } #arrangableNodes li,#movableNode li{ list-style-type:none; cursor:default; border:1px solid #999; padding:5px; background-color:#EEE; margin-top:2px; } img{ border:0px; } </style> <script type="text/javascript"> var offsetYInsertDiv = -3; // Y offset for the little arrow indicating where the node should be inserted. if(!document.all)offsetYInsertDiv = offsetYInsertDiv - 7; // No IE var arrParent = false; var arrMoveCont = false; var arrMoveCounter = -1; var arrTarget = false; var arrNextSibling = false; var leftPosArrangableNodes = false; var widthArrangableNodes = false; var nodePositionsY = new Array(); var nodeHeights = new Array(); var arrInsertDiv = false; var insertAsFirstNode = false; var arrNodesDestination = false; function cancelEvent() { return false; } function getTopPos(inputObj) { var returnValue = inputObj.offsetTop; while((inputObj = inputObj.offsetParent) != null){ returnValue += inputObj.offsetTop; } return returnValue; } function getLeftPos(inputObj) { var returnValue = inputObj.offsetLeft; while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft; return returnValue; } function clearMovableDiv() { if(arrMoveCont.getElementsByTagName('LI').length>0){ if(arrNextSibling)arrParent.insertBefore(arrTarget,arrNextSibling); else arrParent.appendChild(arrTarget); } } function initMoveNode(e) { clearMovableDiv(); if(document.all)e = event; arrMoveCounter = 0; arrTarget = this; if(this.nextSibling)arrNextSibling = this.nextSibling; else arrNextSibling = false; timerMoveNode(); arrMoveCont.parentNode.style.left = e.clientX + 'px'; arrMoveCont.parentNode.style.top = e.clientY + 'px'; return false; } function timerMoveNode() { if(arrMoveCounter>=0 && arrMoveCounter<10){ arrMoveCounter = arrMoveCounter +1; setTimeout('timerMoveNode()',20); } if(arrMoveCounter>=10){ arrMoveCont.appendChild(arrTarget); } } function arrangeNodeMove(e) { if(document.all)e = event; if(arrMoveCounter<10)return; if(document.all && arrMoveCounter>=10 && e.button!=1 && navigator.userAgent.indexOf('Opera')==-1){ arrangeNodeStopMove(); } arrMoveCont.parentNode.style.left = e.clientX + 'px'; arrMoveCont.parentNode.style.top = e.clientY + 'px'; var tmpY = e.clientY; arrInsertDiv.style.display='none'; arrNodesDestination = false; if(e.clientX<leftPosArrangableNodes || e.clientX>leftPosArrangableNodes + widthArrangableNodes)return; var subs = arrParent.getElementsByTagName('LI'); for(var no=0;no<subs.length;no++){ var topPos =getTopPos(subs[no]); var tmpHeight = subs[no].offsetHeight; if(no==0){ if(tmpY<=topPos && tmpY>=topPos-5){ arrInsertDiv.style.top = (topPos + offsetYInsertDiv) + 'px'; arrInsertDiv.style.display = 'block'; arrNodesDestination = subs[no]; insertAsFirstNode = true; return; } } if(tmpY>=topPos && tmpY<=(topPos+tmpHeight)){ arrInsertDiv.style.top = (topPos+tmpHeight + offsetYInsertDiv) + 'px'; arrInsertDiv.style.display = 'block'; arrNodesDestination = subs[no]; insertAsFirstNode = false; return; } } } function arrangeNodeStopMove() { arrMoveCounter = -1; arrInsertDiv.style.display='none'; if(arrNodesDestination){ var subs = arrParent.getElementsByTagName('LI'); if(arrNodesDestination==subs[0] && insertAsFirstNode){ arrParent.insertBefore(arrTarget,arrNodesDestination); }else{ if(arrNodesDestination.nextSibling){ arrParent.insertBefore(arrTarget,arrNodesDestination.nextSibling); }else{ arrParent.appendChild(arrTarget); } } } arrNodesDestination = false; clearMovableDiv(); } function saveArrangableNodes() { var nodes = arrParent.getElementsByTagName('LI'); var string = ""; for(var no=0;no<nodes.length;no++){ if(string.length>0)string = string + ','; string = string + nodes[no].id; } document.forms[0].hiddenNodeIds.value = string; // Just for testing document.getElementById('arrDebug').innerHTML = 'Ready to save these nodes:<br>' + string.replace(/,/g,',<BR>'); document.forms[0].submit(); // Remove the comment in front of this line when you have set an action to the form. } function saveDragDropNodes() { var saveString = ""; var uls = dragDropTopContainer.getElementsByTagName('UL'); for(var no=0;no<uls.length;no++){ // LOoping through all <ul> var lis = uls[no].getElementsByTagName('LI'); for(var no2=0;no2<lis.length;no2++){ if(saveString.length>0)saveString = saveString + ";"; saveString = saveString + uls[no].id + '|' + lis[no2].id; } } document.forms[0].hiddenNodeIds.value = saveString; document.forms[0].submit(); } function initArrangableNodes() { arrParent = document.getElementById('arrangableNodes'); arrMoveCont = document.getElementById('movableNode').getElementsByTagName('UL')[0]; arrInsertDiv = document.getElementById('arrDestInditcator'); leftPosArrangableNodes = getLeftPos(arrParent); arrInsertDiv.style.left = leftPosArrangableNodes - 5 + 'px'; widthArrangableNodes = arrParent.offsetWidth; var subs = arrParent.getElementsByTagName('LI'); for(var no=0;no<subs.length;no++){ subs[no].onmousedown = initMoveNode; subs[no].onselectstart = cancelEvent; } document.documentElement.onmouseup = arrangeNodeStopMove; document.documentElement.onmousemove = arrangeNodeMove; document.documentElement.onselectstart = cancelEvent; } window.onload = initArrangableNodes; </script> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>My Things to Do</title> </head> <body> <H1>Arrange the nodes below</H1> <ul id="arrangableNodes"> <li id="node1">Node no. 1</li> <li id="node2">Node no. 2</li> <li id="node3">Node no. 3</li> <li id="node4">Node no. 4</li> <li id="node5">Node no. 5</li> </ul> <p> <a href="#" onclick="saveArrangableNodes();return false">Save</a> </p> <div id="movableNode"><ul></ul></div> <div id="arrDestInditcator"><img src="insert.gif"></div> <div id="arrDebug"></div> <form method="post" action="pro.php"> <input type="button" onclick="saveDragDropNodes()" value="Save"> </form> </body> </html>
THE ACTION FILE (PRO.PHP):
Code:<? $db = mysql_connect("mysql.domain.net","username","password"); mysql_selectdb("databasename",$db); if(isset($_POST['hiddenNodeIds'])){ $items = explode(";",$_POST['hiddenNodeIds']); for($no=0;$no<count($items);$no++){ $tokens = explode("|",$items[$no]); // Now you have the parent id in $tokens[0] and node id in $tokens[1]; mysql_query("update nodes set parentId='".$tokens[0]."',nodeOrder='$no' where ID='".$tokens[1]."'") or die(mysql_error()); } } ?>
THE DATABASE SQL:
Code:CREATE TABLE `node` ( `ID` tinyint(3) NOT NULL auto_increment, `nodeName` varchar(255) NOT NULL, `parentId` int(20) NOT NULL, `nodeorder` int(20) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Can anyone tell me why this is not working and what I must do in order to get the order of the nodes to save when I re-arrange them and then submit them?


Reply With Quote
Bookmarks