Как на битриксе сделать древовидное меню, с раскрытыми подразделами на активном пункте?

Доброе утро
Подскажите пожалуйста, есть задача сделать древовидное меню в Битриксе.
Делается это достаточно просто, стандартными средствами шаблон tree

Мне необходимо его подкорректировать, чтобы когда мы находимся в разделе, показывались подразделы, если они есть.
Сам код шаблона следующий:
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>

<?if (!empty($arResult)):?>

<div class="menu-sitemap-tree">
<ul>
<?
$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"]):?>
			<li<?if($arItem["CHILD_SELECTED"] !== true):?> class="menu-close"<?endif?>>
				<div class="folder" onClick="OpenMenuNode(this)"></div>
				<div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?>2</a></div>
				<ul>

	<?else:?>

		<?if ($arItem["PERMISSION"] > "D"):?>
				<li>
					<div class="page"></div>
					<div class="item-text"><a href="<?=$arItem["LINK"]?>"><?=$arItem["TEXT"]?>1</a></div>
				</li>
		<?endif?>

	<?endif?>

	<?$previousLevel = $arItem["DEPTH_LEVEL"];?>

<?endforeach?>

<?if ($previousLevel > 1)://close last item tags?>
	<?=str_repeat("</ul></li>", ($previousLevel-1) );?>
<?endif?>

</ul>
</div>
<?endif?>


Ещё есть файл result_modifier.php в котором заданы условия я так понимаю, выглядит он так:
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
	die();

//determine if child selected

$bWasSelected = false;
$arParents = array();
$depth = 1;
foreach($arResult as $i=>$arMenu)
{
	$depth = $arMenu['DEPTH_LEVEL'];

	if($arMenu['IS_PARENT'] == true)
	{
		$arParents[$arMenu['DEPTH_LEVEL']-1] = $i;
	}
	elseif($arMenu['SELECTED'] == true)
	{
		$bWasSelected = true;
		break;
	}
}

if($bWasSelected)
{
	for($i=0; $i<$depth-1; $i++)
		$arResult[$arParents[$i]]['CHILD_SELECTED'] = true;
}
?>


И файл script.js
function OpenMenuNode(oThis)
{
	if (oThis.parentNode.className == '')
		oThis.parentNode.className = 'menu-close';
	else
		oThis.parentNode.className = '';
	return false;
}


Помогите решить задачу, второй день уже парюсь)
  • Вопрос задан
  • 1023 просмотра
Решения вопроса 1
1 Уберите теги jquery, битрикс и javascript - не вводите людей в заблуждение - все это не имеет отношение к вопросу.
2 Я же писал уже вам - просто сверстайте его так.
3 Если вы хотите прямо эту верстку подкорректировать, то:

Уберите js вообще полностью. Вообще соотрите все что в файле.
строки
<li<?if($arItem["CHILD_SELECTED"] !== true):?> class="menu-close"<?endif?>>
        <div class="folder" onClick="OpenMenuNode(this)"></div>

замените на следующие:
<li<?if($arItem["SELECTED"] != "Y"):?> class="menu-close"<?endif?>>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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