ajax+asp无限级分类树型结构的代码

复制代码 代码如下:

<%

'数据库字段为类属性,添加、删除、修改、操作检查等函数为类的方法

Class Cls_Leibie

    Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量)

    Private rs,sql,ErrorStr

Private Sub Class_Initialize()

        ErrorStr=""                    '初始化错误信息为空

    End Sub

Private Sub Class_Terminate()    '销毁类时关闭数据库连接

        If IsObject(Conn) Then 

            Conn.Close

            Set Conn = Nothing

        End If

    End Sub

'*******************设置各个属性******************************************************    

    Public Property Let ClassID(str)    '获取类别ID(主键)

        nClassID=str

        call ClassProperty()            '获取类别ID时调用此函数读出类的所有属性

    End Property

    Public Property Let ClassName(str)    '获取类别名称

        sClassName=str

    End Property

Public Property Get ClassName

        ClassName=sClassName

    End Property

Public Property Let ParentID(str)    '获取类别父ID

        nParentID=str

    End Property

Public Property Get ParentID

        ParentID=nParentID

    End Property

Public Property Let ParentPath(str)    '获取父路径ID

        sParentPath=str

    End Property

Public Property Get ParentPath

        ParentPath=sParentPath

    End Property

Public Property Let Depth(str)        '获取类别深度

        nDepth=str

    End Property

Public Property Get Depth

        Depth=nDepth

    End Property

Public Property Let RootID(str)        '获取类别根ID

        nRootID=str

    End Property

Public Property Get RootID

        RootID=nRootID

    End Property

Public Property Let Child(str)        '子类别个数

        nChild=str

    End Property

Public Property Get Child

        Child=nChild

    End Property

Public Property Let OrderID(str)    '排序ID

        nOrderID=str

    End Property

Public Property Get OrderID

        OrderID=nOrderID

    End Property

    Public Property Let FilePath(str)    '类别文件根目录(生成静态文件路径,小站奇人异事网([url]www.guaishi.org[/url])用的是生成静态,故设置此字段)

        sFilePath=str

    End Property

Public Property Get FilePath

        FilePath=sFilePath

    End Property    

'******************************************************************************

Private Sub ClassProperty()            '读取类的所有属性

        sql="select * from ArticleClass where ClassID="& nClassID

        set rs=conn.execute(sql)

        if not rs.eof then

            sClassName=trim(rs("ClassName"))

            nParentID=trim(rs("ParentID"))

            sParentPath=trim(rs("ParentPath"))

            nDepth=trim(rs("Depth"))

            nRootID=trim(rs("RootID"))

            nChild=trim(rs("Child"))

            nOrderID=trim(rs("OrderID"))

            sFilePath=trim(rs("FilePath"))

        end if

        set rs=nothing        

    End Sub

Public Function FAddCheck()        '类别添加检查函数,结果为0表示通过检查,为1表示有错误发生,有错误发生时退出函数,将错误信息写入错误变量ErrorStr

        dim temprs

        FAddCheck=0

        if sClassName="" then        '类名为空

            FAddCheck=1

            ErrorStr="类名不能为空!"

            exit Function

        else            

            if nParentID="" then        '父id为空

                FAddCheck=1

                ErrorStr="父id不能为空!"

                exit Function

            else

                if nParentID<>0 then

                    set temprs=conn.execute("select ClassID From ArticleClass where ClassID=" & nParentID)        '父类别不存在

                    if temprs.eof then

                        FAddCheck=1

                        ErrorStr="所属类别不存在或已经被删除!"

                        exit Function

                    else

                        sql="select ClassID from ArticleClass where ClassName='"& sClassName &"' and ParentID="& nParentID        '类名重复

                        set rs=conn.execute(sql)

                        if not rs.eof then

                            FAddCheck=1

                            ErrorStr="类名重复!"

                            exit Function

                        end if

                        set rs=nothing

                    end if

                    set temprs=nothing

                else

                    sql="select ClassID from ArticleClass where ClassName='"& sClassName &"' and ParentID="& nParentID        '类名重复

                    set rs=conn.execute(sql)

                    if not rs.eof then

                        FAddCheck=1

                        ErrorStr="类名重复!"

                        exit Function

                    end if

                    set rs=nothing    

                end if

            end if

        end if

    End Function

Public Sub SAdd()

        dim maxClassID,maxRootID

        set rs = conn.execute("select Max(ClassID) from ArticleClass")        '查找当前数据库中最大的类别id,如果没有数据则设置为0,要插入的类别id为当前最大id加1

        maxClassID=rs(0)

        if isnull(maxClassID) then

            maxClassID=0

        end if

        set rs=nothing

        nClassID=maxClassID+1

        set rs=conn.execute("select max(rootid) From ArticleClass")        '查找当前数据库中最大的根id,如果没有数据则设置为0,要插入的根id为当前最大根id加1

        maxRootID=rs(0)

        if isnull(maxRootID) then

            maxRootID=0

        end if

        nRootID=maxRootID+1

        set rs=conn.execute("select RootID,Depth,ParentPath,Child,OrderID From ArticleClass where ClassID=" & nParentID)    '查找父类别相应信息

        if not rs.eof then

            nRootID=trim(rs("Rootid"))        '根id与父类别根id相同

            sParentPath=trim(rs("ParentPath"))& "," &nParentID    

            if cint(trim(nParentID))>0 then            '父id大于0则有父类别,故要插入的类别的深度父类别的深度加1,父id不大于0则当前要插入的类别为根类别,则深度为0

                nDepth=cint(trim(rs("Depth")))+1

            else

                nDepth=0

            end if

            if cint(trim(rs("Child")))>0 then

                dim rsPrevOrderID

                '得到与本栏目同级的最后一个栏目的OrderID

                set rsPrevOrderID=conn.execute("select Max(OrderID) From ArticleClass where ParentID=" & ParentID)

                prevOrderID=rsPrevOrderID(0)

                '得到同一父栏目但比本栏目级数大的子栏目的最大OrderID,如果比前一个值大,则改用这个值。

                set rsPrevOrderID=conn.execute("select Max(OrderID) From ArticleClass where ParentPath like '" & ParentPath & ",%'")

                if (not(rsPrevOrderID.bof and rsPrevOrderID.eof)) then

                    if not IsNull(rsPrevOrderID(0))  then

                         if rsPrevOrderID(0)>prevOrderID then

                            prevOrderID=rsPrevOrderID(0)

                        end if

                    end if

                end if

                set rsPrevOrderID=nothing

            end if

            nOrderID=prevOrderID+1

        else

            nOrderID=0

            sParentPath="0"

            nDepth=0

        end if

        set rs=nothing

        nChild=0

        sql="insert into ArticleClass (ClassID,ClassName,ParentID,ParentPath,Depth,RootID,Child,OrderID,FilePath) values ("& nClassID &",'"& sClassName &"',"& nParentID &",'"& sParentPath &"',"& nDepth &","& nRootID &","& nChild &","& nOrderID &",'"& sFilePath &"')"

        conn.execute(sql)

        if ParentID>0 then

        '更新其父类的子栏目数

            conn.execute("update ArticleClass set child=child+1 where ClassID="& nParentID)

'更新该栏目排序以及大于本需要和同在本分类下的栏目排序序号

            if prevOrderID<>"" then

                conn.execute("update ArticleClass set OrderID=OrderID+1 where rootid=" & nRootid & " and OrderID>"& prevOrderID &" and ClassID<>"& nClassID)

            end if

        end if

    End Sub

    Public Function FEditCheck()    '类别修改检查函数,结果为0表示通过检查,为1表示有错误发生,有错误发生时退出函数,将错误信息写入错误变量ErrorStr

        dim temprs

        FEditCheck=0

        if nClassID="" then                    '类别id为空

            FEditCheck=1

            ErrorStr="类别id不能为空!"

            exit Function

        else                

            if sClassName="" then            '类名为空

                FEditCheck=1

                ErrorStr="类名不能为空!"

                exit Function

            else

                if nParentID<>0 then

                    set temprs=conn.execute("select ClassID From ArticleClass where ClassID=" & nParentID)        '父类别不存在

                    if temprs.eof then

                        FAddCheck=1

                        ErrorStr="所属类别不存在或已经被删除!"

                        exit Function

                    else    

                        set rs=conn.execute("select ClassID from ArticleClass where ClassName='"& sClassName &"' and ClassID<>"& nClassID &"and ParentID="& nParentID)    

                        if not rs.eof then                '类名重复

                            FEditCheck=1

                            ErrorStr="类名重复!"

                            exit Function

                        end if

                        set rs=nothing

                    end if

                    set temprs=nothing

                end if

            end if

        end if

    End Function

Public Sub SEdit()        '类别修改

        sql="update ArticleClass set ClassName='"& sClassName &"',FilePath='"& sFilePath &"' where ClassID="& nClassID

        conn.execute(sql)

    End Sub

Public Function FDeleteCheck()    '类别删除检查函数,结果为0表示通过检查,为1表示有错误发生,有错误发生时退出函数,将错误信息写入错误变量ErrorStr

        FDeleteCheck=0                '这里删除没有写级联删除文章部分的代码,删除时应该级联删除

        if nClassID="" then

            FDeleteCheck=1

            ErrorStr="要删除的类别id不能为空!"

            exit Function

        else

            set rs=conn.execute("select Child from ArticleClass where ClassID="& nClassID)

            if rs.bof and rs.eof then

                FDeleteCheck=1

                ErrorStr="类别不存在或者已经被删除!"

                exit Function

            else

                if trim(rs("Child"))>0 then

                    FDeleteCheck=1

                    ErrorStr="该类别含有子类别,请删除其子类别后再进行删除本类别的操作!"

                    exit Function

                end if

            end if

        end if

    End Function

Public Sub SDelete()

        if nDepth>0 then            '修改父id孩子数

            conn.execute("update ArticleClass set child=child-1 where child>0 and ClassID=" & nParentID)

        end if

        sql="delete from ArticleClass where ClassID="& nClassID

        conn.execute(sql)

    End Sub

Public Function FErrStr()

        FErrStr=ErrorStr    

    End Function

End Class

%>

核心js代码 

复制代码 代码如下:

var xmlHttp; //定义一个全局变量

var currentID=1;//设置当前选中ID,如果此ID不存在则会发生js错误

//类别显示主函数

//cid--子类别所在层id

//id --类别id

//pid--[+]和[-]图标id

//fid--类别图标id

function DivDisplay(cid,id,pid,fid)

{

    if (GetId(cid).style.display=='')    //子类别不显示时图标显示控制

    {

        GetId(cid).style.display='none';

        GetId(pid).src = 'images/closed.gif';

        GetId(fid).src = 'images/folder.gif';

    }

    else        //展开子类别时的操作

    {

        GetId(cid).style.display='';

        GetId(pid).src = 'images/opened.gif';

        GetId(fid).src = 'images/folderopen.gif';

        if (GetId(cid).innerHTML==''||GetId(cid).innerHTML=='正在提交数据...')

        {

            GetId(cid).innerHTML='';

            ShowChild(cid,id);        //调用显示子类别函数

        }

    }

}

//与上一个函数作用相同,只作用在最后一个类别

function DivDisplay2(cid,id,pid,fid)

{

    if (GetId(cid).style.display=='')

    {

        GetId(cid).style.display='none';

        GetId(pid).src = 'images/lastclosed.gif';

        GetId(fid).src = 'images/folder.gif';

    }

    else

    {

        GetId(cid).style.display='';

        GetId(pid).src = 'images/lastopen.gif';

        GetId(fid).src = 'images/folderopen.gif';

        if (GetId(cid).innerHTML==''||GetId(cid).innerHTML=='正在提交数据...')

        {

            GetId(cid).innerHTML='';

            ShowChild(cid,id);

        }

    }

}

//类别添加函数

//id--类别id

function ClassAdd(id){

if (GetId("p"+id).src.indexOf("last")>0){    //最后一个类别时的添加操作

   &

时间: 2024-09-21 01:02:35

ajax+asp无限级分类树型结构的代码的相关文章

ajax+asp无限级分类树型结构的代码_AJAX相关

复制代码 代码如下: <% '数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法 Class Cls_Leibie     Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量)     Private rs,sql,ErrorStr     Private Sub Class_Initialize()   

带数据库的ajax+asp无限级分类树型结构,好东西别错过!

跟大家分享一下自己写的一个树型结构,参考了动力文章的无限极分类树形结构数据库,看演示吧http://asptree.guaishi.org/aspajax/ 下面是核心类代码,注释是后来加的,可能有些写的不太正确 复制内容到剪贴板 代码: <%'数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法Class Cls_Leibie    Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrd

ajax+asp无限级分类树型结构(带数据库)_应用技巧

IE测试通过,FF有点小BUG Cls_Leibie.asp 复制代码 代码如下: <% '数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法 Class Cls_Leibie Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量) Private rs,sql,ErrorStr Private Sub Cl

ajax+asp无限级分类树型结构(带数据库)

IE测试通过,FF有点小BUG Cls_Leibie.asp 复制代码 代码如下: <% '数据库字段为类属性,添加.删除.修改.操作检查等函数为类的方法 Class Cls_Leibie Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath '定义私有变量(类的属性,即数据库字段对应的变量) Private rs,sql,ErrorStr Private Sub Cl

无限级分类树型节点演示

<!-- 看到论坛里有人发了一个树型菜单,需者甚众,看了一下演示,似乎不难实现,趁着周六没事,便也写了一个出来理论上支持无限级分类,发上来与大家分享!!'-------------------------- 名称:无限级分类树型菜单演示 作者:y0h最后更新:2004-09-19 22:40 环境:ASP+ACCESS '//----------List表定义 'Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url

创建无限极分类树型结构的简单方法

先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写.) public function cate_display() { $cate = D('Cate'); $field = array('id','cate_name','p

ASP实现的无限级会员树型结构

树型结构 *********************************'* 函数名称:Function nodeUser(parent)'* 函数参数:parent'* 参数类型 :string'* 返回值类型:--'* 函数功能:递归显示用户树型结构'* 作者:范维肖'* 时间:2004-5-7'*********************************Function nodeUser(parent) '检索其分支 sql = "select name from [user]

php+mysql实现无限级分类 | 树型显示分类关系

    无限级分类,主要是通过储存上级分类的id以及分类路径来实现.由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的一个树状显示函数,有什么不妥的地方希望大家能指出.     表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分类祖先的集合),isdir判断是否是目录(1为是,0为否).     显示函数: //$count为分类等级 sort_list($st

php+mysql实现无限级分类 | 树型显示分类关系_php技巧

无限级分类,主要是通过储存上级分类的id以及分类路径来实现.由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现.  无限级分类,主要是通过储存上级分类的id以及分类路径来实现.由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的一个树状显示函数,有什么不妥的地方希望大家能指出.  表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分类祖