Функция предварительной обработки темы Drupal - первичные ссылки и меню suckerfish - PullRequest
0 голосов
/ 04 мая 2010

У меня есть функция препроцесса, которая прекрасно работает, когда меню представляет собой одноуровневый список. Однако я хотел бы, чтобы он работал с меню suckerfish. Я хочу добавить класс в пункт меню верхнего уровня, чтобы я мог его стилизовать. Вот код, который я использовал для одноуровневого меню:

function cti_flex_preprocess_page(&$vars, $hook) {

// Make a shortcut for the primary links variables
$primary_links = $vars['primary_links'];

// Loop thru the menu, adding a new class for CSS selectors
    $i = 1;

    foreach ($primary_links as $link => $attributes){
        // Append the new class to existing classes for each menu item
        $class = $attributes['attributes']['class'] . " item-$i";

        // Add revised classes back to the primary links temp variable
        $primary_links[$link]['attributes']['class'] = $class;
        $link['title'] = '<span class="hide">' . check_plain($link['title']) . '</span>';
        $i++;
        } // end the foreach loop

// reset the variable to contain the new markup
$vars['primary_links'] = $primary_links;

}

Я пытался использовать функцию menu_tree() безрезультатно, например:

function cti_flex_preprocess_page(&$vars, $hook) {

// Make a shortcut for the primary links variables
$primary_links = $vars['primary_links'];

// Loop thru the menu, adding a new class for CSS selectors
    $i = 1;

    foreach ($primary_links as $link => $attributes){
        // Append the new class to existing classes for each menu item
        $class = $attributes['attributes']['class'] . " item-$i";

        // Add revised classes back to the primary links temp variable
        $primary_links[$link]['attributes']['class'] = $class;
        $link['title'] = '<span class="hide">' . check_plain($link['title']) . '</span>';
        $i++;
        } // end the foreach loop

// reset the variable to contain the new markup
$vars['primary_links_tree'] = menu_tree(variable_get('menu_primary_links_source', '$primary_links'));

}

Любые идеи будут с благодарностью.

1 Ответ

0 голосов
/ 05 мая 2010

Ну, я отказался от этого и нашел отличный модуль, который делает то, что мне нужно; Хорошие меню . Полный css контроль меню, отличный модуль. Еще несколько подробностей об этом модуле (со страницы его проекта):

Nice Menus включает раскрывающиеся / правые / левые расширяемые меню. Он использует только CSS для большинства браузеров, с минимальным Javascript для IE6. (Версия 2 использует плагин Superfish jQuery для всех браузеров с возможностью отключения JS и использует только CSS для браузеров, которые могут его обработать.)

В настоящее время возможны три стиля / типа меню: горизонтальное, выпадающее меню; вертикальное, меню летит влево; вертикальное, меню летит вправо. На странице справочника представлен список сайтов, которые используют меню Nice.

Nice Menus создает блоки, которые могут быть связаны с любым существующим меню сайта, которое может быть размещено везде, где обычные блоки могут быть размещены в теме. Для любителей также возможно оформить меню как «Хорошее меню» напрямую, используя предоставленные функции темы, поэтому блок не требуется. Доступна специальная тема для меню «Основные ссылки». Функции темы также позволяют разработчику передавать пользовательское дерево меню их создания (т.е. без использования меню Drupal.) Более подробная информация о том, как использовать функции темы, приведена в документации.

Модуль поставляется с простой общей цветовой схемой, которую можно полностью переопределить, либо добавив переопределить CSS в обычную таблицу стилей темы, либо создав CSS-файл Nice Menus и указав Nice Menus использовать его вместо своей собственной по умолчанию. через глобальную конфигурацию темы. Несколько примеров переопределения CSS приведены во включенном файле README.txt и в руководстве.

...