theme_menu_item () не работает - PullRequest
2 голосов
/ 14 июля 2010

У меня есть тема Drupal, которая называется wellington и находится в \ sites \ all \ themes \ wellington. Я хочу переопределить функцию menu_item и следовал инструкциям на http://drupal.org/node/310356.

Я хочу добавить класс в li, как описано.

Я попытался назвать функцию wellington_menu_item и попробовал phptemplate_menu_item, но безуспешно. Я могу поместить операторы печати в функцию, и они отображаются на экране.

Кроме того, я могу распечатать возвращаемую строку непосредственно перед ее возвратом, и она верна, но когда меню отображается, без разницы, отображается обычный основной, т.е. без переопределения.

Сама тема работает нормально, и я вижу CSS и HTML.

В тупике, есть идеи?

<?php
/**
* Theme override for theme_menu_item()
*/
function phptemplate_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';
  }

  // Add unique identifier
  static $item_id = 0;
  $item_id += 1;
  $id .= ' ' . 'menu-item-custom-id-' . $item_id;
  // Add semi-unique class
  $class .= ' ' . preg_replace("/[^a-zA-Z0-9]/", "", strip_tags($link));

  return '<li class="'. $class .'" id="' . $id . '">'. $link . $menu ."</li>\n";
}
?>

Он вызывается в page.tpl.php с использованием

<?php print theme('links', $primary_links); ?>

Ответы [ 2 ]

1 голос
/ 14 июля 2010

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

Я предлагаю вам использовать модуль * Разработчик тем , чтобы проверить, какой шаблон / функция используется для визуализации вашего элемента меню.

1 голос
/ 14 июля 2010

Не забудьте очистить кеш вашего браузера и кеш drupal, когда вы добавили функцию в template.php. Очистка кэша браузера не должна быть необходимой, но иногда полезна для других изменений.

(конфигурация сайта - производительность - очистка кэшированных данных)

...