Моя цель — изменить вывод меню так, чтобы ссылки в подменю были привязками родительского элемента:
<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:
href
не передается на визуализированный HTMl.Warning: Cannot use a scalar value
as an array
,Что мне нужно, чтобы исправить эту ошибку, и как я могу передать новый href
в меню — детская выходная ссылка?
РЕДАКТИРОВАТЬ: я должен добавить, что я использую Entity Reference для перетаскивания узлов в одну суперстраницу, и на сайте есть три суперстраницы. Поэтому использование одностраничного решения не подойдет мне.
Может быть, вы можете получить идею из одностраничного модуля сайта
httops: //www.drupal.org/project/single_page_site
Это позволяет автоматически создавать одну страницу из меню. Модуль отобразит весь контент по ссылкам, настроенным в меню, на одной странице. Затем он переопределит ссылки меню, чтобы они ссылались на якорь, а не на новую страницу.
После долгих проб и ошибок я решил пока использовать не-PHP-решение. Я использую JavaScript, чтобы изменить дочернее подменю href
s при загрузке страницы, что не обязательно является лучшим решением, но наиболее выполнимым прямо сейчас. Кажется, что функции меню в Drupal лучше подходят для изменения разметки и атрибутов пунктов меню, а не атрибутов ссылок меню. Если я вернусь к этой проблеме и найду решение PHP, я опубликую его здесь.
Хотя это не отвечает на мои первоначальные вопросы, я отмечаю его как принятый ответ, потому что он дает конечный результат, которого я пытаюсь достичь.