Здравствуйте.
Углубляясь в изучение 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" ... и как вы могли догадаться ни один из вариантов не подошел.
Надеюсь на вашу помощь.
Комментарии
Вы в своей теме переопределяете функцию темизации меню
http://api.drupal.ru/api/function/theme_menu_item/6
Результат естесственно влияет на все меню на сайте.
Я не знаю php и признаться не понимаю на что вы намекаете. Мне нужно переопределить какую-то другую функцию? Где ее посмотреть? В menu.inc?
Или же совсем что-то другое?
Люди, это достаточно часто-задаваемый вопрос и постоянно-возникающая задача, насчет темизации меню, и мне не совсем понятно, почему данные темы (не только в частности моя запись) так игнорируются в сравнении с тем что, к примеру, по установке Drupal и прочим, более простым вопросам, требующим разъяснения лишь в 0.000% случаях, создано куча самых подрообнейших записей.
Я обыскал друпал.ру и нашел множество тем, касающихся моего вопроса, но так и не смог разобраться.
У меня не стоит вопрос в html, css, я не ленюсь искать и читать хотя я немного ограничен по времени, и совсем чуть-чуть понимаю php, но всего этого мне оказалось недостаточно.
Я думаю что я не самый сообразительный но и не самый тормоз - с такими модулями как CCK и VIEWS (пусть пока и с самыми простейшими из их возможностей) я разобрался в_ ходе и за_ время, требуемое для прочтения их описания; как и с Таксономией, которая так пугает всех новичков. Но почему то с вопросом темизации меню я не могу справиться, хоть убейте.
Я очень вас прошу разъяснить простым языком раз и навсегда, когда возникает необходимость темизировать тот или иной фрагмент сайта, будь то форма поиска с кнопкой или еще что либо, чтобы можно было делать все это самостоятельно в будущем - где смотреть и что искать, на что обращать внимание, что с чем связывать?
Если написать это для вас сложно, то пожалуйста дайте ссылки на материалы, которые помогут человеку понять эту тему.
Я понимаю что ссылок можно самому найти предостаточно, взять к примеру одну: drupal.org, и там точно есть вся необходимая информация, но ... помогите пожалуйста.
Вы лучше скажите, что вы хотите получить?
Дополнительный CSS-класс в ссылке? Так это не нужно, они уже есть, какие надо.
Получить возможность менять код вывода, к примеру вместо:
<li class="leaf first active-trail">
<a class="active" title="" href="/">Главная</a>
</li>
</ul>
получить:
<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 - в общем-то не рекомендовал бы этот тег использовать.
Попробуйте [ru-api=theme_menu_item_link]. Если разобрать входной параметр, то там должно быть имя меню.
Вы имели ввиду http://api.drupal.ru/api/function/theme_menu_item_link/6 ? Хотя какая разница ... я не понял ровным счетом ничего
Теперь мне кажется до этого вообще дело не дойдет
$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 темы и написать любой свой код.
Это был мой вопрос. В любом случае спасибо что уделили мне столько своего времени.
Разбираться некогда, но тоже интересно решение этой задачи. Присоединяюсь к вопросу molp
Да в чем проблема-то? В template.php пишем:
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
if($link['menu_name']=='нужное_имя_меню') {
return 'Ваш код';
}
return l($link['title'], $link['href'], $link['localized_options']);
}
sadmin спасибо большое
Спасибо, Ваш способ работает, но ведь должен быть способ чтобы перекрыть фукцию именно для конкретного меню? Пытался по всякому и что то никак