[РЕШЕНО] Темизация: как указать конкретное меню?
Прислано: molp
пт, 19/03/2010 - 19:41
Здравствуйте.
Углубляясь в изучение Drupal все глубже и глубже я постепенно подобрался к темизации.
Пока что для меня это совсем темный лес но так же было и с тем что уже позади поэтому стараюсь не отчаиваться не смотря на то что с конкретной темой вожусь уже несколько дней.
Моя задача темизировать одно из меню (да да они самые - ох уж эти круглые уголки).
Итак, я создаю файл template.php со следующим содержимым:
<?php
function имятемы_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, но желаемого результата не получал.
Еще вопрос в догонку, какое именно имя у меню? При создании я называл свое меню к примеру "menu1". Но я заметил что ссылка на странице меню в админке выглядит так "%/admin/build/menu-customize/menu-menu1". Так какое же имя использовать?
Хотя я экспериментировал и с "menu1" и с "menu-menu1" и даже с "menu_menu1" ... и как вы могли догадаться ни один из вариантов не подошел.
Надеюсь на вашу помощь.
- molp's blog
- Для комментирования войдите или зарегистрируйтесь
Вы в своей теме переопределяете функцию темизации меню
http://api.drupal.ru/api/function/theme_menu_item/6
Результат естесственно влияет на все меню на сайте.
- Для комментирования войдите или зарегистрируйтесь
Я не знаю php и признаться не понимаю на что вы намекаете. Мне нужно переопределить какую-то другую функцию? Где ее посмотреть? В menu.inc?
Или же совсем что-то другое?
- Для комментирования войдите или зарегистрируйтесь
Люди, это достаточно часто-задаваемый вопрос и постоянно-возникающая задача, насчет темизации меню, и мне не совсем понятно, почему данные темы (не только в частности моя запись) так игнорируются в сравнении с тем что, к примеру, по установке Drupal и прочим, более простым вопросам, требующим разъяснения лишь в 0.000% случаях, создано куча самых подрообнейших записей.
Я обыскал друпал.ру и нашел множество тем, касающихся моего вопроса, но так и не смог разобраться.
У меня не стоит вопрос в html, css, я не ленюсь искать и читать хотя я немного ограничен по времени, и совсем чуть-чуть понимаю php, но всего этого мне оказалось недостаточно.
Я думаю что я не самый сообразительный но и не самый тормоз - с такими модулями как CCK и VIEWS (пусть пока и с самыми простейшими из их возможностей) я разобрался в_ ходе и за_ время, требуемое для прочтения их описания; как и с Таксономией, которая так пугает всех новичков. Но почему то с вопросом темизации меню я не могу справиться, хоть убейте.
Я очень вас прошу разъяснить простым языком раз и навсегда, когда возникает необходимость темизировать тот или иной фрагмент сайта, будь то форма поиска с кнопкой или еще что либо, чтобы можно было делать все это самостоятельно в будущем - где смотреть и что искать, на что обращать внимание, что с чем связывать?
Если написать это для вас сложно, то пожалуйста дайте ссылки на материалы, которые помогут человеку понять эту тему.
:(
Я понимаю что ссылок можно самому найти предостаточно, взять к примеру одну: drupal.org, и там точно есть вся необходимая информация, но ... помогите пожалуйста.
- Для комментирования войдите или зарегистрируйтесь
Вы лучше скажите, что вы хотите получить?
Дополнительный CSS-класс в ссылке? Так это не нужно, они уже есть, какие надо.
- Для комментирования войдите или зарегистрируйтесь
Получить возможность менять код вывода, к примеру вместо:
<ul class="menu"> <li class="leaf first active-trail"> <a class="active" title="" href="/">Главная</a> </li> </ul>
получить:
<ul class="menu"> <li class="leaf first active-trail"> <b class=r4></b><b class=r3></b><b class=r2></b><b class=r1></b><b class=r1></b> <a class="active" title="" href="/">Главная</a> <b class=r1></b><b class=r1></b><b class=r2></b><b class=r3></b><b class=r4></b> </li> </ul>
только чтобы сказывалось это только на моем созданном меню.
- Для комментирования войдите или зарегистрируйтесь
B - в общем-то не рекомендовал бы этот тег использовать.
Попробуйте
theme_menu_item_link. Если разобрать входной параметр, то там должно быть имя меню.
- Для комментирования войдите или зарегистрируйтесь
Попробуйте theme_menu_item_link. Если разобрать входной параметр, то там должно быть имя меню.
Вы имели ввиду http://api.drupal.ru/api/function/theme_menu_item_link/6 ? Хотя какая разница ... я не понял ровным счетом ничего
B - в общем-то не рекомендовал бы этот тег использовать.
Теперь мне кажется до этого вообще дело не дойдет
- Для комментирования войдите или зарегистрируйтесь
$link['menu_name']. Я сказал разобрать входной параметр, а не понимать его.
- Для комментирования войдите или зарегистрируйтесь
Я не знаю как я должен сказать чтобы стало понятно что я не понимаю программирование ...
Мне нужно как тут http://www.drupal.ru/node/22932 только обрамить своим html тегами каждый пункт меню.
Почти так же http://www.drupal.ru/node/33131 только не Primari Links.
Как тут http://www.drupal.ru/node/23665 только не для всех меню а для моего конкретного.
- Для комментирования войдите или зарегистрируйтесь
Мне вот только теперь понятно, что написать код перекрывающий функцию темизации вы не можете. Вы хотя бы CSS и HTML знаете?
- Для комментирования войдите или зарегистрируйтесь
CSS и HTML знаю
- Для комментирования войдите или зарегистрируйтесь
Тогда читайте темизацию. http://drupal.org/theme-guide/6
Особенно разделы Working with CSS и Overriding themable output. Для применения правил CSS у каждого блока с меню есть свой уникальный id, используя который, вы можете изменять внешний вид всех его пунктов. Если же вам этого мало и надо добавить свой HTML, то функцию, которая ведает выводом ссылки в меню и содержит его имя, я вам подсказал. Осталось перекрыть её в template.php темы и написать любой свой код.
- Для комментирования войдите или зарегистрируйтесь
Осталось перекрыть её в template.php темы...
Это был мой вопрос. В любом случае спасибо что уделили мне столько своего времени.
- Для комментирования войдите или зарегистрируйтесь
Разбираться некогда, но тоже интересно решение этой задачи. Присоединяюсь к вопросу molp
- Для комментирования войдите или зарегистрируйтесь
Да в чем проблема-то? В template.php пишем:
function phptemplate_menu_item_link($link) { if (empty($link['localized_options'])) { $link['localized_options'] = array(); } if($link['menu_name']=='нужное_имя_меню') { return 'Ваш код'; } return l($link['title'], $link['href'], $link['localized_options']); }
- Для комментирования войдите или зарегистрируйтесь
sadmin спасибо большое
- Для комментирования войдите или зарегистрируйтесь
Да в чем проблема-то? В template.php пишем:
Спасибо, Ваш способ работает, но ведь должен быть способ чтобы перекрыть фукцию именно для конкретного меню? Пытался по всякому и что то никак
- Для комментирования войдите или зарегистрируйтесь






Комментарии