Меню - жестко закодированная основная навигация с поднавигацией на страницу
Моя основная навигация жестко закодирована (так и должно быть; графические цели).
Во-первых, как я могу определить, какая из них "активна" (текущая страница)?
Во-вторых, в зависимости от того, какая из них активна, как я могу показать дочерние ссылки этой ссылки на боковой панели? Я думал о такой возможности, но для этого потребуется создать тонны блоков для меню, а затем включить их только на родительской странице. Это похоже на большую работу для чего-то, о чем должен позаботиться модуль из.
Я нашел http://drupal.org/project/menu_block что выглядит многообещающе, но я не совсем понимаю, как это использовать в моей ситуации.
Я предпочитаю иметь полный контроль над тем, как будут выглядеть меню (пользовательский файл .tpl)
2 answers
Этот код покажет текущие дочерние ссылки:
$mn = menu_tree_page_data($menu-name);
foreach ($mn as $menu) {
if (!empty($menu['link']['in_active_trail']) AND is_array($menu['below']) AND !is_null($menu['below'])) {
echo menu_tree_output($menu['below']);
}
}
Я не уверен, какая часть вам нужна жестко закодированная, но если это все, кроме тега a
, то тогда на помощь приходит вспомогательная функция l()
:
<li class="menu-item" id="foo">
<span>
<img src="menu_foo.png" alt="icon showing foo"/>
<?php print l("Foo", "original/path/to/foo") ?>
</span>
</li>
Теперь, если вы получите доступ к "/исходному/пути/к/foo" или (одному из его) псевдонимов, помощник l()
автоматически добавит класс "активный" в тег a
, созданный l()
.
Если по какой-то причине вам нужен l()
вне a
, или если вы хотите настроить сам a
(например, добавив к нему разметку), вы можете используйте код, указанный в l()
, чтобы определить активность текущего элемента. Поместите это в качестве помощника в template.php вашей темы:
function _my_theme_is_active($path) {
$active = FALSE;
if (($path == $_GET['q'] || ($path == '<front>' && drupal_is_front_page())) &&
(empty($options['language']) || $options['language']->language == $language->language)) {
$active = TRUE;
}
return $active;
}
Очевидно, что my_theme
- это название вашей темы.
Затем в файлах tpl.php
или где-либо в области вашей темы вы можете использовать функцию:
<li>
<a href="<?php print url("original/path/to/foo") ?>" <?php print (_my_theme_is_active("original/path/to/foo") ? 'class="active"' : ' ') ?> id="foo-1">
Foo
</a>
</li>
Помните, что вы используете url(), чтобы перехватить псевдоним для орингиального пути, но вы /делаете/передаете исходный (системный) путь в _my_theme_is_active помощник.