Html Drupal覆盖自定义菜单模板

Html Drupal覆盖自定义菜单模板,html,drupal,Html,Drupal,我创建了一个名为“sub-top nav”的自定义菜单,现在我想覆盖html输出。特别是我想为每个项目添加一个独特的类,如 这就是它的外观: <div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav"> <div class="content"> <ul class="menu"> <li class="leaf first">&l

我创建了一个名为“sub-top nav”的自定义菜单,现在我想覆盖html输出。特别是我想为每个项目添加一个独特的类,如

这就是它的外观:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav">
    <div class="content">
    <ul class="menu">
      <li class="leaf first"><a title="Test 1" href="/test1">Test 1</a></li>
      <li class="leaf"><a title="Test 2" href="/test2">Test 2</a></li>
      <li class="leaf active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li>
      <li class="leaf last"><a title="Test 4" href="/test4">Test 4</a></li>
    </ul>
  </div>
</div>

我想把它改成:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav">
  <div class="content">
    <ul class="menu">
      <li class="leaf test1 first"><a title="Test 1" href="/test1">Test 1</a></li>
      <li class="leaf test2"><a title="Test 2" href="/test2">Test 2</a></li>
      <li class="leaf test3 active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li>
      <li class="leaf test4 last"><a title="Test 4" href="/test4">Test 4</a></li>
    </ul>
  </div>
</div>

这会给我更多的造型能力。 知道这是怎么回事吗


提前谢谢

您可以使用theme的template.php中的函数对这些菜单项执行几乎任何您想要的操作,包括添加类、ID等。

我现在就可以使用它了。这段代码可能也会帮助其他人! 它进入yourtheme/template.php

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';

  $class .= ' ' . preg_replace('/[^a-zA-Z0-9]/', '', strtolower(strip_tags($link)));

  return '<li class="'. $class .'">'. $link . $menu ."</li>\n";
}
函数phptemplate\u菜单项($link,$has\u children,$menu='',$in\u active\u trail=FALSE,$extra\u class=NULL){
$class=($menu‘展开’:($has_children‘折叠’:‘叶’);
如果(!空($extra_class))
$class.=''.$extra_class;
如果($in_active_trail)
$class.='活动轨迹';
$class.=''.preg_替换('/[^a-zA-Z0-9]/','',strtolower(带标签($link));
返回“
  • ”.$link.$menu.
  • \n”; }
    Drupal 7使用主题菜单链接而不是主题菜单项

    <?php
    function theme_menu_link(array $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";
    }
    ?>
    

    在浏览了API之后,我终于找到了一个简单的解决方案,可以用同一个类标记根菜单(这对于只设置顶级菜单的唯一样式很有用,同时保持它们的动态友好性)。只需使用plid而不是mlid。我注意到顶级菜单的plid始终为0

    function theme_menu_link(array $variables) {
      $element = $variables['element'];
      $sub_menu = '';
    
      $element['#attributes']['class'][] = 'menu-' . $element['#original_link']['plid'];
    
      if ($element['#below']) {
        $sub_menu = drupal_render($element['#below']);
      }
    
      $output = l($element['#title'], $element['#href'], $element['#localized_options']);
            $count = 1;
      return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
    }
    
    函数主题菜单链接(数组$变量){
    $element=$variables['element'];
    $sub_菜单=“”;
    $element['#attributes']['class'][='menu-'。$element['#original#u link']['plid'];
    如果($element['#below'])){
    $sub#u menu=drupal_render($element['#below']);
    }
    $output=l($element['#title']、$element['#href']、$element['#本地化选项']);
    $count=1;
    返回“.$output.$sub_菜单。”\n”;
    }
    
    好的,但它如何适用于自定义菜单?你能给我举个例子吗?“主题菜单链接而不是主题菜单链接”?这有什么意义?没错。“主题菜单链接而非主题菜单项”。