Добавляем уникальный класс для ссылок в пользовательском меню Drupal 7


18:27, 20/03/2018

Автор https://api.drupal.org/comment/13834#comment-13834 предложил решение на мой взгляд несколько мудреное, т.к. не всегда целесообразно производить столько манипуляций для простого добавления уникальных классов к ссылкам пользовательских меню в Drupal 7.

Работаем с template.php

Полезная информация

theme_menu_tree($variables)
theme_menu_link(array $variables)

Для просмотра информации (например, что бы узнать программное имя меню) о меню которое вам необходимо кастомизировать используйте стандартную конструкцию:

// Show variables for the menu_link array
function YOURTHEMENAME_menu_link(array $variables) {
    // return print_r($variables['element']);
    return print '
' . print_r($variables['element']) . print '
'; }

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

Далее пишем функцию для препроцесса обертки меню если необходимо убрать\добавить свои стили:

function YOURTHEMENAME_menu_tree__menu_NAME(&$variables) {
    return '';
}

Что бы не мудрить с уникальностью имен воспользуемся теми, что уже есть в базе — mlid

function YOURTHEMENAME_menu_link__menu_NAME(array $variables) {
    $element = $variables['element'];
    $sub_menu = '';
    // Here we put our uniq class for menu links
    $element['#attributes']['class'][] = 'my-uniq-class-' . $element['#original_link']['mlid'] . '';

    if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
    }
    $output = l($element['#title'], $element['#href'], $element['#localized_options']);
    return '' . $output . $sub_menu . "\n";
}


Комментарии