ASP 无限级分类实现

ASP递归无限级分类函数


代码如下:

<%
'函数:getCatagory
'功能:获得分类列表
'参数:cat_arr -> 分类数组(Rscordset:id:分类编号,pid:上级分类,classname:分类名称,childs:子分类)
' 按此输出些sql语句,用getRows获取得到的数据
' cat_pid -> 上级分类编号
' cat_childs -> 下级分类编号
' cat_select -> 选择的分类
' cat_dir -> 分类级别
'返回:返回分类列表(Option)

dim conn,cmd,rs,cat_arr
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("db1.mdb")
cmd.ActiveConnection = conn
cmd.CommandText = "Select * from cate order by id desc"
Set rs = cmd.Execute
cat_arr = rs.GetRows()
Set rs = Nothing
Set cmd = Nothing
Set conn = Nothing

getCatagory cat_arr,0,"","","","{$cat.dir}├─<a href=""?id={$cat.id}"" title=""分类级别:{$cat.dir} 分类编号:{$cat.id} 分类上级编号:{$cat.pid} 分类名称:{$cat.name} 分类子分类:{$cat.childs}"">{$cat.name} </a><br />"&vbcrlf

function getCatagory(byval cat_arr,byval cat_pid,byval cat_childs,byval cat_select,byval cat_dir,byval format)
dim i,tmp
if isArray(cat_arr) then
for i=0 to ubound(cat_arr,2)
if cat_arr(1,i) = cat_pid and instr("," & cat_childs & ",","," & cat_arr(0,i) & ",") = 0 then
tmp = format
if instr(tmp,"{$cat.dir}")>0 then tmp = replace(tmp,"{$cat.dir}",cat_dir)
if instr(tmp,"{$cat.id}")>0 then tmp = replace(tmp,"{$cat.id}",cat_arr(0,i))
if instr(tmp,"{$cat.pid}")>0 then tmp = replace(tmp,"{$cat.pid}",cat_arr(1,i))
if instr(tmp,"{$cat.name}")>0 then tmp = replace(tmp,"{$cat.name}",cat_arr(2,i))
if instr(tmp,"{$cat.childs}")>0 then tmp = replace(tmp,"{$cat.childs}",cat_arr(3,i))
response.write tmp
call getCatagory(cat_arr,cat_arr(0,i),cat_childs,cat_select,cat_dir & "│",format)
end if
next
end if
end function
%>

转载的一个递归函数,比较典型的应用,没有特别算法,目前我们一般常见的无限级分类函数均大同小异。简单整理了一下,包括示例打包getCatagory.rar

*大类1
└二级小类1
└三级小类1
└四级小类1
└五级小类1
*大类2
└二级小类2
*大类3

数据库说明:数据库db.mdb,classTable表的结构:classid类别ID(自动增长) parentid 父级ID 默认为0 (0代表最高级) classname类别名,classdepth是为了记录类别的级数 ———————————————-
| classid| classname| parentid | classdepth |
———————————————-

主要代码:

代码如下:

//先取出最高级(parentid=0)的分类

<%
set conn=server.createobject("adodb.connection")
conn.open "Provider=Microsoft.Jet.Oledb.4.0;data source="&server.MapPath("db.mdb")
set rs1=server.createobject("adodb.recordset")
sql1="select * from Classtable where parentid=0 order by classid"
rs1.open sql1,conn,1,1
if rs1.eof or rs1.bof then
response.write"还没分类!"
else
while not rs1.eof
id1=rs1("classid")
name1=rs1("classname")

response.write "*<a href='class.asp?id="&id1&"&name="&name1&"‘>"&name1&"</a><br>"
parentid1=rs1("parentid")
call reclass(id1)
rs1.movenext
wend
end if
rs1.close
set rs1=nothing

sub reclass(id)
‘递归调用函数,生成一个类别代码
set rs=server.createobject("adodb.recordset")
sql="select * from classtable where parentid="&id
rs.open sql,conn,1,1
i=1
while not rs.eof
id0=rs("classid")
classname0=rs("classname")
parentid0=rs("parentid")
classdepth0=rs("classdepth")
brstr=""
for j=1 to classdepth0
brstr=" "&brstr
next
response.write(brstr&"└<a href='class.asp?id="&id0&"&name="&classname0&"‘>"&classname0&"</a><br>")
call reclass(id0)

rs.movenext
i=i+1
wend
rs.close
set rs=nothing
end sub

if request("a")="add" then
call add
end if
if request("name")<>"" then
%>
<table width="80%" align="center" cellpadding="0″ cellspacing="0″>
<form action="class.asp?a=add&id=<%=request("id")%>" method="post">
<tr>
<td> </td>
<td>在<font color="#FF0000″><%=request("name")%></font>添加小类</td>
</tr>
<tr>
<td>类别名:</td>
<td><input name="classname" type="text" id="classname"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="提交"></td>
</tr>
</form>
</table>
<%end if
sub add '添加类别
id=request("id")
classname=request("classname")
set rs=server.createobject("adodb.recordset")
rs.open "select parentid,classdepth from classtable where classid="&id,conn,1,1
parentid=rs(0)
classdepth=rs(1)+1
rs.close
set rs=nothing
sql="INSERT INTO classtable (classname,parentid,classdepth) values ('"&classname&"‘,"&id&","&classdepth&")"
conn.execute sql
response.Write"<script>alert('添加成功!');location.href='class.asp';</script>"
end sub
%>

(0)

相关推荐

  • php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释

    复制代码 代码如下: function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id])) { return $cat_options[$spec_cat_id]; } /* 初始化关键参数: $level:当前子节点深度 $last_cat_id:当前父节点ID $options:带有缩进级别的数组 $cat_id_array:沿同一路径的

  • asp.net(C#)生成无限级别菜单

    首先,创建数据库表的代码如下: 无限级树的数据库表代码 复制代码 代码如下: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[work_sysmenu]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[work_sysmenu] GO CREATE TABLE [dbo].[work_sysmenu] ( [flowid] [

  • PHP+JS无限级可伸缩菜单详解(简单易懂)

    发了几天基础的东西,今天来点稍微难的,一般在CMS系统后台中都要用到的类别管理部分的精华--无限级分类菜单,对于新手来说,这个可能有一定难度,但是今天听完我细细道来,相信以后大家就都会弄这东东了.怎么实现呢?大家先做个数据库出来先: --  -- 表的结构 `cr_columninfo` --  复制代码 代码如下: CREATE TABLE `cr_columninfo` (    `columnid` int(4) NOT NULL auto_increment,    `columnfat

  • php 无限级数据JSON格式及JS解析

    Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~) 复制代码 代码如下: //--查询用户下线信息,返回JSON,用于flash if(!empty($_GET['action'])&&!empty($_GET['invite'])){ //固定参数请求才会返回信息 if($_GET['action']=='getinfo'&&$_GET['invite']==1){ //数据实体,一个实体类 class UcInvi

  • asp飞飞无限级分类v1.0 Asp+sql+存储过程+ajax提供下载

    本程序由 飞飞Asp乐园 ffasp.com 开发本程序官方下载网址http://www.ffasp.com/content.asp?newsid=945飞飞As!p技术乐园***能说明: 基于AJAX树状目录显示  支持灵活的 目录添加.删除.修改.排序.栏目备注.栏目移动[向上] 支持 栏目选择 使用说明: 默认首页: index.asp 可以进行 目录添加.删除.修改.排序.栏目备注.栏目移动[向上] 栏目选择测试页面:columnshow.asp 栏目选择函数调用说明: 需要引用函数页:

  • php 无限级 SelectTree 类

    复制代码 代码如下: /* author: nick date: 2009.05.17 功能:生成SeletTree 属性: $result 结果集 $id_field 自身id字段 $parent_field 父类id字段 $option_text 选项显示名称 $select_name 下拉菜单的名称 $elected 默认选中 $no_top 是否需要顶层选项 $level 层深度 $parent_id 同层中的id */ class SelectTree{ public $result;

  • php实现无限级分类实现代码(递归方法)

    开始以为这样的功能似乎很难,之前也做过一个百科的东西,其中也涉及到了分类的功能,不过不是无限级的分类,而是简单的实现了固定的三级分类,当时是自己设计的,想在想起来实现方法太土了,其实三级分类也只是无限级分类的一种特殊情况而已嘛.经过一段时间考虑,已经有了一些眉目,到网上一查,原来这样的东西铺天盖地,呵呵.其实无限级下拉列表功能是很简单的,无非就是用一个递归算法就好啦. 首先要设计数据库,需要建一个表,里面存储分类信息,至少需要3个字段,第一个是主键(ID),第二个是父级分类ID(parentid

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

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

  • Asp.net 无限级分类实例代码

    在网上找了很久也没有找到例子,没办法了,想偷懒也偷不成了,还是自己老老实实的写一个吧.不多废话,下面请看我做的详细方法. 1.无限级分类肯定要数据库支持啦,用户可以动态添加他们的分类嘛,下面是数据库的结构: 数据库主要有三个字段,这是最基本的了.第一个是主键,第二个是分类的名称了,第三个是父级目录id号. 2.成品的效果图:(大家最关心的是不是这个啊?看看是什么样子再看程序怎么吧) 看!!就长这个模样啦,这个层次关系就是上面那个数据所显示的结果.怎么样?还行吧... 3.最后就是提供程序咯,程序

  • asp实现无限级分类的方法js版

    MenuArr=new Array()MenuLenArr=new Array()SubMenuArr=new Array()MenuIdArr=new Array()MenuArr[1]="<%call top11%>" //洲名|||...MenuArr[2]="<%call top1%>" //洲名###国名|||...MenuIdArr[1]="zhou"MenuIdArr[2]="author"

  • 把无限级分类生成数组

    把无限级分类循环出来确实是一件头疼的事情. 比如,我们要循环出一个SELECT,或一个TABLE,要写一大堆判断. 有没好点的办法呢? 我的做法是生成数组,可以重复调用,直接循环数组就行了. 为了方便,我把它写成了类. class.asp 返回所有分类的数组,并按顺序排列 有4个属性: 复制代码 代码如下: set aa=new classlist  aa.id="id"//编号的名称  aa.classname="classname"//分类名称  aa.pid=

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

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

随机推荐