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

Часто бывают ситуация в жизни , когда необходимо стилизовать меню под уже готовую верстку, то самый случай когда верстали под конкретный проект а получилось как всегда.

Для примера рассмотрим следующую ситуацию, допустим у нас есть меню со следующей версткой:

<nav class="menu">
	    <div>
	        <ul>
	            <li class="active"><a href="">О САЙТЕ</a></li>
	            <li><a href="">НОВОСТИ</a></li>
	            <li><a href="">FAQ</a></li>
	            <li><a href="">КОНТАКТЫ</a></li>
	        </ul>
	    </div>
</nav>

Решение простое, выводить меню  с помощью функции темизации — menu_tree(), которая возвращает готовый к рендерингу массив с т меню которое мы передаем при вызове функции.

Этот код нужно вписать в page.tpl.php там, где должно отображаться наше меню( к примеру main-menu)

<?php if ($main_menu): ?>
 <?php print render(menu_tree('main-menu')); ?>
<?php endif; ?>

осталось переопределить функции темизации в файле template.php,

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

function THEMNAME_menu_link__main_menu(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";
}

Обратите внимание — в функции THEMNAME_menu_link__main_menu не случайно прописан вывод $element[‘bellow’] — этот элемент хранит в себе маcсив подменю для текущего пункта меню.

Думаю в остальное понятно без комментариев.

2 Комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *