Как сделать разные стили для родительских и дочерних пунктов меню

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

Аватар пользователя BadD BadD 20 декабря 2009 в 17:25

Вобщем есть меню вида
Пункт 1
Пункт 2
Пункт 3
Пункт 3.1
Пункт 3.2
Пункт 4

Как можно определить разные стили вывода для родительских пунктов (1-3) и для дочерних (3.1-3.2)? Хочу у дочерних сделать меньше шрифт и отступы другие, но в моем случае правка css допускает манипуляции только с раскрывающимися пунктами.

Комментарии

Аватар пользователя STINGER STINGER 23 декабря 2009 в 3:33

не знаю, сработает или нет, но попробуйте добавить в template.php что-то типа такого:

<?php
function phptemplate_menu_links($links$attributes = array()) {

  if (!

count($links)) {
    return 
'';
  }
  
$level_tmp explode('-'key($links));
  
$level $level_tmp[0];
  
$output "<ul class=\"links-$level ".$attributes['class']. "\" id=\"".$attributes['id']."\">\n";

  

$num_links count($links);
  
$i 1;

  foreach (

$links as $index => $link) {
    
$output .= '<li';

    

$output .= ' class="';
    if (
stristr($index'active')) {
      
$output .= 'active';
    }
// frontpage AND current-link in menu is <front>
    
elseif((drupal_is_front_page()) && ($link['href']=='<front>')){
      
$link['attributes']['class'] = 'active';//add class active to <li
      
$output .= 'active';//add class active to <a
    
}
    if (
$i == 1) {
      
$output .= ' first'; }//задаст 1-му эдементу класс "first"
    
if ($i != $num_links) {
      
$output .= ' item-'.$i.''}//задаст каждому элемену класс "item-'его_порядковый_номер'"
    
else {$output .= ' last'; }//задаст последнему эдементу класс "last"

    

$output .= '"';

    

$output .= ">"l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
    
$i++;
  }
  
$output .= '</ul>';
  return 
$output;
}
?>

Теперь у каждого пункта меню по идее должен быть свой класс (item-1, item-2...), а там уже поиграйтесь с CSS задавая на основе определенного годительского класса определенный стиль его дочерним элементам (по вашему примеру что-то типа: ul.класс li.item-3 li {стиль оформления пунктов 3.1, 3.2...}).

P.S. Возможно не сработает, возможно сработает, но кто-то назовет такую реализацию сделанной через "Ж", но по крайней мере лучше попытаться что-то сделать методом проб и ошибок, нежели сидеть без дела.

Аватар пользователя Rick Rick 12 апреля 2010 в 17:30

Добавьте вот это:

<?phpfunction THEMENAME_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';
    $link = '<span>'.$link.'</span>';
  }
  static $imm = 0;
  $imm += 1;
  return '<li class="'. $class .' m'.$imm.'">'. $link . $menu ."</li>\n";
}
?>

У метода один минус - при добавлении новых пунктов меню, ID меняется.