Классы first и last у пунктов меню не primary

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

Аватар пользователя sikwel@drupal.org sikwel@drupal.org 29 апреля 2010 в 13:51

Здравствуйте уважаемые друпаллеры и друпальщицы (:

Верстаю многоуровневое меню, на основе модуля nice menus http://drupal.org/project/nice_menus
Потребовалось возможность отделять первый и последний пункт меню, в том числе и подменю.

Способ простым цссом не подходит из за проблем с известнокакимбраузером. Экспрешены - не наш путь (:

Меню строятся не основе primary_links в тех меню эти классы уже есть.

Нарыл на друпал орг вот эту штуку: http://drupal.org/node/301247

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

Не могли бы вы глупого верстальщика образумить? (:

Комментарии

Аватар пользователя ooa3 ooa3 6 мая 2010 в 18:27

напишыте ето в template.php

<?php
/**
* Helper function that builds the nested lists of a Nice menu.
*
* param $menu
* Menu array from which to build the nested lists.
* param $depth
* The number of children levels to display. Use -1 to display all children
* and use 0 to display no children.
* param $trail
* An array of parent menu items.
*/
function THEME_NAME_nice_menus_build($menu, $depth = -1, $trail = NULL) {
$output = '';
$index = 0;
$count = 0;
foreach ($menu as $menu_count) {
if ($menu_count['link']['hidden'] == 0) {
$count++;
}
}

foreach ($menu as $menu_item) {
$mlid = $menu_item['link']['mlid'];
// Check to see if it is a visible menu item.
if ($menu_item['link']['hidden'] == 0) {
//prepare marking of li tag as odd, even, first or last
$index++;
$first_class = $index == 1 ? ' first ' : '';
$oddeven_class = $index % 2 == 0 ? ' even' : ' odd';
$last_class = $index == $count ? ' last ' : '';

// Build class name based on menu path
// e.g. to give each menu item individual style.
// Strip funny symbols.
$clean_path = str_replace(array('http://', 'www', '<', '>', '&', '=', '?', ':'), '', $menu_item['link']['href']);
// Convert slashes to dashes.
$clean_path = str_replace('/', '-', $clean_path);
$class = 'menu-path-'. $clean_path;
if ($trail && in_array($mlid, $trail)) {
$class .= ' active-trail';
}
// If it has children build a nice little tree under it.
if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below'])) && $depth != 0) {
// Keep passing children into the function 'til we get them all.
$children = theme('nice_menus_build', $menu_item['below'], $depth, $trail);
// Set the class to parent only of children are displayed.
$parent_class = $children ? 'menuparent ' : '';
$output .= '

\n";
}
else {
$output .= '

'."\n";
}
}
}
return $output;
}
?>
Тут THEME_NAME имя темы

А ето в page.tpl.php файл

<?php theme_nice_menus_build($menu, $depth = -1, $trail = NULL) ?>

Аватар пользователя sikwel@drupal.org sikwel@drupal.org 6 мая 2010 в 18:23

Сделал в точности как Вы сказали, скопировал этот кусок кода в файл template.php, в самый низ после все что там есть.

заменил эти два слова THEME_NAME на название своей темы
тобишь у меня стало так:
function mytheme_nice_menus_build($menu, $depth = -1, $trail = NULL)

затем этот кусок кода
<?php function theme_nice_menus_build($menu, $depth = -1, $trail = NULL) {} ?>

впихнул в свой пейджтпл аккурат перед тегом head

я праильно понял, название функции в коде который в шаблон страницы копируется не нужно указывать? как в темплейт пхп?

что-то у меня никакого класса не добавилось... как было так и есть, к каждому пункту по уникальному айдишнику и классу, обозначающему путь...

тема у меня на основе zen, т.е. моя тема - это подтема темы zen (:

подтему по ридми соорудил, все корректно работает.

что бы это могло быть...

Аватар пользователя sikwel@drupal.org sikwel@drupal.org 6 мая 2010 в 19:15

Итс элайв!!)))

Поштудировав немного буржуйские бредни на этой (http://drupal.org/node/301247) странице методом научного тыка соглашусь с этим комментом:#46 (http://drupal.org/node/301247#comment-2373456)

если взять кусок кода отсюда: #32 котрый для версии 6.x-1.3 которая у меня и установлена и изменить функцию как сказано здесь: #44 т.е. просто заменив "$trail" на "$trail = null" мы получаем работоспособный вариант, все классы добавляются для всех уровней!)

Урра товарищи!)))

З.Ы. в page.tpl.php пихать ничего не нужно (;