0

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

в моем MyTheme/шаблоны папок создать 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 class="nav navbar-nav">' . $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"; 
} 

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

<ul class="nav navbar-nav"> 
<li><a href="/drupal/node/1" class="active">XYZ</a></li> 
<li><a href="/drupal/node/2" title="">ASD</a></li> 
<li class="dropdown"><a href="/drupal/node/3" title="" class="dropdown-toggle">XXX</a> 
<ul class="nav navbar-nav"> 
<li>...</li> 
<li>...</li> 
<li>...</li> 
</ul> 
</li> 
</ul> 

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

<ul class="nav navbar-nav"> 
<li><a href="/drupal/node/1" class="active">XYZ</a></li> 
<li><a href="/drupal/node/2" title="">ASD</a></li> 
<li class="dropdown"><a href="/drupal/node/3" title="" class="dropdown-toggle">XXX</a> 
<ul class="dropdown-menu"> <!-- 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 class="nav navbar-nav">' . $variables['tree'] . '</ul>'; 
    } else { 
     return '<ul class="dropdown-menu">' . $variables['tree'] . '</ul>'; 
    } 

} 

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

ответ

0

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

1

Я тоже немного новичок, когда дело доходит до 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 элемент, чтобы заменить «нав NavBar-Nav» с «в раскрывающемся меню»

Смежные вопросы