0

我有一个菜单项计数器,基本上将增量值作为一个类添加到菜单系统:

    <?php
    if ($element['#original_link']['depth'] == 1) {
      static $counter = 0;
      $counter++;
      $class = 'count-' .  $counter;
    }
    $output = 'some output code build';
    return '<li class="' . $class . '">' .$output .'</li>';
    ?>

请注意,代码位于每个菜单项内(在循环或数组之外)。该代码将简单地输出无序列表的列表,没有 UL:

<li class="count-1">One</li>
<li class="count-2">Two</li>, ...etc.

这工作正常,直到我更改菜单的来源。

1)。一种是使用我的CMS的系统菜单,

2)。后者正在使用该系统菜单的块输出,

并且两者都输出类似的菜单结构,除了后者从 #1 继续计数器而不是从 1 重置(尽管一旦 #2 接管该位置,#1 就不会被激活)。我还没弄清楚为什么,但似乎#2 是#1 的延续。虽然我希望每个都应该从 1 开始递增。

我不能在这里使用重置。除了我的 CMS 对计数器的处理方式之外,还有什么明显的我错过了 PHP 可以在这里处理的事情吗?

任何指针将不胜感激。谢谢

更新,实际使用的代码:

function mytheme_menu_link(array $variables) {
  //dpm($variables);
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  if ($element['#original_link']['menu_name'] == variable_get('menu_main_links_source', 'main-menu')) {
    if ($element['#original_link']['depth'] == 1) {     
       static $counter = 0;
       $counter++;                    
       $element['#attributes']['class'][] = 'count-' .  $counter;
    }
  }

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

/**
 * Implements theme_menu_tree()
    No helpful variables, except for a flattened render of tree
 */
function mytheme_menu_tree__main_menu($variables) {
  return '<ul class="menu">' . $variables['tree'] . '</ul>';
}
4

1 回答 1

2

使用static变量时,变量的值不会在相同代码的后续执行之间重置。这就是static. 如果您不想要这种行为,请摆脱它。

于 2012-04-12T06:48:43.247 回答