你如何生成网站导航?

时间:2009-12-07 13:53:16

标签: perl navigation

我对其他人如何处理网站导航感兴趣。不是造型或可用性部分,而是生成部分。大多数网站都有某种“导航树”,它以一个或多个菜单级别的形式显示 - 以什么形式保存和处理这棵树?最简单的解决方案是静态菜单模板,如下所示:

<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类加载,该类可根据当前请求路径提供部分导航。这看起来好一点,但我对其他人的解决方案仍然非常好奇。

8 个答案:

答案 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)

您可能会觉得这很有用:

Storing Hierarchical Data in a Database

答案 7 :(得分:-2)

Google网站站长工具为创建和管理站点地图提供了一些有用的想法和支持: