My goal is to modify the output of a menu so that the submenu links are anchors of the parent item:
<ul class="menu">
<li>
<a href="page1">Page 1</a>
<ul class="submenu">
<li>
<a href="page1#section">Section</a>
</li>
</ul>
</li>
</ul>
Because the Drupal GUI doesn't allow anchors in menu items, I need to modify the theme_link()
function to change all children:
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>
";
}
But there are two problems, which are a result of my lack of experience with Drupal functions:
- The changed
href
is not being passed to the rendered HTMl. - I receive this error for line 8:
Warning: Cannot use a scalar value as an array
.
What do I need to correct this error, and how can I pass the new href
to the menu-children's output link?
EDIT: I should add that I’m using Entity Reference to pull nodes into one super page, and there are three super pages on the site. So using a single-page solution will not work for me.