ASP中无限分类的基于数组实现。

博客给出一个较完整的ASP与Access数据库操作的Demo,在Windows 2000 Professinal系统下调试通过。代码包含与Access创建连接、获取多维数组数据、遍历数组打印节点、取某节点父路径等操作,并展示了浏览器显示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个论题很老了。

下面大致上是个比较完整的Demo,半夜完成。(asp的Dim声明的弱类型变量确实不好调试)

Windows 2000  Professinal+ Access调试通过。

定义数据库表tTest,字段TestID, TestContent, ParentID,追加如下纪录

tTest
testIDtestContentParentID
3首10
4首20
5首30
6子113
7子123
8子1116
9子1126
10子11118
11子1146
12子1136
13子11128

代码如下:

<% Option Explicit %>
<!--#include file="./inc/conn.asp"-->
<!--#include file="./inc/strFunction.asp"-->


<%


CreateConnection(GetDBPath("./"))     '与Access创建连接

'获取多维数组数据
Dim rs
Dim strSQL
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "Select * from tTest order by testID"
Dim arrTmp()
rs.Open strSQL, conn, 1, 1
If not rs.EOF or rs.BOF Then
 Dim i
 i = 0
 ReDim arrTmp(rs.RecordCount-1, 2)
 While not rs.EOF
  arrTmp(i,0) = trim((rs("testID")))
  arrTmp(i,1) = trim((rs("testContent")))
  arrTmp(i,2)=trim((rs("ParentID")))
  i = i +1
  rs.MoveNext
 Wend 
 
End If
freeDBObject(rs)


'遍历数组,打印节点
Dim CurrentParentID, LastID, vSpace, LastParentID
vSpace ="|"
LastID = -1
LastParentID = -1
Function PrintNode(ParentID)
Dim i

 For i=0 to UBound(arrTmp, 1)
  If Cint(arrTmp(i, 2))=ParentID  Then
   
   CurrentParentID = ParentID
   '显示:相当于处理完成
   If CurrentParentID = LastID Then   '如果当前的父ID等于前一个ID说明是前一个的子节点,需要增加标识符,
    vSpace = vSpace & "--"
   Elseif CurrentParentID <> LastParentID Then  '如果当前的父ID不等于前一个ID并且此两连续节点的父节点不同,则表明不是同一层节点,需去掉一个标识符
    vSpace = Replace(vSpace , "--","",1,1)
   End If
   Response.Write vSpace&" Current ParentID:"&ParentID&",Title:  "& arrTmp(i, 1)&" ,CurrentID:"&arrTmp(i,0)&"<br>"
   LastID = Cint(arrTmp(i,0))  '当前ID值保留
   LastParentID = ParentID  '当前父节点ID保留
   PrintNode(Cint(arrTmp(i, 0)))
  End If  
 Next
End Function

'遍历数组,取某节点的父路径
Dim ParentPath
Function GetNodePath(NodeID)
Dim i, ParentID
'取当前节点的父ID
 For i=0 to UBound(arrTmp,1)
  If Cint(arrTmp(i, 0))=NodeID Then
   ParentID = Cint(arrTmp(i, 2))
   ParentPath = Cstr(ParentID) + ","+ ParentPath
   GetNodePath(ParentID)
  End If
 Next
End Function

PrintNode(3)   '打印ParentID为3的所有节点

Response.Write "<p>"

ParentPath = "11"
GetNodePath(11)

Response.Write "11"'""&" ParentPath "ParentPath  &"<br>"


freeDBObject(conn)

%>


浏览器显示如下:

| Current ParentID:3,Title: 子11 ,CurrentID:6
|-- Current ParentID:6,Title: 子111 ,CurrentID:8
|---- Current ParentID:8,Title: 子1111 ,CurrentID:10
|---- Current ParentID:8,Title: 子1112 ,CurrentID:13
|-- Current ParentID:6,Title: 子112 ,CurrentID:9
|-- Current ParentID:6,Title: 子114 ,CurrentID:11
|-- Current ParentID:6,Title: 子113 ,CurrentID:12
| Current ParentID:3,Title: 子12 ,CurrentID:7

11's ParentPath 0,3,6,11

系统支持无限级分类、采集、生成静态HTML、ajax 自定义表单 系统标签说明: 的标签结构形如(ror标签): #{…/} 或 #{…}***{/} 内嵌标签: 标签: ##.../# 如同#{…/} 在#{…/}中使用 字段值:[$$$/] 其中 … 是标签参数 ***是循环调用的模块 $$$是字段名 具体标签及说明如下: 1、#{host fieldname=hostname/} 说明: 系统参数: 网站名称: fieldname=hostname 关键字: fieldname=hostkey 虚拟目录: fieldname=hosturl 2、#{param=classname/} 说明: 访问页面的各种通用参数: 栏目名称: param=classname 文档名称: param=title URL参数: param=*** 特别说明: 当栏目类型为单页面时,调用单页面内容使用param=content 3、#{ position /} 说明:当前位置 4、#{ menu /} Top: 显示数量,默认为10 Menutype: 菜单属性,默认顶级栏目菜单 Top:顶级栏目菜单 Self:同级栏目菜单 Sun:下级栏目菜单 Typelink: 相应栏目的链接地址 5、#{clalist …/} 或 #{clalist …}***{/} 说明:部分栏目文档列表(没有分页) Top: 读取的文档数目,默认10 Titlelen: 标题显示长度,默认30 Showtitle: 鼠标悬停时是否显示完整标题,默认不显示 Orderby: 排序字段,默认id(当order为rnd时可以不设置) Order: 顺序,默认降序(升序:asc 降序:desc 随机:rnd ) Classid: 所属栏目(0和all都表示所有栏目) all:按栏目显示相应数目的文档 0: 不按栏目显示相应数目的文档 clacol: 循环块列数 artcol: 文档列表列数 clastyle: 每个循环块的样式 artstyle: 每个循环块中文档列表区域的样式 Maxlen: 各个字段的最大显示长度,默认100 Textlink: 形如:*** Typelink: 相应文档的链接地址(…) Imglink: 形如: Imgheight:图片高度 Imgwidth:图片宽度 Arttype: 文档属性 Image: 图片 Slide: 幻灯 Roll: 滚动 Common: 普通 Good: 推荐 #{clalist …/}:不用设置***,系统默认为textlink 嵌套标签:{class}…[classtext/] [classlink/]…{/class} 说明:classtext 栏目名 classlink 栏目链接 6、#{artlist …/} 或 #{artlist …}***{/} 说明:全部栏目文档列表(有分页)属性类似于clalist 没有Showclass及设置其属性的各种标签 Pagelist:分页列表 Search:搜索页使用标签,关键字自定义字段值,默认为key 7、#{art_view}***{/} 说明:文档显示页标签 可以显示文档的各个字段值,如:title,hits,content,ctime等 #{Prenext/}:显示上一篇、下一篇 8、#{pl }***{/} 9、#{book }***{/} 更多、更详细的标签自己在使用中来发现哦!~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值