Раздельное двухуровневое меню (модификация)

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

Аватар пользователя boneg boneg 5 ноября 2010 в 18:50

Здравствуйте, уважаемые пользователи Drupal! Совсем недавно имею дело с Drupal, но всё больше и больше нравится мне работать с этой штукой, познавая ее гибкость. Сейчас хочу вспомнить один сниппет, которым многие пользуются. Речь идет о раздельном меню с использованием primary/secondary links. Я решил воспользоваться этим сниппетом для реализации меню на сайте. Но в проекте дизайна для каждого пункта меню планировался разный CSS и разный скрипт, который выполнялся при клике. Посему я решил немножко изменить код сниппета, чтоб получить нумерацию пунктов вида:

<li class="punkt1">
<li class="active2">
<li class="punkt3">
<li class="punkt4">

Для этого в template.php вставляем немного измененный код вместо предложенного по ссылке описанной выше:

<?php

function phptemplate_links($links$attributes = array()) {

  if (!

count($links)) {
    return 
'';
  }
  
$new 0;//add counter for menuitems
  
  
$level_tmp explode('-'key($links));
  
$level $level_tmp[0];
  
$output "<ul class=\"links-$level ".$attributes['class']. "\">\n";
  foreach (
$links as $index => $link) {
    
$output .= '<li';
    
$new++;//add 1 to counter
    
if (stristr($index'active')) {
      
$output .= ' class="active'.$new.'"';
    }
// 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 .= ' class="active"';//add class active to <a
    
}
    
    else 
$output .= " class=\"punkt".$new."\"";//add class punkt to <li
    
$output .= ">"l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
  }
  
$output .= '</ul>';

  return 

$output;
}
?>

Проверьте,всё работает! Теперь мы получили каждый пункт с разным классом и можем легко стилизовать наше меню!! Надеюсь, кому-нибудь поможет такой мод.

Комментарии

Аватар пользователя nikolasiii nikolasiii 1 декабря 2010 в 8:57

данное решение конфликтует с модулем ajax-comments, так как заменяет классы не только у primary и secondary links, но и у комментариев, а код упомянутого модуля цепляет действия непосредственно на дефолтовые имена линков.

Аватар пользователя boneg boneg 21 декабря 2010 в 18:55

Как-то не подумал об этом, использовал такую штуках только на красивых "визитках". Для портала такое решение явно не подойдет...
В таких случаях только вариант извлекать машинное имя меню как делает модуль Nice Menu