Здравствуйте уважаемые друпаллеры и друпальщицы (:
Верстаю многоуровневое меню, на основе модуля nice menus http://drupal.org/project/nice_menus
Потребовалось возможность отделять первый и последний пункт меню, в том числе и подменю.
Способ простым цссом не подходит из за проблем с известнокакимбраузером. Экспрешены - не наш путь (:
Меню строятся не основе primary_links в тех меню эти классы уже есть.
Нарыл на друпал орг вот эту штуку: http://drupal.org/node/301247
но не совсем понимаю что дальше с этим куском кода делать, да и будет ли он работать, и вообще какой брать ибо там почти в каждом комменте непойми какие изменения в него вносились.
Не могли бы вы глупого верстальщика образумить? (:
Комментарии
напишыте ето в 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 .= '
// Check our depth parameters.
if ($menu_item['link']['depth'] <= $depth || $depth == -1) {
// Build the child UL only if children are displayed for the user.
if ($children) {
$output .= '
';
$output .= $children;
$output .= "
\n";
}
}
$output .= "
\n";
}
else {
$output .= '
'."\n";
}
}
}
return $output;
}
?>
Тут THEME_NAME имя темы
А ето в page.tpl.php файл
<?php theme_nice_menus_build($menu, $depth = -1, $trail = NULL) ?>
Сделал в точности как Вы сказали, скопировал этот кусок кода в файл 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 (:
подтему по ридми соорудил, все корректно работает.
что бы это могло быть...
Итс элайв!!)))
Поштудировав немного буржуйские бредни на этой (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 пихать ничего не нужно (;