Нумерация в меню. Решено.

Главные вкладки

Аватар пользователя Northruler Northruler 14 апреля 2011 в 7:21

Здравствуйте. Помогите пожалуйста сделать так, чтоб в каждом пункте меню выводилась цифра, соответствующая номеру пункта меню.
Пока смог вывести следующее:

<?php
function phptemplate_menu_item_link($link) {
  if (empty(
$link['localized_options'])) {
    
$link['localized_options'] = array();
  }
  if(
$link['menu_name']=='primary-links') {
         return 
'<span>1</span>' .l($link['title'], $link['href'], $link['localized_options']) ;
  }
  return 
l($link['title'], $link['href'], $link['localized_options']);
}
?>

Сейчас выводится цифра "1" в каждом пункте, а надо чтоб шло по возрастающей. Не хватает знаний пхп, помогите кто разбирается.

Комментарии

Аватар пользователя Dan Dan 14 апреля 2011 в 10:21

<?php
function phptemplate_menu_item_link($link) {
global $menu_item_count;
if(!isset($menu_item_count)){
$menu_item_count = 0;
}

if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
if($link['menu_name']=='primary-links') {
return ''.++$menu_item_count.'' .l($link['title'], $link['href'], $link['localized_options']) ;
}
return l($link['title'], $link['href'], $link['localized_options']);
}
?>

Аватар пользователя Northruler Northruler 14 апреля 2011 в 12:18

Dan, спасибо. Почти то что нужно, но тут подсчитывается общее количество пунктов включая выпадающее меню, а нужно чтоб счетчик переключался для каждого ul отдельно.
Через цсс не подходит:
- через фон,- не известно сколько будет пунктов, поэтому отпадает
- через list-style-type: decimal-leading-zero (первый должен быть нуль) - тоже не подходит, тк генерируется с точкой в конце цифры и должен работать ховер(меняться color)

Вариант с яваскрипт рассматривать буду только в крайнем случае, если не получится решить нормально.

Аватар пользователя Dan Dan 17 апреля 2011 в 10:38

Привет! Сорри, только сегодня высвободился.
Получилось следующее:
<?php
/**
* Implementation of theme_menu_item_link()
*/
function THEMENAME_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}

// Добавляем нумерацию только в 'primary-links'
if($link['menu_name'] == 'primary-links'){
// Это глобальный массив, в нём содержаться счётки подменю.
global $primary_menu_link_counter;
if(!isset($primary_menu_link_counter))
$primary_menu_link_counter = array();
// Основная магия. У всех подменю есть plid - parent ID
// Соответственно для каждого plid у нас будет свой счётчик.
// Таким образом получаем отдельную нумерацию для каждого подменю
if($link['plid']){
$link['title'] = ''.(int)$primary_menu_link_counter[$link['plid']]++.' '.$link['title'];
}
$link['localized_options']['html'] = true;
}
return l($link['title'], $link['href'], $link['localized_options']);
}
?>
Проверил, работает.

PS: если нужна нумерация с единицы, то заменяем "(int)$primary_menu_link_counter[$link['plid']]++" на "++$primary_menu_link_counter[$link['plid']]"