Drupal: изменение ссылки детей меню на якоря

Моя цель — изменить вывод меню так, чтобы ссылки в подменю были привязками родительского элемента:

<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 не позволяет привязывать элементы меню, мне нужно изменить 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 в меню — детская выходная ссылка?

РЕДАКТИРОВАТЬ: я должен добавить, что я использую Entity Reference для перетаскивания узлов в одну суперстраницу, и на сайте есть три суперстраницы. Поэтому использование одностраничного решения не подойдет мне.

0

Решение

Может быть, вы можете получить идею из одностраничного модуля сайта

httops: //www.drupal.org/project/single_page_site
Это позволяет автоматически создавать одну страницу из меню. Модуль отобразит весь контент по ссылкам, настроенным в меню, на одной странице. Затем он переопределит ссылки меню, чтобы они ссылались на якорь, а не на новую страницу.

0

Другие решения

После долгих проб и ошибок я решил пока использовать не-PHP-решение. Я использую JavaScript, чтобы изменить дочернее подменю hrefs при загрузке страницы, что не обязательно является лучшим решением, но наиболее выполнимым прямо сейчас. Кажется, что функции меню в Drupal лучше подходят для изменения разметки и атрибутов пунктов меню, а не атрибутов ссылок меню. Если я вернусь к этой проблеме и найду решение PHP, я опубликую его здесь.

Хотя это не отвечает на мои первоначальные вопросы, я отмечаю его как принятый ответ, потому что он дает конечный результат, которого я пытаюсь достичь.

0

По вопросам рекламы [email protected]