Функция menu_primary_links() из menu.inc (строка 832) формирует массив ссылок с параметрами для дальнейшего формирования html-кода.
В частности, если пункт меню активен, в конец стиля она дописывает модификатор "-active":
if (menu_in_active_trail_in_submenu($cid, $pid)) {
$index .= "-active";
}
Мне это показалось неверным, т.к. для написания CSS-стиля для этого пункта было бы лучше использовать модификатор "[пробел]active", ведь куда удобнее использовать стиль типа li.active, нежели кучу типа li.menu-3-2-1-active.
Прав ли я?
И вопрос в довесок: как переопределить для своей темы функцию menu_primary_links()? Я скопировал ее в свой template.php, переименовал в phptemplate_menu_primary_links() и изменил под себя (исправил вышеописанный "баг"), но никакого действия это не возымело. Наверное, ее нельзя переопределить?
зы. пока я тупо поправил menu.inc, но меня это не устраивает.
Комментарии
По моему, нужно темизировать не функцию menu_primary_links(), а использовать функцию theme_menu_links().
Попробовал темизировать ее, никакой реакции.
Придумал еще ход: разбирать массив $primary_links в page.tpl.php перед выводом, но этот вариант мне тоже не нравится.
У меня в page.tpl.php вот так сделано :
<ul>
<?php $primary_link_first = true; foreach ($primary_links as $link_id => $link) : ?>
<li<?php $primary_link_class = ""; if (stristr($link_id, 'active')) $primary_link_class .= "active"; if ($primary_link_first) $primary_link_class .= " first"; $primary_link_class = trim($primary_link_class); if ($primary_link_class) print ' class="'.$primary_link_class.'"'; $primary_link_first = false; ?>><?php print l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
Goodboy, спасибо, пока остановлюсь на этом, но вопрос о целесообразности "-active" и перекрытии функции остается открытым.
У меня дергается из page.tpl.php своя функция
print phptemplate_gen_menu( $primary_links, array('class' => 'links primary-links'),$node)?>
которая находится в template.php
а кодом своей функци поделитесь?
Как и предполагалось, косяк остался замечен не только мною и, к счастью, решения есть:
http://www.cascadingstyle.net/blog/2008/02/06/drupal-primary-menus-bette...
http://www.computerminds.co.uk/adding-active-class-primary-links
Ребят, подскажите пожалуйста...начал устанавливать новую тему professional_theme... и после установки на экране вся информация пропала...написана ошибка следующая
Fatal error: Call to undefined function i18n_menu_translated_tree() in /home/b/blabla/blabla.ru/public_html/sites/all/themes/themes/professional_theme/templates/page.tpl.php on line 79
подскажите пожалуйста что делать? как вернуть старую тему и всю информацию?