来自数据库的动态菜单项

时间:2011-06-21 17:28:49

标签: asp-classic ms-access-2007

是否可以从数据库加载菜单Url和属性?

我正在构建一个包含动态新闻栏目的网站,将新的新闻项目添加到菜单中非常棒,而无需重新编辑菜单。

我正在使用Access和ASP。

2 个答案:

答案 0 :(得分:2)

是的。

您可以编写一个ASP页面来生成菜单定义文件(JS文件中包含所有“addmenu”行)。或者更确切地说,该ASP文件生成将存在于该文件中的文本,但是您将该ASP包含在主ASP文件中。

但是,如果数据不会经常更改,那么让后台程序生成一个JS文件可能仍然会更好,然后将其包含在主页面中,因为这会减少应用程序服务器上的负载(s )。

答案 1 :(得分:1)

我目前已经完成了ASP-SQL2000驱动的菜单。我从一个表和一个查询中运行它。

该表至少需要: -

ID (INT)

label (char or varchar - the text that appears on the page)
sub (BIT or Boolean - if true then it has submenus)
level (the parent link - for submenus only)
link (char or varchar - what happens when you click!)
seq (INT - to order the menus and submenus)

根菜单项的SQL或查询: -

SELECT [id],label,[level],sub,link FROM TOC where level=0 order by seq

然后: -

SELECT [id],label,[level],sub, [link] FROM TOC WHERE [level]<>0 order by [level],seq

对于子菜单..

最后ASP(oMenuRoot是ROOT菜单的记录集,oMenuSub是SUB菜单的记录集: -

<%do until oMenuRoot.eof%>
,"<%=oMenuRoot("label")%>","<%
if oMenuRoot("sub") then
response.write "show-menu=" & oMenuRoot("id")
else
response.write Application("homePage") & "?" & oMenuRoot("link")
end if
%>",,"",1<%=vbcrlf%>
<%intRoots=intRoots+1
oMenuRoot.movenext
loop

do until oMenuSub.eof
if intOldTree<>oMenuSub("level") then
blnNewTree=true
response.write "])" & vbcrlf
else
blnNewTree=false
end if
if blnNewTree then
response.write "addmenu(menu=["""
response.write oMenuSub("level")
response.write """," & vbcrlf
response.write ",,120,1,"""",style1,,""left"",effect,,,,,,,,,,,," & vbcrlf
end if
response.write ",""" & oMenuSub("label") & ""","""
if oMenuSub("sub") then
response.write "show-menu=" & oMenuSub("id")
else
response.write Application("homePage") & "?" & oMenuSub("link")
end if
response.write """,,,1" & vbcrlf
intOldTree=oMenuSub("level")
oMenuSub.movenext
loop
response.write "])" & vbcrlf
%>

这是草稿工作模型,但没有问题,您可以通过使用一个SQL查询并在ASP标记内写入所有输出来改进。