Drupal教程:使用drupal菜单
介绍
在这里,我并没有打算对菜单进行深入详细的讲解.我的出发点是帮你构建一个自己的菜单,让你了解drupal的菜单是如何工作的.关于drupal菜单的一个更完整的指南可参看创建一个菜单结构一文.
我们都知道菜单或者说导航系统,可以成就一个网站,也可以毁掉一个网站.它必须方便人们使用,也就是通常所说的直观性.它必须完整,并且紧凑.
在Drupal官方网站上,有大量讨论菜单的内容.大多数新手刚开始都很难理解drupal的菜单.我使用Drupal已经有一个多月了,而且我还在编写这本简明教程,但是我仍然没有完全理解Drupal的菜单.
对于初学者来说,最容易混淆的莫过于菜单和分类这两个概念.菜单是一个导航系统,而分类是一个用来组织内容的系统.所以说,菜单是通过内容的路径,而分类则用来维持内容的秩序.为了更好的理解Drupal,你必须将这两者区分开来.
使用菜单,你可以直接将其指向一个节点,比如page或者story页面,但是你也可以指向taxonomy/term/id,它将为你展示一个节点列表.比如在http://zhupou.cn/taxonomy/term/3中,你可以看到所有关于Drupal 5.x的节点.
Drupal提供了3种主要的方式,这3种方式可以联合使用,来为你的用户提供站点导航.
- 文本菜单 – 这是标准形式的菜单,就像你在大多数网站上看到的,包括我的在内,都是这种形式.有多种方式,可对其进行改进,比如使用CSS或者单独的book导航(就像我这里用的)。
- 标签式菜单 – 因为在外观上更时髦一些的原因,现在这种标签越来越流行了。对于用户来讲,它是否更加有效,这一点还有待商榷。在drupal中,它被分为“一级”(总能看到的标签)和“二级”(下拉出来的菜单)。并不是所有的主题都支持二级链接的。
- 书(Books) - 书有着自己的独立的组织方式,它们有自己的导航,你在本站就能够看到这种形式。参看创建一个Book页面。
文本菜单
文本导航是最容易理解的。事实上 ,我现在还不能理解标签式导航中的“二级”菜单的工作方式,而许多人都觉得它应该那样的(下拉)。
在许多帖子中,你都会看到“一级链接”和“二级链接”这样的术语。我觉得,在这个地方是Drupal文档最混乱的一个地方。尽管它们说的非常好,而且我也在使用它们,但对于初学者来讲,它们未必是最好的选择。首先,先使用标准的导航菜单,直到你熟悉了以后,你随时可以对菜单作出修改。
在大多数的时候,当你创建内容时,这种标准的菜单是最好用的,但是有时候你会觉得外观不够美观,需要稍微的调整一下。
当你创建一个page, story, blog,或者book页面时,在提交以前,一个你可能需要输入的字段就是菜单项(如果节点需要的话)。这里有一个“标题”(人们所看到的菜单项)和“描述”(当鼠标移到菜单项时所看到的东西)。
我通常不考虑菜单项的重量,直到我觉看起来有点不顺眼时,再去调整。此时,你可以可以通过编辑你的内容,也可以导航到Administer >> Site building >> Menus,在这里进行编辑。
好的,前面的都比较简单。现在让我们考虑一下子菜单的使用,把一个页面作为另一个页面的子页面。假如你已经有了某个主题的介绍页面,它已经列在了菜单中,比如说“家族历史”。而你当前创建的页面时"1860-1899." 当你构建菜单项时,你会注意到有一个标记为Parent Item."的下拉列表。展开这个列表,找出"Family History."现在你提交当前页面以后,它就成为"Family History"的一个子页面了,使得这个菜单项具有了可伸缩的能力。你已经创建了一个多层级的菜单了!
标签式菜单
在支持这一技术的主题中,在你构建导航菜单时,“一级菜单”看起来就是自动完成的,除非你声明一个不同的菜单集。到目前为止,我还不知道二级菜单是怎么显示出来的---我觉得可能需要一个单独的模块吧。我知道,在一个区块中,如果二级链接存在的话,如何显示它们。我觉得这种方式很好,但是开始时它有点难以理解,可能并不适用于所有的人。
Books(书)
book菜单是自动为你构建的。你需要管的是菜单项的顺序(提示:重量)。
比较难的一点是,启用book导航区块,它位于Administer >> Site building >> Blocks。你所需要做的是告诉Drupal,将这个区块放到哪个区域中,以及它的相对重量。如果你想要的话,使用样式表,你可以得到更漂亮的外观。
更多
将来,你可能会使用taxonomy_menu module(模块)。它有点复杂,但是当你的词汇表不断修改时,它非常好用。它将菜单和分类的不同之处完全抹掉了,因为它允许你把分类当作菜单使用。在这种方式下,菜单时自动生成的。
如果你需要多层级的下拉菜单的话,你可以考虑使用nice_menus module(模块)。