【问题标题】:How to add classes for styling to Drupal when using menu_block?使用 menu_block 时如何向 Drupal 添加样式类?
【发布时间】:2009-12-06 17:06:32
【问题描述】:

我将 Drupal 中的 menu_block 模块用于我的菜单。这很好用,但我希望我的菜单项样式为图像菜单。这不能用默认设置很好地完成 - 菜单项看起来像这样:

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

我猜我可以使用 menu-mlid-199 类来获得我想要的样式,因为它是每个菜单项的唯一 ID,但这对我来说似乎相当难看。有没有其他方法可以向我的菜单项添加合理命名的类,例如从页面标题或网址别名生成它们?即使只是一个序列也会看起来更好——比如 menu-item-1 等等。

【问题讨论】:

    标签: php drupal content-management-system


    【解决方案1】:

    虽然您的问题非常清楚您想知道什么(见下文),但我并不是 100% 清楚您想要实现的功能类型。所以我只是想从提及image menu module 开始,以防该模块接近您的需要。另一种选择也可以是menu icons 模块。类似问题的其他自定义解决方案已经讨论过here

    至于更改菜单项的类属性:类属性是菜单项by theme_menu_item()。您可以简单地从您自己的主题中覆盖该功能。 official drupal documentation 中给出了有关如何覆盖主题函数的说明。

    【讨论】:

    • 基本上,我有这个网站,左侧有一个菜单,仅包含顶级页面,右侧有一个上下文菜单,显示与访问者当前正在查看的页面相关的其他菜单项在。这可以使用 menu_block 很好地完成。现在我希望能够为左侧的“静态菜单”设置皮肤,其中包含大约 6 个项目。设置一些背景图像,做翻转和东西。为此,我需要能够使用 css 选择器来定位每个菜单项。图像菜单能解决这个用例吗?抱歉,我是一个 drupal 菜鸟 :-)
    • 图像菜单和菜单图标(我现在在主要答案中添加了参考)允许您创建带有图像/图标的菜单。坦率地说,我不记得他们是否以及如何将类添加到生成的 HTML 中,但我想他们不会,至少不会以您需要的方式。你可以试一试(如果它们对你没有用,你可以卸载它们)。我提到它们是为了以防你只是为了图像而需要类,但如果你真的需要更改 CSS,那么我宁愿去覆盖菜单项的主题。
    【解决方案2】:

    我换了一行

    在 menu_block.module 中:

    (639) $extra_class[] = 'menu-mlid-' 。 $items[$key]['link']['mlid'];

    进入

    $extra_class[] = 'menu-href-' 。 str_replace('/','-',$items[$key]['link']['href']);

    它对我来说没问题,它不使用 mlid(我通常不知道),而是使用路径(我知道)

    【讨论】:

      【解决方案3】:

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

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

      实际上,每一个 HTML Drupal 输出都是可主题化的,因此请阅读主题以及如何覆盖打印菜单项列表的功能。如果您安装了开发模块,您可以看到哪些函数创建了该列表。然后,您可以为这些项目分配额外的类或 ID,以便您可以根据需要使用 CSS 为它们设置主题。

      祝你好运!

      【讨论】:

      • 我可能是错的,但是从 OP 的评论到另一个答案,我明白他想要实现的是设置我理解的“静态菜单”的样式 不是 用 menu_block 完成的一个,但标准的一个(主要或辅助链接?)。另外:并非所有的主题化都是通过模板完成的,它可以通过函数完成,实际上是菜单核心模块的情况。最后(也是最重要的)您建议修改的模板将菜单项作为无序列表,这将要求您处理 HTML 而不是变量:这是一个相当不雅的解决方案。
      • 我很可能误解了 OP 的问题。如果是这样的话,那么我的回答确实可以忽略。我不太明白你最后的评论,你能详细说明一下吗?
      • @Niels - 我的意思是,您建议使用的模板文件已经将菜单作为 HTML 接收,因此 - 为了修改类 - 您需要编写反向代码 -将 HTML 设计为单个项目,然后直接对 HTML 进行一些字符串操作。如果您要覆盖 theme_menu_item() ,则只需将一个函数连接到生成类的行;您还将在函数中接收您可能需要确定类名称的所有参数(例如:mlid),而无需从 HTML 中挖掘它们。
      • @mac 我同意,你的解决方案更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      相关资源
      最近更新 更多