Недочет разработчиков? Ну похоже вроде...

Прислано: Химический Али

пт, 18/04/2008 - 06:57

Функция 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, но меня это не устраивает.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано marazmus в пт, 18/04/2008 - 07:10.

По моему, нужно темизировать не функцию menu_primary_links(), а использовать функцию theme_menu_links().


Опубликовано Химический Али в пт, 18/04/2008 - 07:41.

Попробовал темизировать ее, никакой реакции.

Придумал еще ход: разбирать массив $primary_links в page.tpl.php перед выводом, но этот вариант мне тоже не нравится.


Опубликовано Goodboy в пт, 18/04/2008 - 09:15.

У меня в page.tpl.php вот так сделано :

        <?php if (is_array($primary_links)) : ?>
        <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; ?>


Опубликовано Химический Али в пт, 18/04/2008 - 09:20.

Goodboy, спасибо, пока остановлюсь на этом, но вопрос о целесообразности "-active" и перекрытии функции остается открытым.


Опубликовано FuN_ViT в пт, 18/04/2008 - 13:49.

У меня дергается из page.tpl.php своя функция

<? if (isset($primary_links)) 
                                      print phptemplate_gen_menu( $primary_links, array('class' => 'links primary-links'),$node)?>

которая находится в template.php


Опубликовано Химический Али в пт, 18/04/2008 - 16:43.

а кодом своей функци поделитесь?


Опубликовано Химический Али в вт, 22/04/2008 - 05:42.

Как и предполагалось, косяк остался замечен не только мною и, к счастью, решения есть:

http://www.cascadingstyle.net/blog/2008/02/06/drupal-primary-menus-bette...
http://www.computerminds.co.uk/adding-active-class-primary-links


Новое на сайте

Ссылки партнёров