Вопрос по php
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, ...)