蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 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()呢




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com