Выпадающее меню Drupal 7 bootstrap

Я новичок в Drupal. Я пытаюсь разработать шаблон bootstrap 3, но у меня проблема с реализацией меню выпадающего меню. Я выполнил следующие шаги:

в моей папке mytheme/templates я создаю файл page.tpl.php со следующим кодом:

if ($page['header'])
...
$main_menu = variable_get('menu_main_links_source', 'main-menu');
$tree = menu_tree($main_menu);
print drupal_render($tree);
...

в папке mytheme создаю файл template.php с этими функциями:

function mytheme_menu_tree($variables) {
 return '<ul>' . $variables['tree'] . '</ul>';
}

function mytheme_menu_link(array $variables) {
 $element = $variables['element'];
 $sub_menu = '';
 $dropdown = '';
 if ($element['#below']) {
 $sub_menu = drupal_render($element['#below']);
 $dropdown = 'class="dropdown"';
 $element['#localized_options']['attributes']['class'][] = 'dropdown-toggle';
 }
 $output = l($element['#title'], $element['#href'], $element['#localized_options']);
 return '<li '="" .$dropdown.="">' . $output . $sub_menu . "</li>\n";
}

с этим кодом я нахожусь в хорошей точке, но мне нужно удалить классы "nav navbar-nav" от детей и добавить класс "выпадающее меню". Это результат моего кода:

<ul>
<li><a href="." target="_blank">XYZ</a></li>
<li><a href="." title="" target="_blank">ASD</a></li>
<li><a href="." title="" target="_blank">XXX</a>
<ul>
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</li>
</ul>

и это то, что я хотел бы получить:

<ul>
<li><a href="." target="_blank">XYZ</a></li>
<li><a href="." title="" target="_blank">ASD</a></li>
<li><a href="." title="" target="_blank">XXX</a>
<ul> <!-- HERE IS THE DIFFERENCE -->
<li>...</li>
<li>...</li>
<li>...</li>
</ul>
</li>
</ul>

Может быть, я могу сделать что-то вроде этого:

function mytheme_menu_tree($variables) {
 if ( [check if I'm at the first level] ) {
 return '<ul>' . $variables['tree'] . '</ul>';
 } else {
 return '<ul>' . $variables['tree'] . '</ul>';
 }

}

но я не знаю, как... Любая идея?

3 ответа

Я тоже немного новичок, когда дело доходит до Drupal, и эта проблема также возникла. Я изменил вашу функцию, и она работает для меня:

function SeatradeKorea_menu_link(array $variables) {
 $element = $variables['element'];
 $sub_menu = '';
 $dropdown = '';
 if ($element['#below']) {
 $sub_menu = drupal_render($element['#below']);
 $sub_menu = str_replace('nav navbar-nav', 'dropdown-menu', $sub_menu);
 $dropdown = 'class="dropdown"';
 $element['#localized_options']['attributes']['class'][] = 'dropdown-toggle';
 }
 $output = l($element['#title'], $element['#href'], $element['#localized_options']);
 return '<li '="" .$dropdown.="">' . $output . $sub_menu . "</li>\n";
 }

Я добавил str_replace() в ваш элемент #below, чтобы заменить "nav navbar-nav" на "раскрывающееся меню",


Там довольно подробное объяснение того, как это сделать здесь.


У меня та же проблема, и я нашел решение здесь. Если вы знаете лучший способ, пожалуйста, дайте мне знать, я работаю над этим. Благодарю.

licensed under cc by-sa 3.0 with attribution.