Меню - жестко закодированная основная навигация с поднавигацией на страницу


Моя основная навигация жестко закодирована (так и должно быть; графические цели).

Во-первых, как я могу определить, какая из них "активна" (текущая страница)?

Во-вторых, в зависимости от того, какая из них активна, как я могу показать дочерние ссылки этой ссылки на боковой панели? Я думал о такой возможности, но для этого потребуется создать тонны блоков для меню, а затем включить их только на родительской странице. Это похоже на большую работу для чего-то, о чем должен позаботиться модуль из.

Я нашел http://drupal.org/project/menu_block что выглядит многообещающе, но я не совсем понимаю, как это использовать в моей ситуации.

Я предпочитаю иметь полный контроль над тем, как будут выглядеть меню (пользовательский файл .tpl)

Author: kiamlaluno, 2011-06-09

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']);
      }
    }
 0
Author: Karl Jóhann, 2011-06-09 07:36:00

Я не уверен, какая часть вам нужна жестко закодированная, но если это все, кроме тега 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 помощник.

 1
Author: berkes, 2011-06-09 08:57:56