【问题标题】:Drupal: Changing the link of menu children to anchorsDrupal:将菜单子项的链接更改为锚点
【发布时间】:2015-03-14 12:06:16
【问题描述】:

我的目标是修改菜单的输出,使子菜单链接成为父项的锚点:

<ul class="menu">
  <li>
    <a href="page1">Page 1</a>
    <ul class="submenu">
      <li>
        <a href="page1#section">Section</a>
      </li>
    </ul>
  </li>
</ul>

由于 Drupal GUI 不允许在菜单项中使用锚点,我需要修改 theme_link() 函数以更改所有子项:

function MYTHEME_menu_link__menu_block__main_menu(array $variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {

    foreach($element['#below'] as $child) {
      $child['#href'] = str_replace(' ', '-', strtolower(render($child['#title'])));
    }

    $sub_menu = drupal_render($element['#below']);
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";

}

但是有两个问题是我对 Drupal 函数缺乏经验造成的:

  1. 更改后的href 未传递给呈现的 HTMl。
  2. 我在第 8 行收到此错误:Warning: Cannot use a scalar value as an array

我需要什么来纠正这个错误,以及如何将新的href 传递到 menu-children 的输出链接?

编辑:我应该补充一点,我正在使用实体引用将节点拉入一个超级页面,并且网站上有三个超级页面。所以使用单页解决方案对我不起作用。

【问题讨论】:

  • Drupal 本身不是 PHP,但它可以在 PHP 上运行。
  • @eyeLoveFiddle,你是对的。我知道 Drupal 不是 PHP,但它确实具有特定的功能,就像我上面提到的那样。
  • 那么您可以对 HTML 执行此操作以获得下拉菜单:jsfiddle.net/spliter/vWDvy
  • @eyeLoveFiddle,这没有回答我的问题。菜单最初是在 Drupal 界面中创建的,但是我需要在打印之前截取和修改渲染的 HTML。
  • 那就不要寻求 PHP 帮助了。我是一名 PHP 开发人员,并且这样做,而不是 drupal 开发人员。

标签: php drupal drupal-7 drupal-theming


【解决方案1】:

也许你可以从单页站点模块中获得灵感

httops://www.drupal.org/project/single_page_site 它允许您从菜单自动创建单个页面。该模块将在一个页面上呈现来自在菜单中配置的链接的所有内容。然后它将覆盖菜单链接,以便它们引用锚点而不是新页面。

【讨论】:

  • 感谢您的建议。我试了一下,但它似乎不能很好地与我应该在上面提到的实体引用一起使用。它似乎也不适用于需要锚点的多个页面。
【解决方案2】:

经过反复试验,我决定暂时使用非 PHP 解决方案。我正在使用 JavaScript 在页面加载时更改 submenu-children 的 hrefs,这不一定是最好的解决方案,但目前最可行。似乎 Drupal 的菜单功能更适合修改菜单项的标记和属性,而不是菜单的链接属性。如果我回到这个问题并提出一个PHP解决方案,我会在这里发布。

尽管这没有回答我最初的问题,但我将其标记为已接受的答案,因为它提供了我试图完成的最终结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多