Как присвоить каждому пункту меню свой класс в 1c-битрикс

Дата редактирования: 12.03.2015 Просмотрен: 6285

Из коробки в 1с-битрикс пункты меню не имеют класса, кроме активного пункта. Это не всегда удобно. Что бы присвоить каждому пункту меню Битрикс свой уникальный класс - нужно отредактировать файл template.php шаблона меню, который находится в /bitrix/templates/ваш-шаблон/components/bitrix/menu/top_horizontal (шаблон верхнего горизонтального меню).

Я сделал копию папки top_horizontal и назвал ее top_v_horizontal. Потом открыл файл template.php и заменил содержимое на свое:

Было так:

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if (empty($arResult))
	return;

/*$lastSelectedItem = null;
$lastSelectedIndex = -1;

foreach($arResult as $itemIdex => $arItem)
{
	if (!$arItem["SELECTED"])
		continue;

	if ($lastSelectedItem == null || strlen($arItem["LINK"]) >= strlen($lastSelectedItem["LINK"]))
	{
		$lastSelectedItem = $arItem;
		$lastSelectedIndex = $itemIdex;
	}
} */

?>

<ul>
    <li><a href="/<?=SITE_DIR?>"></a></li>
<?foreach($arResult as $itemIdex => $arItem):?>
	<li<?if ($itemIdex == $lastSelectedIndex):?> class="current"<?endif;?>><a href="/<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
<?endforeach;?>
</ul>

Стало так:

<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

if (empty($arResult))
	return;

/*$lastSelectedItem = null;
$lastSelectedIndex = -1;

foreach($arResult as $itemIdex => $arItem)
{
	if (!$arItem["SELECTED"])
		continue;

	if ($lastSelectedItem == null || strlen($arItem["LINK"]) >= strlen($lastSelectedItem["LINK"]))
	{
		$lastSelectedItem = $arItem;
		$lastSelectedIndex = $itemIdex;
	}
} */

?>
<? $i=0;  ?>

<ul class="ul-top-menu">
   
<?foreach($arResult as $itemIdex => $arItem):?>
<?$i++ //Увеличиваем на 1?>
	<li<?if ($itemIdex == $lastSelectedIndex):?> class="current"<?endif;?>><a href="/<?=$arItem["LINK"]?>" class="menu-li<?=$i?>"><?=$arItem["TEXT"]?></a></li>
<?endforeach;?>
</ul>

Вся разница в том что я добавил счетчик и класс для ссылок меню а именно:

<? $i=0;  ?>

и увеличиваем на 1

<?$i++ ?>

и в нужно месте добавляем

class="menu-li<?=$i?>"

Теперь для каждого пункта меню добавляется в конце номер.

Но это не все если Вы создали свой шаблон меню, то теперь его нужно присвоить тому меню для которого требовалось его применить. Сделать это можно в файле где находится вызов самого меню у меня это /bitrix/templates/ваш-шаблон/header.php

<?
$APPLICATION->IncludeComponent('bitrix:menu', "top_v_horizontal", array(
					"ROOT_MENU_TYPE" => "top-v",
					"MENU_CACHE_TYPE" => "Y",
					"MENU_CACHE_TIME" => "36000000",
					"MENU_CACHE_USE_GROUPS" => "Y",
					"MENU_CACHE_GET_VARS" => array(),
					"MAX_LEVEL" => "1",
					"USE_EXT" => "N",
					"ALLOW_MULTI_SELECT" => "N"
				)
			);
?>

Строка

$APPLICATION->IncludeComponent('bitrix:menu', "top_v_horizontal", array(


Создан: 02.05.2013 12:50 | Отредактирован: 12.03.2015 06:39