Темизация меню

Главные вкладки

Аватар пользователя _viktor_ _viktor_ 25 июня 2018 в 14:25

Прошу помочь разобраться с темизацией меню.
Суть в следующем. UL "submenu" наследует класс основного меню "ul_menu", а мне нужно вложенным UL назначать другие классы.
Делаю так:

<?php
function vkuslada_menu_tree__menu_production($variables)
{
    return 
'<nav class="menu"><div> <ul class="ul_menu">' $variables['tree'] . '</ul></div></nav>';
}

function 

vkuslada_menu_link__menu_production(array $variables)
{
    
$element $variables['element'];
    
$sub_menu '';
    if (
$element['#below']) {
        
$sub_menu drupal_render($element['#below']);
        
$sub_menu '<div class="submenu">' $sub_menu '</div>';
    }
    
$output l($element['#title'], $element['#href']);
    return 
'<li>' $output $sub_menu "</li>\n";
}

?>

Результат:

<nav class="menu">
    <div>
        <ul class="ul_menu">
            <li><a href="">ссылка</a></li>
            <li><a href="">Подменю</a>
                <div class="submenu">
                    <nav class="menu">
                        <div>
                            <ul class="ul_menu">
                                <li><a href="">ссылка</a></li>
                            </ul>
                        </div>
                    </nav>
                </div>
            </li>
        </ul>
    </div>
</nav>

а должно быть так

<nav class="menu">
    <div>
        <ul class="ul_menu">
            <li><a href="">ссылка</a></li>
            <li><a href="">Подменю</a>
                <div class="submenu">
                    <nav class="my_class_menu">
                        <div>
                            <ul class="my_class_ul_menu">
                                <li><a href="">ссылка</a></li>
                            </ul>
                        </div>
                    </nav>
                </div>
            </li>
        </ul>
    </div>
</nav>

У самого реализовать это не получается,поэтому прошу помочь

Лучший ответ

Аватар пользователя Olegars Olegars 25 июня 2018 в 14:30
1

в template.php (само собой это пример, не решение)

function тема_menu_tree__menu_menu_768($variables) {
    return $variables['tree'];
}
function тема_menu_link__menu_menu_768(array $variables) {
    $element = $variables['element'];
    $sub_menu = '';
    $sub='';
    if ($element['#below']) {
      foreach($element['#below'] as $key=>$el){
        if(is_numeric($key)){
          $element['#below'][$key]['#theme'] = 'menu_link__menu_menu_768_inner';
        }
      }
        $sub_menu = drupal_render($element['#below']);
        $sub='<ul class="submenu"><div class="me">'.$sub_menu .'<div class="ind"></div></div></ul>';
    }
    $output = l($element['#title'], $element['#href']);
    return '<li>' . $output .$sub."</li>\n";
}
function тема_menu_link__menu_menu_768_inner($variables) {
      $element = $variables['element'];
      $sub_menu = '';
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
      $output = l($element['#title'], $element['#href'], $element['#localized_options']);
      return '<li><span><img src="/sites/all/themes/tvi/images/icon/'.$element['#title'].'.png"></span>' . $output . $sub_menu . "</li>\n";
    }

Комментарии

Аватар пользователя Olegars Olegars 25 июня 2018 в 14:30
1

в template.php (само собой это пример, не решение)

function тема_menu_tree__menu_menu_768($variables) {
    return $variables['tree'];
}
function тема_menu_link__menu_menu_768(array $variables) {
    $element = $variables['element'];
    $sub_menu = '';
    $sub='';
    if ($element['#below']) {
      foreach($element['#below'] as $key=>$el){
        if(is_numeric($key)){
          $element['#below'][$key]['#theme'] = 'menu_link__menu_menu_768_inner';
        }
      }
        $sub_menu = drupal_render($element['#below']);
        $sub='<ul class="submenu"><div class="me">'.$sub_menu .'<div class="ind"></div></div></ul>';
    }
    $output = l($element['#title'], $element['#href']);
    return '<li>' . $output .$sub."</li>\n";
}
function тема_menu_link__menu_menu_768_inner($variables) {
      $element = $variables['element'];
      $sub_menu = '';
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
      $output = l($element['#title'], $element['#href'], $element['#localized_options']);
      return '<li><span><img src="/sites/all/themes/tvi/images/icon/'.$element['#title'].'.png"></span>' . $output . $sub_menu . "</li>\n";
    }
Аватар пользователя _viktor_ _viktor_ 25 июня 2018 в 14:43

Спасибо за ответ. Я попробовал. Разметку выводит, а вот само подменю нет.
Проверьте пожалуйста, может где не точность