2009-12-06 31 views
1

我在Drupal中为我的菜单使用了menu_block模块。这工作得很好,但我想我的菜单项作为图像菜单样式。这不能使用默认设置很好地完成 - 菜单项是这个样子:如何使用menu_block在Drupal中添加样式类?

<li class="leaf first menu-mlid-199"><a href="/this/is/some/nice/url" title="Homepage">Homepage</a></li> 

我猜我能使用的菜单MLID-199类来获得我想要的造型,因为它是一个独特的每个菜单项的ID,但这对我来说似乎相当难看。有没有其他方法可以将合理命名的类添加到我的菜单项中,例如从页面标题或网址别名生成它们?即使只是一个序列看起来更好 - 像菜单项1等。

回答

2

虽然你的问题非常清楚你想知道什么(见下文),但它并不是100%清楚你想要实现的功能类型。所以我刚开始时提到image menu module,以防模块接近你所需要的。另一种选择也可以是menu icons模块。针对类似问题的其他定制解决方案已被讨论here

只要将类别属性更改为菜单项:类归属于菜单项by theme_menu_item()。您可以简单地从您自己的主题中覆盖该功能。在official drupal documentation中给出了关于如何覆盖可定向函数的解释。

+0

基本上,我有这个网站,该网站上有一个菜单左侧仅包含顶层页面和右侧的上下文菜单,其中显示与当前页面访问者相关的其他菜单项。这可以使用menu_block很好地完成。现在我希望能够看到左侧的“静态菜单”,其中包含大约6个项目。设置一些背景图像,做翻转和东西。为此我需要能够用css选择器来指向每个菜单项。图像菜单是否解决了这个用例?对不起,我是drupal noob :-) – VoY 2009-12-06 20:52:14

+0

图像菜单和菜单图标(我现在在主要答案中添加了参考)允许您创建带有图像/图标的菜单。我坦率地不记得他们是否以及如何将类添加到生成的HTML中,但我想他们不会,至少不会以您需要的方式。尽管你可以尝试一下(如果他们没有用处,你可以将它们卸载掉)。我提到它们只是为了图像的缘故而需要类,但如果您确实需要更改CSS,那么我宁愿去重写菜单项的主题。 – mac 2009-12-07 00:35:26

0

主题模块输出时,请始终查看模块目录中的.tpl.php文件。在这种情况下.tpl.php文件是menu-block-wrapper.tpl.php。将其复制到您正在使用的主题的文件夹中,并根据需要进行调整。

此外,还有一些关于在模块包中包含的README.txt文件中设置菜单块的信息。

实际上,每一段HTML Drupal输出都是有主题的,因此请阅读主题以及如何覆盖打印菜单项列表的功能。如果您安装了Devel模块,您可以查看哪些功能创建该列表。然后,您可以将额外的类或ID分配给这些项目,以便您可以尽可能多地使用CSS对其进行主题化。

祝你好运!

+0

我可能是错的,但从OP的评论到另一个答案,我明白他想要实现的是设计“静态菜单”,我知道它不是用menu_block完成的,而是标准的一个(主要或次要链接?)。另外:并非所有的主题都是通过模板完成的,它可以通过功能完成,实际上菜单核心模块就是这种情况。最后(也是最重要的)你建议修改的模板将菜单项作为一个无序列表,这将需要你处理HTML而不是变量:一个相当不雅的解决方案。 – mac 2009-12-07 13:29:44

+0

我很可能误解了OP的问题。如果是这样,那么我的答案可以被忽略。我不太了解你最后的评论,你是否会如此善意阐述? – 2009-12-07 18:00:15

+0

@Niels - 我的意思是,你建议使用的模板文件已经接收到HTML格式的菜单,所以 - 为了修改类,你需要编写代码将HTML逆向工程化为单独的项目,然后直接对HTML进行一些字符串操作。如果您要覆盖主题\ _menu \ _item(),您只需将一个函数连接到生成类的行;你也可以在函数中得到所有你需要的参数来决定类的名字(例如:mlid),而不必从HTML中挖掘出来。 – mac 2009-12-08 08:38:26

1

我已经改变了线

在menu_block.module:

(639)$ extra_class [] = '菜单mlid-'。 $项目[$关键] [ '链接'] [ 'MLID'];

纳入

$ extra_class [] ='menu-href-'。 str_replace函数( '/', ' - ',$项[$键] [ '链路'] [ 'HREF']);

,它为我工作正常,它不使用MLID(我通常不知道),但路径(我知道)