【发布时间】: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 函数缺乏经验造成的:
- 更改后的
href未传递给呈现的 HTMl。 - 我在第 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