1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4
<title>dhtmlxTree sample</title>
11
#details input,#details textarea{
12
border: 1px solid gray;
21
border-bottom:1px solid blue;
28
border-color: lightblue blue blue lightblue;
29
background-color: #87ceeb;
38
<link rel="STYLESHEET" type="text/css" href="../../css/dhtmlXTree.css">
39
<script src="../../js/dhtmlXCommon.js"></script>
40
<script src="../../js/dhtmlXTree.js"></script>
45
//xml loader to load details from database
46
var xmlLoader = new dtmlXMLLoaderObject(doLoadDetails,window);
47
//default label for new item
48
var newItemLabel = "New Item";
49
//id for new (unsaved) item
54
tree = new dhtmlXTreeObject("treebox","100%","100%",0);
55
tree.setImagePath("../../imgs/");
56
tree.enableDragAndDrop(true);
57
tree.setDragHandler(doOnBeforeDrop);
58
tree.setOnClickHandler(doOnSelect);
59
tree.loadXML("treefromdb.php");
63
//add new node next to currently selected (or the first in tree)
64
function addNewPeer(){
65
if(tree.getLevel(newItemId)!=0){//check if unsaved item already exists
66
alert("New Item (unsaved) already exists")
69
var selectedId = tree.getSelectedItemId();
71
tree.insertNewNext(selectedId,newItemId,newItemLabel,"","","","","SELECT,CALL",0)
73
tree.insertNewItem(0,newItemId,newItemLabel,"","","","","SELECT,CALL",0)
77
//add new child node to selected item (or the first item in tree)
78
function addNewChild(){
79
if(tree.getLevel(newItemId)!=0){//check if unsaved item already exists
80
alert("New Item (unsaved) already exists")
83
var selectedId = tree.getSelectedItemId();
85
tree.insertNewItem(selectedId,newItemId,newItemLabel,"","","","","SELECT,CALL",0)
87
tree.insertNewItem(0,newItemId,newItemLabel,"","","","","SELECT,CALL",0)
91
//delete item (from database)
92
function deleteNode(){
94
var f = document.forms["detailsForm"];
95
if(tree.getSelectedItemId()!=newItemId){//delete node from db
96
if(!confirm("Are you sure you want to delete selected node?"))
98
f.action = "deletenode.php"
100
}else{//delete unsaved node
101
doDeleteTreeItem(newItemId);
105
//remove item from tree
106
function doDeleteTreeItem(id){
107
document.getElementById("details").style.visibility = "hidden";
108
var pId = tree.getParentId(id);
111
tree.selectItem(pId,true);
118
var f = document.forms["detailsForm"];
119
f.action = "savenode.php";
123
//save moved (droped) item to db. Cancel drop if save failed or item is new
124
function doOnBeforeDrop(id,parentId){
129
var dropSaver = new dtmlXMLLoaderObject(null,null,false);//sync mode
130
dropSaver.loadXML("dropprocessor.php?id="+id+"&parent_id="+parentId);
131
var root = dropSaver.getXMLTopNode("succeedded");
132
var id = root.getAttribute("id");
134
alert("Save failed");
138
if(tree.getSelectedItemId()==id){//update details (really need only parent id)
148
function doUpdateItem(id, label){
149
var f = document.forms["detailsForm"];
150
f.item_id.value = id;
151
tree.changeItemId(tree.getSelectedItemId(),id);
152
tree.setItemText(id,label);
153
tree.setItemColor(id,"black","white");
157
//what to do when item selected
158
function doOnSelect(itemId){
159
if(itemId!=newItemId){
160
if(tree.getLevel(newItemId)!=0){
161
if(confirm("Do you want to save changes?")){//save changes to new item
162
tree.selectItem(newItemId,false)
166
tree.deleteItem(newItemId);
168
}else{//set color to new item label
169
tree.setItemColor(itemId,"red","pink")
171
loadDetails(itemId);//load details for selected item
173
//send request to the server to load details
174
function loadDetails(id){
176
xmlLoader.loadXML("loaddetails.php?id="+id);
178
//populate form of details
179
function doLoadDetails(obj){
180
var f = document.forms["detailsForm"];
181
var root = xmlLoader.getXMLTopNode("details")
182
var id = root.getAttribute("id");
183
document.getElementById("details").style.visibility = "visible";
185
f.item_nm.value = tree.getItemText(id);
186
f.item_desc.value = "";
188
f.item_nm.value = root.getElementsByTagName("name")[0].firstChild.nodeValue;
189
if(root.getElementsByTagName("desc")[0].firstChild!=null)
190
f.item_desc.value = root.getElementsByTagName("desc")[0].firstChild.nodeValue;
192
f.item_desc.value = "";
195
f.item_parent_id.value = tree.getParentId(id);
199
//show status of request on page
201
var d = document.getElementById("showproc");
203
d.style.display = "";
205
d.style.display = "none";
210
<body onload="loadTree()" style="height:100%">
211
<!--- block for displaying status of request on page --->
212
<div id="showproc" style="display:block;">Processing...</div>
214
<h1>dhtmlxTree<br>Relationships with database sample (PHP/MySQL)</h1>
215
<a href="../dhtmlxTree_db_sample.zip">Get zipped code</a>
217
<li>Create/Update/Delete nodes in tree with simultaneous database update</li>
218
<li>Drag-n-drop with simultaneous database update</li>
222
<a href="javascript:void(0)" onclick="addNewPeer()">New Peer</a>|<a href="javascript:void(0)" onclick="addNewChild()">New Child</a>|<a href="javascript:void(0)" onclick="deleteNode()">Delete Node</a>
231
background-color:#f5f5f5;
232
border :1px solid Silver;"/>
234
<!--- details area. visible if any node selected --->
236
style="padding:5px;visibility:hidden;" valign="top">
237
<form name="detailsForm" action="" target="actionframe" method="post">
238
<span>Node ID:</span>
239
<input name="item_id" type="Text" style="background-color:lightgrey;width:50px;text-align:right;" name="label" readonly="true"><br>
240
<span>Parent ID:</span>
241
<input name="item_parent_id" type="Text" style="background-color:lightgrey;width:50px;text-align:right;" name="label" readonly="true"><br>
243
<input name="item_nm" type="Text" maxlength="50" name="label" style="width:200px;"><br>
244
<span>Descripton:</span>
245
<textarea name="item_desc" id="textarea" style="height:100px;width:200px;"></textarea><br>
246
<button type="button" onclick="saveItem()" style="width:200px;">Save</button>
251
<!--- iframe for submiting details form to --->
252
<iframe name="actionframe" id="actionframe" frameborder="0" width="100%" height="0"></iframe>
254
<h4>© Scand LLC 2005</h4>