Вывод меню я сделал в page.tpl.php вот таким образом:
//Сейчас выбранный пункт меню
<?php if (stristr($link_id, 'active')) : ?>
<?php echo $link['title'] ?>
<?php endif; ?>
//Сейчас не выбранный пункт меню
<?php if (stristr($link_id, 'active') == false) : ?>
<a href=<?php echo check_url(url($link['href'])); ?>>
<?php echo $link['title']; ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
Однако, я могу обратиться только к $primary_links и $secondary_links, создаю своё меню с машинным названием mmenu, создаём в нём кучу пунктов, обращаюсь к нему в цикле так же как к primary и secondary:
//...вывод пунктов меню
<?php endforeach; ?>
и ничего не выводится, хотя, когда включаю вывод меню в регионе - оно есть...
Помогите пожалуйста, в чём дело? Как мне обратиться к этому меню???
Заранее спасибо.
Комментарии
Потому что массив переменных, передаваемых в шаблон, не содержит других меню, кроме праймари и секондари. Тут нужно работать с файлом template.php.
kosilko, хм... Подскажите, что мне прописать в template.php, чтобы у меня стали доступны в шаблоне переменные меню?
перехватить функции theme_menu_item , theme_menu_item_link, путем подмены оных на аналогичные с именами phptemplate_menu_item и т.п. В общем - берем оригиналы из сорцов друпала, копируем, вставляем, переименовываем и правим на свой вкус.
kosilko, я нашёл в menu.inc функции theme_menu_item , theme_menu_item_link, вот такой их код:
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
return l($link['title'], $link['href'], $link['localized_options']);
}
function theme_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";
}
Каким образом вообще я могу здесь обратиться к своему меню, ведь это функция общая для всех меню?
Не понимаю сути работы этого.
Для однообразия мне бы просто сделать доступным своё меню, для обращения к нему в foreach в page.tpl.php. Как это сделать?
Вот в этих функциях и делайте, помните у каждого созданного меню есть параметр mid (для 5-й ветки) номер этого меню вот по нему простым ифом вы отсекаете все не нужные вам менюхи и правите линки только того меню которое Вам надо.
И пишите заодно в вопросе какую ветку друпала вы пользуете. ))
Я Друпал 6.6 использую. Там тоже можно с mid?
Как мне получить-то в function theme_menu_item этот mid?
Суть вообще не понятна...
А css? Создаете нормальные меню через админку, у кажого меню есть свой id - правите как угодно, или в регионе вставляет и регион в див и тоже правите.
id - menu в css = $mid в 6-ке это $menu.
Спасибо.
Сделал вывод меню вот таким образом (огромное спасибо Dan'у):
<?php print menu_tree_output( menu_tree_page_data("menu-mmenu"));?>
Однако, дизайн при таком выводе я настроить не смог, поэтому вывел меню вот так (опять таки большое спасибо Dan'у):
<a href=<?php echo check_url(url($link['href'])); ?>>
<?php echo $link['title']; ?>
</a>
<?php endforeach; ?>
Работает и слава богу ))).
Но по моему это взяться правой рукой за левое ухо.
Лучше поучить темизацию и разобраться в переменных и научиться оперировать ими.
К сожалению в 6-ке я Вам пока не советчик нету времени ее учить.
По 5-й ветке обращайтесь.
"Работает и слава богу )))."
Именно.
"Лучше поучить темизацию и разобраться в переменных и научиться оперировать ими."
Да, именно этим я и занимался предыдущие дни и буду заниматься дальше, но это была моя первая тема для Друпала и верстал я в первый раз. Следующий проект уже более "человечно" сделаю.