Третье меню

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

Аватар пользователя Green Chest Green Chest 19 ноября 2008 в 23:05

Вывод меню я сделал в page.tpl.php вот таким образом:

  <?php foreach ($primary_links as $link_id => $link) : ?>

      //Сейчас выбранный пункт меню
    <?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 foreach ($mmenu as $link_id => $link) : ?>
    //...вывод пунктов меню
   <?php endforeach; ?>

и ничего не выводится, хотя, когда включаю вывод меню в регионе - оно есть...
Помогите пожалуйста, в чём дело? Как мне обратиться к этому меню???

Заранее спасибо.

Комментарии

Аватар пользователя kosilko kosilko 20 ноября 2008 в 0:28

Потому что массив переменных, передаваемых в шаблон, не содержит других меню, кроме праймари и секондари. Тут нужно работать с файлом template.php.

Аватар пользователя kosilko kosilko 20 ноября 2008 в 1:11

перехватить функции theme_menu_item , theme_menu_item_link, путем подмены оных на аналогичные с именами phptemplate_menu_item и т.п. В общем - берем оригиналы из сорцов друпала, копируем, вставляем, переименовываем и правим на свой вкус.

Аватар пользователя Green Chest Green Chest 20 ноября 2008 в 10:05

kosilko, я нашёл в menu.inc функции theme_menu_item , theme_menu_item_link, вот такой их код:

function theme_menu_item_link($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. Как это сделать?

Аватар пользователя glu2006 glu2006 20 ноября 2008 в 10:22

Вот в этих функциях и делайте, помните у каждого созданного меню есть параметр mid (для 5-й ветки) номер этого меню вот по нему простым ифом вы отсекаете все не нужные вам менюхи и правите линки только того меню которое Вам надо.
И пишите заодно в вопросе какую ветку друпала вы пользуете. ))

Аватар пользователя Geldora Geldora 20 ноября 2008 в 13:16

А css? Создаете нормальные меню через админку, у кажого меню есть свой id - правите как угодно, или в регионе вставляет и регион в див и тоже правите.

Аватар пользователя glu2006 glu2006 20 ноября 2008 в 13:23

Geldora wrote:
А css? Создаете нормальные меню через админку, у кажого меню есть свой id - правите как угодно, или в регионе вставляет и регион в див и тоже правите.

id - menu в css = $mid в 6-ке это $menu.

Аватар пользователя Green Chest Green Chest 20 ноября 2008 в 17:05

Однако, дизайн при таком выводе я настроить не смог, поэтому вывел меню вот так (опять таки большое спасибо Dan'у):

 <?php foreach (menu_tree_page_data("menu-mm2") as $name => $item) : $link = $item['link'];?>
   <a href=<?php echo check_url(url($link['href'])); ?>>
     <?php echo $link['title']; ?>
   </a>
 <?php endforeach; ?>
Аватар пользователя glu2006 glu2006 20 ноября 2008 в 19:26

Работает и слава богу ))).
Но по моему это взяться правой рукой за левое ухо.
Лучше поучить темизацию и разобраться в переменных и научиться оперировать ими.
К сожалению в 6-ке я Вам пока не советчик нету времени ее учить.
По 5-й ветке обращайтесь.

Аватар пользователя Green Chest Green Chest 20 ноября 2008 в 23:05

"Работает и слава богу )))."
Именно.

"Лучше поучить темизацию и разобраться в переменных и научиться оперировать ими."
Да, именно этим я и занимался предыдущие дни и буду заниматься дальше, но это была моя первая тема для Друпала и верстал я в первый раз. Следующий проект уже более "человечно" сделаю.