Темизация дополнительного меню

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

Аватар пользователя user-1 user-1 18 декабря 2011 в 14:29

Добрый день .

Необходимо заключить дополнительное меню в таблицу .

Нашел 2 функции относящиеся к нему .

<?php
function theme_menu_tree($variables) {
  return 
'<ul class="menu clearfix">' $variables['tree'] . '</ul>';
}

function 

theme_menu_link(array $variables) {
  
$element $variables['element'];
  
$sub_menu '';

  if (

$element['#below']) {
    
$sub_menu drupal_render($element['#below']);
  }
  
$output l($element['#title'], $element['#href'], $element['#localized_options']);
  return 
'<li' drupal_attributes($element['#attributes']) . '>' $output $sub_menu "</li>\n";
}
?>

При замене тегов , они меняются у всех меню .

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

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 18 декабря 2011 в 15:41

В теме (template.php) ищем или добавляем

function template_preprocess_page(&$variables) { ...
...

$variables['secondary_menu'] = theme_get_setting('toggle_secondary_menu') ? menu_secondary_menu() : array();

Далее думаю понятно

Аватар пользователя user-1 user-1 19 декабря 2011 в 4:53

Сложновато для меня пока .
Пытался добиться нужного эффекта вышеперечисленными мною функциями , но в табличные теги оборачиваются все меню на странице , да и верхние уровни тоже .

Всего 2 уровня меню .
Каждый элемент первого уровня необходимо расположить в ячейке td .

Третий день голову ломаю , пора уже спать , может завтра озарит .

Аватар пользователя sas@drupal.org sas@drupal.org 19 декабря 2011 в 11:44

в файле includes/theme.inc найдите функцию function theme_links($variables)скопируйте ее в template.php Вашей темы замените theme на название вашей темы, очистите кеш, в функции найдете ul и li которые Ваш надо менять , там же вставите условие проверки на то что это Secondary типа<?php if($variables['attributes']['id'] == 'secondary-menu-links')?>
Дерзайте, спрашивайте, помогаю думающим и делающим.

Аватар пользователя Torvild Torvild 21 декабря 2011 в 2:03

Господа-друпалеры,а как найти id своего меню?
Создал в админке своё меню с машинным именем category...
Однако,при добавлении условия

<?php if($variables['attributes']['id'] == 'menu-category')?>

(также пробовалось не 'menu-category',а 'category-menu-links','menu-category','menu_category','category' и прочие вариации с перестановкой слов местами и заменой тире на подчеркивание...)
Выдает ошибку:
Notice: Undefined index: attributes в функции mytheme_link() (строка 214 в файле /home/*****/****/*****/sites/all/themes/mytheme/template.php).

Вот моя функция полностью:

<?php
function mytheme_link($variables){
  if(
$variables['attributes']['id'] == 'category'){
  return 
'<a href="' check_plain(url($variables['path'], $variables['options'])) . '"' drupal_attributes($variables['options']['attributes']) . '><span></span>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>';}
  else{
  return 
'<a href="' check_plain(url($variables['path'], $variables['options'])) . '"' drupal_attributes($variables['options']['attributes']) . '>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>';}
}
 
?>

214 строка и есть строка с if($variables['attributes']['id'] == 'category')

Аватар пользователя user-1 user-1 21 декабря 2011 в 2:47

У меня тоже с этим условием проблемы были .

А так не пробовали ?

function имятемы_link__айдименю($variables){...}

Кстати , после того как создали меню , еще раз зайдите и увидите там префикс menu .

В вашем случае id меню будет menu_category .

Аватар пользователя Torvild Torvild 21 декабря 2011 в 2:51

Вот так вот попробовал:


<?php function mytheme_link__menu_category($variables){
return 
'<a href="' check_plain(url($variables['path'], $variables['options'])) . '"' drupal_attributes($variables['options']['attributes']) . '><span></span>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>';
?>

И без изменений..кеш 100 раз чистил!(((

Когда просто пишешь:


<?php function mytheme_link($variables){
  return 
'<a href="' check_plain(url($variables['path'], $variables['options'])) . '"' drupal_attributes($variables['options']['attributes']) . '><span></span>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>'?>

Тогда всё в порядке - меню темизируется,но ВСЁ МЕНЮ НА САЙТЕ! Cray 2
А мне моё меню категорий только надо темизировать.. (((

Аватар пользователя Torvild Torvild 21 декабря 2011 в 3:07

user-1 wrote:
Вижу только пустой спан в отличии от оригинальной функции .
А какая у вас стоит задача ?

Да,там только span..
Там к span'у этому gif цепляется,а при наведении на ссылку он вращается..(такое вот ТЗ...)
Меню уже свёрстано в HTML/CSS,надо на Drupal теперь его прицепить.

Аватар пользователя user-1 user-1 21 декабря 2011 в 3:21

Попробуйте

<?php
function имятемы_menu_link__айдименю(array $variables) {
  
$element $variables['element'];
  
$sub_menu '';

  if (

$element['#below']) {
    
$sub_menu drupal_render($element['#below']);
  }
  
$output l($element['#title'], $element['#href'], $element['#localized_options']);
  return 
'<li' drupal_attributes($element['#attributes']) . '><span></span>' $output $sub_menu "</li>\n";
}
?>
Аватар пользователя user-1 user-1 21 декабря 2011 в 4:18

Прежде не доводилось встречать подобных конструкций .

А для чего это вам ?

Расположить ссылку внутри спана для вас недопустимо ?

Аватар пользователя Torvild Torvild 21 декабря 2011 в 12:25

У меня вот такой CSS:

.region-header #block-menu-menu-category { width:230px; overflow:hidden; /*float:right;*/float:left;}
.region-header #block-menu-menu-category .content { padding:0;}
.region-header #block-menu-menu-category .content ul { margin:0}
.region-header #block-menu-menu-category .content li { background:url(../images/bg-li-categories.gif) bottom repeat-x;}
.region-header #block-menu-menu-category .content li a { color:#9fa4a8; font-size:12px; text-decoration:none; -webkit-transition:all .3s ease; -moz-transition:all .3s ease; padding:7px 0px 8px 9px; display:block}
.region-header #block-menu-menu-category .content li a:hover { background:#118dec; color:#fff}
.region-header #block-menu-menu-category .content li a span { display:inline-block; width:14px; height:13px; background:url(../images/a-categories.gif) no-repeat 0 0 #797979; -webkit-transition:all .6s ease; -moz-transition:all .6s ease; vertical-align:middle; margin-right:14px;}
.region-header #block-menu-menu-category .content li a:hover span { -moz-transform:rotate(360deg); -webkit-transform:rotate(360deg); transform:rotate(360deg); background:url(../images/a-categories.gif) no-repeat 0 0 #000}
Аватар пользователя user-1 user-1 21 декабря 2011 в 21:36

Если вы про сплеша , то не совсем понимаю ваш вопрос , там потребуется другое .
"имятемы_menu_link__айдименю" - это я другому человеку предложил , для решения его задачи .