【问题标题】:Attach class to menu item based on content type in Drupal根据 Drupal 中的内容类型将类附加到菜单项
【发布时间】:2010-01-27 00:09:02
【问题描述】:

我见过一些允许将类/ID 附加到菜单项的功能;不幸的是,它们都不适用于我的用例。我想要做的是根据链接项的内容类型为 any 菜单项分配一个类/ID。

例如,我有一个名为“内部”的内容类型,仅当查看者在可接受的 IP 范围内时才会显示(我拥有 Intranet 页面而没有单独站点的方式)。我想为这些链接设置不同的样式。

在同一行中,我也希望能够在菜单中设置外部链接的样式。

注意,我知道 Menu Attributes 模块 (http://drupal.org/project/menu_attributes),它允许我将自己的 ID 分配给菜单项,但我想要一些自动化的东西,因为我已经完成了网站上有 100 名内容编辑。理想情况下,这样的事情应该是一个自动化的过程。

【问题讨论】:

    标签: drupal menu drupal-6 drupal-themes customizing


    【解决方案1】:

    您可以在配置目录中加载不同的主题。您可能需要 IP 范围的主机名。

    网站/默认/主题/my_theme
    站点/intranet.tld/themes/my_theme

    您可以通过符号链接主题和重写所需的 html/css 来避免重复。

    查看 settings.php 中的文档

    这只是众多方法中的一种......

    【讨论】:

    • ...很多方法可以做什么?为什么我要加载不同的主题?我正在寻找自定义菜单功能而不是如何设置子站点。
    【解决方案2】:

    您可以在theme_menu_itemtheme_menu_item_link 中添加类(取决于您希望它在li 还是a 上)。然后,您需要一些方法来确定给定菜单项的内容类型。像node_load(array('path' => $link['href'])) 这样的东西应该可以解决问题(未经测试)。

    【讨论】:

    • 我曾考虑使用 node_load(),但我不知道如何利用它来获取 $node-> 类型。您拥有它的方式假定路径基于内容类型,它通常位于 Drupal 站点上。不幸的是,对我来说情况并非如此。路径由内容所有者确定。理想情况下,我想要类似于 type; 的东西。 // 任何其他返回 '
    • '。 $链接。 $菜单。 "
    • \n"; ?> 我只是不确定如何将节点对象带入 theme_menu_item 函数中。
  • 我之前未经测试的代码实际上不起作用。路径存储在 url_alias 表中,因此您可以查询该表以获取节点 ID,使用该 ID 加载节点,然后从 $node->type 获取类型。这仍然是未经测试的代码,但各个部分肯定有效: $path = db_fetch_object(db_query("SELECT src FROM url_alias WHERE dst = '%s'", $link['href'])); $path_parts = explode('/', $path->src); $node = node_load($path_parts[1]);
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签