[РЕШЕНО] Темизация: как указать конкретное меню?

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

Аватар пользователя molp molp 19 марта 2010 в 22: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 molp 21 марта 2010 в 8:50

Я не знаю php и признаться не понимаю на что вы намекаете. Мне нужно переопределить какую-то другую функцию? Где ее посмотреть? В menu.inc?
Или же совсем что-то другое?

Аватар пользователя molp molp 21 марта 2010 в 14:20

Люди, это достаточно часто-задаваемый вопрос и постоянно-возникающая задача, насчет темизации меню, и мне не совсем понятно, почему данные темы (не только в частности моя запись) так игнорируются в сравнении с тем что, к примеру, по установке Drupal и прочим, более простым вопросам, требующим разъяснения лишь в 0.000% случаях, создано куча самых подрообнейших записей.

Я обыскал друпал.ру и нашел множество тем, касающихся моего вопроса, но так и не смог разобраться.

У меня не стоит вопрос в html, css, я не ленюсь искать и читать хотя я немного ограничен по времени, и совсем чуть-чуть понимаю php, но всего этого мне оказалось недостаточно.

Я думаю что я не самый сообразительный но и не самый тормоз - с такими модулями как CCK и VIEWS (пусть пока и с самыми простейшими из их возможностей) я разобрался в_ ходе и за_ время, требуемое для прочтения их описания; как и с Таксономией, которая так пугает всех новичков. Но почему то с вопросом темизации меню я не могу справиться, хоть убейте.

Я очень вас прошу разъяснить простым языком раз и навсегда, когда возникает необходимость темизировать тот или иной фрагмент сайта, будь то форма поиска с кнопкой или еще что либо, чтобы можно было делать все это самостоятельно в будущем - где смотреть и что искать, на что обращать внимание, что с чем связывать?

Если написать это для вас сложно, то пожалуйста дайте ссылки на материалы, которые помогут человеку понять эту тему.

Sad

Я понимаю что ссылок можно самому найти предостаточно, взять к примеру одну: drupal.org, и там точно есть вся необходимая информация, но ... помогите пожалуйста.

Аватар пользователя direqtor direqtor 21 марта 2010 в 15:26

Вы лучше скажите, что вы хотите получить?

Дополнительный CSS-класс в ссылке? Так это не нужно, они уже есть, какие надо.

Аватар пользователя molp molp 22 марта 2010 в 14:42

Получить возможность менять код вывода, к примеру вместо:

<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>

только чтобы сказывалось это только на моем созданном меню.

Аватар пользователя direqtor direqtor 24 марта 2010 в 5:15

B - в общем-то не рекомендовал бы этот тег использовать.

Попробуйте [ru-api=theme_menu_item_link]. Если разобрать входной параметр, то там должно быть имя меню.

Аватар пользователя molp molp 22 марта 2010 в 20:33

"direqtor" wrote:
Попробуйте theme_menu_item_link. Если разобрать входной параметр, то там должно быть имя меню.

Вы имели ввиду http://api.drupal.ru/api/function/theme_menu_item_link/6 ? Хотя какая разница ... я не понял ровным счетом ничего

"direqtor" wrote:
B - в общем-то не рекомендовал бы этот тег использовать.

Теперь мне кажется до этого вообще дело не дойдет

Аватар пользователя molp molp 23 марта 2010 в 8:59

Я не знаю как я должен сказать чтобы стало понятно что я не понимаю программирование ...

Мне нужно как тут http://www.drupal.ru/node/22932 только обрамить своим html тегами каждый пункт меню.
Почти так же http://www.drupal.ru/node/33131 только не Primari Links.
Как тут http://www.drupal.ru/node/23665 только не для всех меню а для моего конкретного.

Аватар пользователя direqtor direqtor 23 марта 2010 в 9:11

Мне вот только теперь понятно, что написать код перекрывающий функцию темизации вы не можете. Вы хотя бы CSS и HTML знаете?

Аватар пользователя direqtor direqtor 23 марта 2010 в 16:38

Тогда читайте темизацию. http://drupal.org/theme-guide/6
Особенно разделы Working with CSS и Overriding themable output. Для применения правил CSS у каждого блока с меню есть свой уникальный id, используя который, вы можете изменять внешний вид всех его пунктов. Если же вам этого мало и надо добавить свой HTML, то функцию, которая ведает выводом ссылки в меню и содержит его имя, я вам подсказал. Осталось перекрыть её в template.php темы и написать любой свой код.

Аватар пользователя molp molp 23 марта 2010 в 17:09

"direqtor" wrote:
Осталось перекрыть её в template.php темы...

Это был мой вопрос. В любом случае спасибо что уделили мне столько своего времени.

Аватар пользователя direqtor direqtor 24 марта 2010 в 5:22

Да в чем проблема-то? В 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']);
}
Аватар пользователя RoSk0 RoSk0 19 июля 2010 в 14:25

"direqtor" wrote:
Да в чем проблема-то? В template.php пишем:

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