В вселенские знатоки drupal молю о помощи )
То ли плохо искал на форуме, толи не знаю php так как нужно, но тем не менее не могу разобраться вот в чем.
Нужно переопределить ul в меню таким образом.
<ul class="sf-menu">
<li><a href=".">раздел1</a>
<ul>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
</ul>
</li>
<li><a href=".">раздел2</a>
<ul>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
</ul>
</li>
<li><a href=".">раздел3</a>
<ul>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
<li><a href=".">суб_раздел</a></li>
</ul>
</li>
</ul>
</div>
Видите толь первый ul имеет класс "sf-menu" а остальные остаются без классов.
Что сделано... в template.php
<?php
function phptemplate_menu_tree($tree) {
$ulclass .= '';
return '<ul class="'. $ulclass .'">'.$tree."</ul>\n";
}
function
phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class .= 'unique';
return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
}
?>
в page.tpl
<?php
$menu_name = 'primary-links';
print menu_tree($menu_name ) ;
?>
так вот имеем возможность заменить у LI классы на одинаковые и у UL тоже на одинаковые. Ну или там через цикл например поставить уникальные классы типа "my-class-1, my-class-2",да.
но вот именно как только у первой ul поменять класс на "sf-menu" а остальных оставить без классов? Вот незнаю.. Подскажите плиз!
Комментарии
Победил, но очень странным способом
$(".mainmenu ul").addClass("sf-menu");
$(".mainmenu ul li ul").removeClass("sf-menu");
});
Ну как бы за неимением альтернативы ) и не очень богатым знанием php.
Ведь наверняка можно просто как-то взять ) и посчитать UL элементы и переопределить первый.. )
Ну ладно цель достигнута хотя и оч странным способом.
Внесу и я свой вклад. Решение нашёл здесь
в файле своей темы template.php заворачиваю все ul без классов
<?php function pkeu_menu_tree__main_menu($variables) {
return '<ul>' . $variables['tree'] . '</ul>';
}?>
Затем в page.tpl.php при выводе меню заменяю первый встречающийся текст "ul" на "ul class="myclass""
<?php $menu = menu_tree('main-menu');
$str = render($menu);
function str_replace_once($search, $replace, $text)
{
$pos = strpos($text, $search);
return $pos!==false ? substr_replace($text, $replace, $pos, strlen($search)) : $text;
}
$str = str_replace_once('ul', 'ul class="my-class-menu" ', $str);
print $str;?>
Функция str_replace_once заменяет только первое встречающееся совпадение строки. Если дочерним ul нужны классы, определяйте их при "заворачивании" в template.php, а после изменяйте класс первому ul.