TreeView для разделов в 1C Bitrix

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    06.02.2022
  • Категория
    1С-Битрикс
Задача:Собрать и вывести разделы каталога в виде дерева

Каждого разработчика на битрикс бесит компонент catalog.section.list, все эти бордеры, марджины… Соберем массив с понятным деревом разделов на раз-два!

Итак, в основе мы все равно будем использовать компонент catalog.section.list, дабы дать пользователю возможность изменять настройки и получать различную глубину вложенности и т.д.

в result_modifier.php компонента собираем массив с подразделами

function __sectionSort($a, $b)
{
	if ($a['SORT'] == $b['SORT']) {
		return 0;
	}
	return ($a['SORT'] < $b['SORT']) ? -1 : 1;
}

if (!empty($arResult['SECTIONS'])) {
	$rsSection = CIBlockSection::GetList(
		array('DEPTH_LEVEL' => 'desc'),
		$arFilter,
		false,
		array('ID', 'NAME', 'IBLOCK_SECTION_ID', 'DEPTH_LEVEL', 'SORT',"SECTION_PAGE_URL")
	);
	$arSectionList = array();
	$arDepthLavel = array();
	while($arSection = $rsSection->GetNext(true, false))
	{
		$arSectionList[$arSection['ID']] = $arSection;
		$arDepthLavel[] = $arSection['DEPTH_LEVEL'];
	}
	$arDepthLavelResult = array_unique($arDepthLavel);
	rsort($arDepthLavelResult);
	$i_MaxDepthLevel = $arDepthLavelResult[0];
	for( $i = $i_MaxDepthLevel; $i > 1; $i-- )
	{
		foreach ( $arSectionList as $i_SectionID => $ar_Value )
		{
			if( $ar_Value['DEPTH_LEVEL'] == $i )
			{
				$arSectionList[$ar_Value['IBLOCK_SECTION_ID']]['SUB_SECTION'][] = $ar_Value;
				unset( $arSectionList[$i_SectionID] );
			}
		}
	}

	usort($arSectionList, "__sectionSort");
	$arResult['arSectionList'] = $arSectionList;
}

Не трудно догадаться, куда мы сложили все данные…

Теперь выводим по необходимому шаблону, для этого декларируем метод

function recursivRenderMenu($arSectionList)
{
    foreach ($arSectionList as $arSection)
    {
        if( count($arSection['SUB_SECTION']) > 0  )
        {
			echo '<li>';
				echo '<a href="#" >'.$arSection['NAME'].'</a>';
				echo '<button class="submenu-trigger"></button>';
				echo '<ul>';
					echo recursivRenderMenu($arSection['SUB_SECTION']);
				echo '</ul>';
			echo '</li>';
        }
        else
        {
            echo '<li>'.$arSection['NAME'].'</li>';
        }
    }
}

В месте, где нам необходима менюшка :

echo recursivRenderMenu($arResult['arSectionList']);

По сути — все, данный код экономит кучу нервов и времени!

Еще нет коммментариев. Будь первым!

Оформить заказ в Devstages