2015-01-15 2 views
0

Моя цель заключается в изменении выходного меню так, чтобы подменю ссылки анкеры родительского элемента: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 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 в ссылку для выхода из меню-детей?

EDIT: Я должен добавить, что я использую ссылку Entity Reference, чтобы вытащить узлы в одну суперстраницу, и на сайте есть три суперстраницы. Поэтому использование одностраничного решения не будет работать для меня.

+1

Drupal сам по себе не является PHP, но может работать на PHP. –

+0

@eyeLoveFiddle, вы правы. Я знаю, что Drupal - это не PHP, но в нем есть специальные функции, такие как тот, о котором я упоминал выше. – kylesimmonds

+0

, тогда вы можете сделать это в HTML для выпадающего меню: http://jsfiddle.net/spliter/vWDvy/ –

ответ

0

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

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

0

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

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

+0

спасибо за предложение. Я попробовал, но, похоже, он не прекрасно сочетается с Entity Reference, о котором я должен был упомянуть, используя выше. Кроме того, он не работает для нескольких страниц, требующих привязки. – kylesimmonds