如何主题菜单块?


11

我创建了一个自定义菜单(我们称其为“ mynav”),在主题中,我专门为其创建了一个模板(block--menu--menu-mynav.tpl.php),其中包含:

<div id="mynav" class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php print $content ?>
</div>

这很好。

但是,我希望将ID应用于生成并包含在其中的无序列表$content。我想我需要创建一个MYTHEME_links__system_mynav_menu这样的函数:

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

但似乎没有影响。

我究竟做错了什么?



1
另一个问题是有关添加唯一菜单ID的问题,而这个问题更为笼统。
kiamlaluno

在计算器精确的问题:stackoverflow.com/questions/11935477/...
利爪

Answers:


25

为了使无序列表成为主题,您需要调用theme_menu_tree()。您可以编辑template.php来调用它。

function THEMENAME_menu_tree__MENUNAME($variables){
  return '<ul class="your-custom-class" id="your-custom-id">' . $variables['tree'] . '</ul>';
}

然后,如果要主题化链接,请调用theme_menu_link()。

function THEMENAME_menu_link__MENUNAME($variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

现在,Drupal 7的问题在于,在显示自定义菜单的活动记录时存在一个重大错误。

请参阅问题
#520106-无法动态设置活动路径
问题#942782-自定义菜单永远不会收到活动路径

如果您想要一些真正的自定义菜单,则基本上不走运。这些问题在drupal社区中由来已久,因此我不确定它们是否会很快得到解决。我不知道是否有一些PHP可以帮助您。您可以转向一些替代模块以帮助简化功能,例如Menu AttributesMenu Block。它们都可以帮助绕过Drupal 7中的粗糙菜单系统。


2

在主题的template.php中,这是在Drupal 6中执行操作的方式

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

在Drupal 7中,您需要致电

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_link似乎只能处理各个链接。我无法到达ul
RoToRa

我正在调查,不知道您是否可以。我知道在Drupal 7中,您对链接的控制权更大,但对菜单的控制权却更低。
iStryker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.