Руслан Савенок
530 повідомлень
#15 років тому
Есть такая функция

function theme_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}
return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
}


Как в li первого уровня у которого есть дети добавить html теги после $link?
Максим Ф.
3195 повідомлень
#15 років тому
function theme_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}
if ($has_children) $link .= 'тэги';
return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
}

наверное так...
Руслан Савенок
530 повідомлень
#15 років тому
Цитата ("AlekartRu"):
наверное так...

а дело в том что выберет всех li у которых есть дети, а нужно только первого уровня =)
Руслан Савенок
530 повідомлень
#15 років тому
/**
* Generate the HTML output for a menu tree
*
* @ingroup themeable
*/
function theme_menu_tree($tree) {
return '<ul class="menu">'. $tree .'</ul>';
}

/**
* Generate the HTML output for a menu item and submenu.
*
* @ingroup themeable
*/
function theme_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}
return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
}

Я плохо понимаю, но вроде каждому новому дереву добавляется первая функция. И вот вижу такую функцию

function menu_navigation_links($menu_name, $level = 0) {
// Don't even bother querying the menu table if no menu is specified.
if (empty($menu_name)) {
return array();
}

// Get the menu hierarchy for the current page.
$tree = menu_tree_page_data($menu_name);

// Go down the active trail until the right level is reached.
while ($level-- > 0 && $tree) {
// Loop through the current level's items until we find one that is in trail.
while ($item = array_shift($tree)) {
if ($item) {
// If the item is in the active trail, we continue in the subtree.
$tree = empty($item) ? array() : $item;
break;
}
}
}

// Create a single level of links.
$links = array();
foreach ($tree as $item) {
if (!$item) {
$class = '';
$l = $item;
$l = $item;
$l = $item;
if ($item) {
$class = ' active-trail';
}
// Keyed with the unique mlid to generate classes in theme_links().
$links . $class] = $l;
}
}
return $links;
}



пхп вообще не соображаю, вижу просто похожесть js =)
Виталий Ж.
42 повідомлення
#15 років тому

<html>
<head>
</head>

<body>
<ul>
<li> 1 </li>
<ul>
<li> 1 </li>
<li> 2 </li>
<li> 3 </li>
</ul>
<li> 3 </li>
</ul>


</body>
</html>


Этот код сгенерировал двухуровневый список. Если я правильно понял, это то, что нужно.
Приходим к выводу, что тег <li> в коде функции для вложенного списка лишний.

Поэтому заменяем
 return '<li class="'. $class .'">'. $link . $menu ."</li>\n";

на

if ($has_children) $link .= 'тэги';
return $link . $menu."\n";


В этом случае 'тэги' могут содержать

 <ul> список </ul> 

Что и требуется для вложенного списка.

Возможно, что я не правильно понял суть задачи...
Руслан Савенок
530 повідомлень
#15 років тому
Переменная link отдает ссылку на пункт меню, по этому ей что то друго писать нельзя
Николай Т.
205 повідомлень
#15 років тому
Цитата ("zombieman"):
Цитата ("AlekartRu"):
наверное так...

а дело в том что выберет всех li у которых есть дети, а нужно только первого уровня =)

измени количество аргументов у функции theme_menu_item добавь аргумент уровень вложенности
theme_menu_item(0, ...);
function theme_menu_item ($level, ...)