我对其他人如何处理网站导航感兴趣。不是造型或可用性部分,而是生成部分。大多数网站都有某种“导航树”,它以一个或多个菜单级别的形式显示 - 以什么形式保存和处理这棵树?最简单的解决方案是静态菜单模板,如下所示:
<ul id="menu">
<li><a href="…">One</a></li>
<li><a href="…">Two</a></li>
<li><a href="…">Three</a></li>
</ul>
但这不是很灵活。您不能简单地在菜单中标记当前页面,并且根据当前页面,没有简单的方法来显示或隐藏菜单树的一部分。 (或者是吗?)
我想出了一个导航树,如下所示:
- title: Fruits nodes: - title: Apples - title: Oranges - title: Bananas - title: Music and Stuff url: music nodes: - title: Classical - title: Jazz
此树由特殊的Navigation
类加载,该类可根据当前请求路径提供部分导航。这看起来好一点,但我对其他人的解决方案仍然非常好奇。
答案 0 :(得分:6)
MySQL有一篇名为"Managing Hierarchical Data in MySQL"的文章,我之前发现它非常宝贵。它讨论了存储动态导航的两种常用技术及其局限性。
答案 1 :(得分:5)
如果ASP.NET是你的风格,Sitemaps工作得很好
答案 2 :(得分:4)
您可能会发现我的某个模块很有用:CatalystX::Menu::Suckerfish
菜单结构由方法属性生成。它缺少一种改变当前页面菜单条目状态的方法,但这并不难添加。
方法属性是任意字符串MenuPath和MenuTitle,它指定树中菜单选项的斜线分隔路径,以及用作菜单选项标签的字符串和html title属性(如果适用)。
答案 3 :(得分:3)
我们使用类似于您的方法,使用存储在数据库中的菜单层次结构。最好根据调度方法自动生成菜单结构,但DB方法还有其他优点。例如,我们可以在不重建应用程序的情况下更改/限制访问,我们可以创建不映射到调度树的菜单项,例如外部链接。我们还可以提供任意详细的标签,这些标签不一定映射到调度路径,以使人类更容易。
主要的缺点(除了必须复制调度树)是实际管理MySQL中的分层数据有点尴尬。有关该主题的良好资源,请参阅cballou's answer。
答案 4 :(得分:2)
当涉及到树的部分显示和隐藏时,CSS就是你的朋友。
例如,您的水果子菜单可以是
id="fruitmenu"
您将所有子菜单设置为
display:none;
位于样式表的顶部。
然后在每个页面的body标签中使用ID,使其根据更具体的规则显示。
例如在你的水果页面上,有
<body id="fruitpage">
水果子菜单是可见的,因为它受
之类的规则管理 #fruitpage #fruitmenu {display:block;}
答案 5 :(得分:1)
SQL Server 2008有一个名为“HierarchyID”的漂亮的新数据类型,它消除了使用分层数据的头痛的批次。
答案 6 :(得分:0)
您可能会觉得这很有用:
答案 7 :(得分:-2)
Google网站站长工具为创建和管理站点地图提供了一些有用的想法和支持: