使用ASP结合数据库实现不限级数的弹出菜单
类别: ASP教程
<!-- #include virtual=\'Include/database.asp\' -->
<%
set rs=Server.CreateObject("ADODB.RecordSet")
sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE (parent_id = (SELECT id FROM enter_individual WHERE menu_flag = \'root\' )) " \'查询得到根节点
rs.Open sql,conn,1,1
Response.Write "<table width=100% border=0 cellspacing=1 cellpadding=0 align=center><tr bgcolor=#3399CC valign=bottom align=center>"
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
widd=780/sumnum \'从一级子菜单数目判断弹出菜单x坐标的递增像素
dim i
i=0
defaultbgcolor="#3399cc" \'指定默认底色
defaultcolor="#ffffff" \'指定默认字体颜色
defaultlink="#" \'指定默认链接
posit_x=0 \'x位置
flag=1 \'标志,作为菜单弹出方向 1表示向右,0表示向左
\'Response.Write myArray(4,6)
while i Response.Write "<td height=20 bgcolor="&myArray(2,i)&" width="&widd&"><a href="&myArray(1,i)&" onmouseover=java script:a"&myArray(4,i)&".style.display=\'block\' onmouseout=java script:a"&myArray(4,i)&".style.display=\'none\' ><font color="&myArray(3,i)&" >"&myArray(0,i)&"</a></td>"
\'-----------------------------------------------
i=i+1
Wend
Response.Write "</tr></table>"
i=0
while i posit_y=100 \'y位置回到原位
If i>=(sumnum/2) Then \'如果菜单进入右半部分,则弹出转向
flag=0
End If
\'调用GetSubMenu 函数 设置该项一级菜单的下级菜单,以myArray(4,i) 即菜单id作为下级菜单所在div 的id
GetSubMenu myArray(4,i),posit_x,posit_y
posit_x=posit_x+widd \'下一个一级菜单的子菜单的 x坐标值增加一个单位
i=i+1
Wend
\'使用递规算法的到下级菜单的函数
\'parent_id 父 id; posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;
Function GetSubMenu(parent_id,posit_x,posit_y)
dim myArray
dim sumnum
dim i
\'查询子菜单的下级菜单
sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE parent_id = "&parent_id&" AND user_id = \'"&userid&"\'"
rs.Open sql,conn,1,1
\'如果下级菜单不存在,则层数减一 ,关闭数据库链接,建立一个以父id为div id的空层,然后返回
If rs.EOF=true Then
level=level-1
rs.Close ()
\'Response.Write parent_id
Response.Write "<div id=\'a"&parent_id&"\' style=\'position: absolute; top: 4; left: -1; display: none; width: 0; height: 0\'></div>"
Else
\'如果存在取到数据库数据,并调用SetSubMenu显示菜单
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
SetSubMenu myArray,sumnum,parent_id,posit_x,posit_y
\'对数据进行循环,递规调用GetSubMenu
i=0
while i<sumnum
posit_y=posit_y*1+20 \'递规一次posit_y 加一个单位,
if level=0 Then \'如果级数减到0 则回到1
level=1
End If
\'If flag=1 Then
\'GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
\'End If
If flag=0 Then
GetSubMenu myArray(4,i),posit_x-level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
Else
GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
End If
i=i+1
Wend
End If
End Function
\'设置子菜单函数
\'myArray 菜单数据 ,sumnum 数组大小 ,parent_id 层的id ;
\'posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;
Function SetSubMenu (myArray,sumnum,parent_id,posit_x,posit_y)
dim i
parent_id="a"&parent_id \'父菜单id前面加上a 作为层的id
hh=sumnum*20 \'数组大小乘以20作为层的高度
Response.Write "<DIV onmouseover=java script:"&parent_id&".style.display=\'block\' onmouseout=java script:"&parent_id&".style.display=\'none\' ID=\'"&parent_id&"\' STYLE=\'position: absolute; top:"&posit_y&"; left:"&posit_x&"; height:"&hh*1&"; width: "&widd&"; display:none;vertical-align: top\'><table width=100% border=0 cellspacing=1 cellpadding=0 >"
i=0
While i
myArray(0,i)=Trim(myArray(0,i))
myArray(1,i)=Trim(myArray(1,i))
myArray(2,i)=Trim(myArray(2,i))
myArray(3,i)=Trim(myArray(3,i))
If myArray(2,i)="" Then
myArray(2,i)=defaultbgcolor
End If
If myArray(3,i)="" Then
myArray(3,i)=defaultcolor
End If
If myArray(1,i)="" Then
myArray(1,i)=defaultlink
End If
Response.Write "<tr align=center ><td width=100% height=20 bgcolor="&myArray(2,i)&" onmouseover=java script:"&parent_id&".style.display=\'block\';a"&myArray(4,i)&".style.display=\'block\' onmouseout=java script:a"&myArray(4,i)&".style.display=\'none\'><a href=\'"&myArray(1,i)&"\'><font color="&myArray(3,i)&" >"&myArray(0,i)&"</font></a></td></tr>"
i=i+1
Wend
Response.Write " </table> </DIV>"
End Function
Set rs=nothing
conn.Close ()
Set conn=nothing
%>
<%
set rs=Server.CreateObject("ADODB.RecordSet")
sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE (parent_id = (SELECT id FROM enter_individual WHERE menu_flag = \'root\' )) " \'查询得到根节点
rs.Open sql,conn,1,1
Response.Write "<table width=100% border=0 cellspacing=1 cellpadding=0 align=center><tr bgcolor=#3399CC valign=bottom align=center>"
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
widd=780/sumnum \'从一级子菜单数目判断弹出菜单x坐标的递增像素
dim i
i=0
defaultbgcolor="#3399cc" \'指定默认底色
defaultcolor="#ffffff" \'指定默认字体颜色
defaultlink="#" \'指定默认链接
posit_x=0 \'x位置
flag=1 \'标志,作为菜单弹出方向 1表示向右,0表示向左
\'Response.Write myArray(4,6)
while i Response.Write "<td height=20 bgcolor="&myArray(2,i)&" width="&widd&"><a href="&myArray(1,i)&" onmouseover=java script:a"&myArray(4,i)&".style.display=\'block\' onmouseout=java script:a"&myArray(4,i)&".style.display=\'none\' ><font color="&myArray(3,i)&" >"&myArray(0,i)&"</a></td>"
\'-----------------------------------------------
i=i+1
Wend
Response.Write "</tr></table>"
i=0
while i posit_y=100 \'y位置回到原位
If i>=(sumnum/2) Then \'如果菜单进入右半部分,则弹出转向
flag=0
End If
\'调用GetSubMenu 函数 设置该项一级菜单的下级菜单,以myArray(4,i) 即菜单id作为下级菜单所在div 的id
GetSubMenu myArray(4,i),posit_x,posit_y
posit_x=posit_x+widd \'下一个一级菜单的子菜单的 x坐标值增加一个单位
i=i+1
Wend
\'使用递规算法的到下级菜单的函数
\'parent_id 父 id; posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;
Function GetSubMenu(parent_id,posit_x,posit_y)
dim myArray
dim sumnum
dim i
\'查询子菜单的下级菜单
sql="SELECT menu_name, menu_link, menu_bgcolor, menu_color,id FROM enter_individual WHERE parent_id = "&parent_id&" AND user_id = \'"&userid&"\'"
rs.Open sql,conn,1,1
\'如果下级菜单不存在,则层数减一 ,关闭数据库链接,建立一个以父id为div id的空层,然后返回
If rs.EOF=true Then
level=level-1
rs.Close ()
\'Response.Write parent_id
Response.Write "<div id=\'a"&parent_id&"\' style=\'position: absolute; top: 4; left: -1; display: none; width: 0; height: 0\'></div>"
Else
\'如果存在取到数据库数据,并调用SetSubMenu显示菜单
sumnum=rs.RecordCount
myArray=rs.GetRows()
rs.Close ()
SetSubMenu myArray,sumnum,parent_id,posit_x,posit_y
\'对数据进行循环,递规调用GetSubMenu
i=0
while i<sumnum
posit_y=posit_y*1+20 \'递规一次posit_y 加一个单位,
if level=0 Then \'如果级数减到0 则回到1
level=1
End If
\'If flag=1 Then
\'GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
\'End If
If flag=0 Then
GetSubMenu myArray(4,i),posit_x-level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
Else
GetSubMenu myArray(4,i),posit_x+level*widd,posit_y-level*20 \'递规调用GetSubMenu x,y坐标延伸 level 个单位
End If
i=i+1
Wend
End If
End Function
\'设置子菜单函数
\'myArray 菜单数据 ,sumnum 数组大小 ,parent_id 层的id ;
\'posit_x 弹出层的左边位置; posit_y 弹出层的离上面位置;
Function SetSubMenu (myArray,sumnum,parent_id,posit_x,posit_y)
dim i
parent_id="a"&parent_id \'父菜单id前面加上a 作为层的id
hh=sumnum*20 \'数组大小乘以20作为层的高度
Response.Write "<DIV onmouseover=java script:"&parent_id&".style.display=\'block\' onmouseout=java script:"&parent_id&".style.display=\'none\' ID=\'"&parent_id&"\' STYLE=\'position: absolute; top:"&posit_y&"; left:"&posit_x&"; height:"&hh*1&"; width: "&widd&"; display:none;vertical-align: top\'><table width=100% border=0 cellspacing=1 cellpadding=0 >"
i=0
While i
myArray(0,i)=Trim(myArray(0,i))
myArray(1,i)=Trim(myArray(1,i))
myArray(2,i)=Trim(myArray(2,i))
myArray(3,i)=Trim(myArray(3,i))
If myArray(2,i)="" Then
myArray(2,i)=defaultbgcolor
End If
If myArray(3,i)="" Then
myArray(3,i)=defaultcolor
End If
If myArray(1,i)="" Then
myArray(1,i)=defaultlink
End If
Response.Write "<tr align=center ><td width=100% height=20 bgcolor="&myArray(2,i)&" onmouseover=java script:"&parent_id&".style.display=\'block\';a"&myArray(4,i)&".style.display=\'block\' onmouseout=java script:a"&myArray(4,i)&".style.display=\'none\'><a href=\'"&myArray(1,i)&"\'><font color="&myArray(3,i)&" >"&myArray(0,i)&"</font></a></td></tr>"
i=i+1
Wend
Response.Write " </table> </DIV>"
End Function
Set rs=nothing
conn.Close ()
Set conn=nothing
%>
- 上一篇: ASP中处理#INCLUDE
- 下一篇: ASP/ASP.NET下,中文文件名的处理攻略
-= 资 源 教 程 =-
文 章 搜 索