PHP强制重置计数器为0

时间:2012-04-12 06:28:45

标签: php drupal

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

    <?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重置的事实(尽管#1在#2接管的地方没有被激活)。我还没弄清楚为什么,但似乎#2是#1的延续。虽然我希望每个人都应该从1开始增量。

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

非常感谢任何指针。感谢

更新,实际使用的代码:

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

1 个答案:

答案 0 :(得分:2)

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