Возможно ли * необязательно * переопределить тему в Drupal 6? - PullRequest
2 голосов
/ 02 июня 2010

Я хочу переопределить темы только одного (пользовательского) меню. Я могу сделать это с помощью phptemplate_menu_tree (), но - конечно - он отменяет рендеринг всех меню.

Я пытался вернуть FALSE (очевидный метод IMO), если меню не является тем, которое я хочу переопределить, но это не вызывает вызов функции переопределенной темы.

Моя единственная альтернатива (когда в меню есть что-то отличное от конкретного) - вызывать переопределенную функцию из phptemplate_menu_tree () - но, похоже, это разрушает весь смысл системы переопределения, поскольку функция рендеринга по умолчанию будет жестко закодировано в нем.

Я надеюсь, что объяснение ясно, и любая помощь очень ценится - tks.

UPDATE

Для справки в будущем я объясню, как я это решил.

Прежде всего, рендеринг меню начинается с этой функции в menu.module: <pre> function menu_block($op = 'list', $delta = 0) { $menus = menu_get_menus(); // The Navigation menu is handled by the user module. unset($menus['navigation']); if ($op == 'list') { $blocks = array(); foreach ($menus as $name => $title) { // Default "Navigation" block is handled by user.module. $blocks[$name]['info'] = check_plain($title); // Menu blocks can't be cached because each menu item can have // a custom access callback. menu.inc manages its own caching. $blocks[$name]['cache'] = BLOCK_NO_CACHE; } return $blocks; } else if ($op == 'view') { $data['subject'] = check_plain($menus[$delta]); $data['content'] = menu_tree($delta); return $data; } }

Если вы хотите изменить только то, как отображается отдельный элемент (ссылки), вы можете использовать систему тем (есть множество ссылок на то, как это сделать) - но если вы хотите получить полный контроль над тем, как весь отображается дерево меню (например, оборачивая вывод во вложенные DIV, чтобы его можно было центрировать на странице), тогда невозможно переопределить menu_block ().

Поэтому я удалил меню, которое хотел визуализировать иначе, чем страница администрирования блоков (site building-> blocks), и визуализировал меню прямо в моем page.tpl.php, используя код, подобный следующему: (угловые скобки удалены) <pre> $m = menu_tree_page_data('my-menu-id'); $o = "DIV"; foreach($m as $k => $v){ $o .= "SPAN {$v['link']['title']} /SPAN"; } $o .= "/DIV"; echo $o;

Надеюсь, это поможет.

Ответы [ 3 ]

1 голос
/ 21 июня 2010

У меня был неоднозначный успех в переопределениях меню template.php, чтобы заставить CSS-классы и идентификаторы или HTML-код выводиться.

Вы можете использовать Block Theme при включении меню как блока, но я никогда не пробовал его. http://drupal.org/project/blocktheme

Если вы хотите заняться шаблоном, вот функции переопределения меню дзен ...

function zen_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }

  // If an item is a LOCAL TASK, render it as a tab
  if ($link['type'] & MENU_IS_LOCAL_TASK) {
    $link['title'] = '<span class="tab">' . check_plain($link['title']) . '</span>';
    $link['localized_options']['html'] = TRUE;
  }

  return l($link['title'], $link['href'], $link['localized_options']);
}

function zen_menu_local_tasks() {
  $output = '';

  if ($primary = menu_primary_local_tasks()) {
    $output .= '<ul class="tabs primary clear-block">' . $primary . '</ul>';
  }
  if ($secondary = menu_secondary_local_tasks()) {
    $output .= '<ul class="tabs secondary clear-block">' . $secondary . '</ul>';
  }

  return $output;
}
0 голосов
/ 27 апреля 2011

я зарегистрировал новую функцию темы в моем template.php с именем primary_links (потому что я хотел только настроить это меню определенным образом), создал функцию mytheme_primary_links () в моем template.php, обновил кэш, и Drupal добавил бы моя функция темы в системе затем изменила функцию темы на primary_links со ссылок на мою пользовательскую функцию theme primary_links - это позволяет мне настраивать только это 1 меню - вы могли бы сделать это и подключиться, где когда-либо, чтобы изменить функцию темы, вызываемую для ваших ссылок

Chris

0 голосов
/ 02 июня 2010

Вы можете использовать секции модуль или посмотреть, как он переключает тему для определенных пунктов меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...