2012-04-12 3 views
0

У меня есть счетчик пунктов меню, которые в основном добавить дополнительную ценность в качестве класса в системе меню:РНР сброс счетчика силы до 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 (хотя № 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>'; 
} 

ответ

2

При использовании static переменные, значения переменной не будет сбрасываться между последующими выполнений того же кода. Это экспресс-цель static. Избавьтесь от него, если вы не хотите этого поведения.

+0

Спасибо, к сожалению, нет инкрементного значения при удалении статики, просто потому, что этот кусок кода не находится в цикле. Все имеют схожие классы = "count-1". – swan

+0

Тогда я не совсем понимаю вопрос. Пожалуйста, предоставьте больше кода, предпочтительно полный самодостаточный пример, демонстрирующий проблему. – deceze

+0

Добавлен список пунктов меню и его контейнерные функции UL. благодаря – swan

Смежные вопросы