AntonEssential
@AntonEssential

Как передать в массив css class?

Добрый день господа, подскажите, пожалуйста, как добавить css класс в массив меню.
<?
$aMenuLinks = Array(
	Array(
		"", 
		"/index.php/", 
		Array(), 
		Array(), 
		"" 
	),
        Array(
		"Каталог", 
		"/catalog/", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Доставка", 
		"/Доставка/", 
		Array(), 
		Array(), 
		"" 
	)
);
?>
  • Вопрос задан
  • 3474 просмотра
Решения вопроса 1
Вам надо класс на какой то отдельный пункт меню?
И не может не быть стандартного шаблона, все дефолтные шаблоны из поставки лежат в папке bitrix/components/menu/templates/

Далее вам надо лишь скопировать папку интересующего вас шаблона меню в папку с шаблоном сайта. А есть еще проще способ, ставим меню близкое по функционалу, включаем режим редактирования в публичной части, наводим курсор на меню, шаблон которого хотим скопировать, появится блок опций (там будет еще кнопка редактировать пункты меню), справка от шестеренки нажимаем на стрелочку вызывая доп.менюшку и там выбираем копировать шаблон. Называете его как нибудь (в эту папку будут скопированы файлы), выбираете Копировать в шаблон сайта - Текущий. И все. Если другие галочки не трогать откроется для редактирования файл шаблона.
Где будет что то на подобии:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?>
<div class="menu menu--header">
<? if (!empty($arResult)): ?>
  <ul class='nav__items nav__items--header'>
  <? $previousLevel = 0; foreach ($arResult as $arItem):?>
  <? if ($previousLevel && $arItem["DEPTH_LEVEL"] < $previousLevel): ?>
    <?= str_repeat("</ul></li>", ($previousLevel - $arItem["DEPTH_LEVEL"])); ?>
  <? endif ?><? if ($arItem["IS_PARENT"]): ?><? if ($arItem["DEPTH_LEVEL"] == 1): ?>
  <li class='dropdown nav__item  nav__item--main'><a href="<?= $arItem["LINK"] ?>" class="nav__link nav__link--main dropdown-toggle"><?= $arItem["TEXT"] ?></a>
  <ul class='dropdown-menu'>
  <? else: ?>
  <li<? if ($arItem["SELECTED"]): ?> class="dropdown active"<? endif ?>>
  <a href="<?= $arItem["LINK"] ?>" class="dropdown-toggle"><?= $arItem["TEXT"] ?></a>
  <ul class='dropdown-menu'>
  <? endif ?>
  <? else: ?>
    <? if ($arItem["DEPTH_LEVEL"] == 1): ?>
      <li class="nav__item nav__item--main"><a class="nav__link nav__link--main" href="<?= $arItem["LINK"] ?>"><?= $arItem["TEXT"] ?></a></li>
    <? else: ?>
      <li><a href="<?= $arItem["LINK"] ?>"><?= $arItem["TEXT"] ?></a></li>
    <?endif ?>
  <?endif ?>
  <? $previousLevel = $arItem["DEPTH_LEVEL"]; ?>
<? endforeach ?>
  <? if ($previousLevel > 1): //close last item tags?>
    <?= str_repeat("</ul></li>", ($previousLevel - 1)); ?>
  <? endif ?>
  </ul>
<? endif ?>
</div>


Если вам надо именно в файле меню добавить возможность к каждому отдельно взятому пункту приписать свой класс (допустим для иконок), то надо:
1. Прописать параметр передаваемый в шаблон, к примеру:
<?
$aMenuLinks = Array(
	Array(
		"", 
		"/index.php/", 
		Array(), 
		Array("menu_item_class" => "test_class"), 
		"" 
	),
        Array(
		"Каталог", 
		"/catalog/", 
		Array(), 
		Array(), 
		"" 
	),
	Array(
		"Доставка", 
		"/Доставка/", 
		Array(), 
		Array(), 
		"" 
	)
);
?>


2. В шаблоне меню сделать вывод этого параметра:
class="menu_item <?if(isset($arItem["PARAMS"]["menu_item_class"])):?><?=$arItem["PARAMS"]["menu_item_class"]?><?endif?>"


UPD: Посмотрел ваш пример ниже. Основываясь на нем, я бы сделал вот так:
В файле шаблона:
<?foreach($arResult as $arItem):
  if($arParams["MAX_LEVEL"] == 1 && $arItem["DEPTH_LEVEL"] > 1) continue;?>
    <li>
      <a href="<?=$arItem["LINK"]?>" class="menu__item_link
      <?if($arItem["SELECTED"]):?>active-menu <?endif?>
      <?if(isset($arItem["PARAMS"]["menu_item_class"])):?><?=$arItem["PARAMS"]["menu_item_class"]?><?endif?>
      "><?=$arItem["TEXT"]?></a>
    </li>
<?endforeach?>

Класс menu_item_link - просто класс, на который можно повесить стили, что бы не городить конструкции вида:
ul>li>a{}
Что весьма плохо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AntonEssential
@AntonEssential Автор вопроса
Вот собственно темплейт меню:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?if (!empty($arResult)):?>
<ul class="clear-fix">

<?
foreach($arResult as $arItem):
	if($arParams["MAX_LEVEL"] == 1 && $arItem["DEPTH_LEVEL"] > 1) 
		continue;
?>
	<?if($arItem["SELECTED"]):?>
		<li><a href="<?=$arItem["LINK"]?>" class="active-menu"><?=$arItem["TEXT"]?></a></li>
	<?else:?>
		<li><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?></a></li>
	<?endif?>
	
<?endforeach?>

</ul>
<?endif?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы