|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
用ajax写的树型菜单,欢迎指教!
看了这里的很多帖子,发现大家好象对树型目录很感兴趣,最近自己抽空也写了一个,基于ajax的,动态从服务器加载树接点数据。注册用户后可以用右键管理目录,支持鼠标拖逸。希望和各位一起探讨如何种好一颗树。 测试地址:http://51seek.vicp.net |
整体印象,技术应用满好的。随便提几个小问题:
1 将xmlhttp单独作为一个js文件,不要与普通的处理函数混在一起。
2 你的注释过于简单,与没写没啥区别:p
[code]
///////////////////////////////////////////////////////////////////////////////////////////
//
// setlast SETLAST
//
///////////////////////////////////////////////////////////////////////////////////////////
[/code]
3 函数与函数之间的藕合很高,举个例子,你的函数loadtree似乎是用来设置树的节点的,但是接下来的函数getdivhtml中,还是出现了这些节点的具体内容。
|
Sheneyan在上个帖子中说
首先感谢Sheneyan的指教。
之前见到过最好的一颗树是:http://www.telerik.com/Default.aspx?PageId=1828
但它是价格249$的商业软件,我是参考它的功能写的,同时加入了自己的一些想法:也就是把它做成一个多用户的树,把树变成森林,每个用户可以自己管理自己的树。
所以,您不妨再注册个用户,用右键、鼠标拖逸一下,那些代码是这颗树的重点。 |
到是对http://51seek.vicp.net/里的那几个模拟窗口很感兴趣。
不知是不是楼主所做。 |
xling在上个帖子中说
这也是个基于ajax的在线IM。由于美工不行,在界面上借用了http://www3.meebo.com/的图标,但代码是不一样的。 |
经典!佩服yyseek
,能否给我源文件呢?
[email]zouxh2000@hotmail.com[/email] |
回huanhuan2000 程序都是.htm,.js文件,在你ie的临时文件里面。 |
生成菜单的数据库呢? |
我把数据库结构、和测试数据发给你,
需要的朋友可以在这里留下email。
下面的是服务器端取树节点c#的函数。
public static string getLayerTree1(string table,string userid,string pid,string myid)
{
SqlDataReader dataReader=null;
SqlConnection sqlConnection;
SqlCommand sqlCommand;
sqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
sqlConnection.Open();
sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
string retuStr = "";
int curid=0,curpid=0,currow=0,childs=0;
string curqid=null,curname=null,curdir=null,curimg=null,cururl=null,curtarget="_blank",curshare=null;
try
{
//sqlCommand.CommandText ="select count(pid) as count from " + table + " where Pid = " + pid + " and SubId = " + userid;
//SqlDataReader sdr = sqlCommand.ExecuteReader();
//if(sdr.Read()) childs = (int)sdr["count"];
//if (sdr!= null) sdr.Close();
//if(childs==0) return "[]";
sqlCommand.CommandText ="select * from " + table + " where SubId = " + userid + " and Pid = " + pid + " order by row";
dataReader = sqlCommand.ExecuteReader();
while(dataReader.Read())
{
curshare = dataReader["share"].ToString();
if(curshare!="all")
{
if(curshare=="") {continue;}
if(!getInGroup(myid,curshare)) {continue;}
}
retuStr+="[";
curid=(int)dataReader["id"];
curpid=(int)dataReader["pid"];
curqid=dataReader["qid"].ToString();
curdir=dataReader["dir"].ToString();
currow=(int)dataReader["row"];
curname = dataReader["name"].ToString();
curimg=dataReader["Img"].ToString();
cururl=dataReader["url"].ToString();
curtarget=dataReader["target"].ToString();
//curshare =dataReader["share"].ToString();
retuStr+="\'"+table+"\',\'"+userid+"\',\'"+curid+"\',\'"+curqid+"\',\'"+curname+"\',\'"+curdir+"\',\'"+curimg+"\',\'"+cururl+"\',\'"+curtarget+"\',\'"+curshare+"\'],";
}
}
catch(Exception err)
{
return "[]";
}
finally
{
if (dataReader != null)
dataReader.Close();
if (sqlConnection.State == ConnectionState.Open)
sqlConnection.Close();
}
if (retuStr.Trim().EndsWith(",")) retuStr = retuStr.Substring(0,retuStr.Length-1) ;
retuStr = "[" + retuStr + "]";
return retuStr;
}
|
yyseek,thank you !
有问题还要请你帮忙的哦 |
AJAX哪里用到,JS中从哪里调getLayerTree1呢?困惑啊,楼主 |
yyseek,指点下啊! |
getLayerTree1是服务端的函数, js当然不能直接调用。
我帖这个函数的意思是不管你用jsp,asp,php也好,只要服务器返回这样格式的一个数组(数组格式下面具体说明),客户端的js就会自动处理显示成树。
数组格式:[table,userid,id,qid,name,dir,img,url,target,share]
table:表名 本例为 'Tree'
userid:用户的id int
id:树节点id int
qid:引用的id
name:节点名称
dir:是否为目录接点
img:树接点图标的url
url:点击树接点后链接的url
target:打开url的目标窗口
share:是否共享该树节点
|
那怎么测试啊!
/im/im.aspx能不能发给我啊 |
兄弟!是不舍不得啊 |
getLayerTree1中getInGroup()呢 |
|