1С Битрикс Блог

Делаем меню на основе разделов и элементов инфоблока 1С Битрикс
1С Битрикс Блог
09.11.2016

Делаем меню на основе разделов и элементов инфоблока 1С Битрикс

Понадобилось мне вывести меню на основе разделов и элементов. Изучив стандартный компонент 1С Битрикс bitrix:menu.sections, я решил его использовать.

Для того, чтобы при обновлении не затерлись изменения, создаем в папке /bitrix/components/ папку с любым названием и копируем туда полностью компонент bitrix:menu.sections.

В этом компоненте уже собирается массив с разделами для меню. Нужно только добавить элементы в разделы в файле component.php:

$arSelect = array("ID", "IBLOCK_ID", "DETAIL_PAGE_URL", "IBLOCK_SECTION_ID", "NAME");
$arFilter = array(
	"ACTIVE" => "Y",
	"IBLOCK_ID" => $arParams["IBLOCK_ID"],
);

$rsElements = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
while($arElement = $rsElements->GetNext())
{
	$arResult["SECTIONS"][$arElement["IBLOCK_SECTION_ID"]]["ELEMENT_LIST"][] = $arElement;
}

Добавляем этот код перед циклом foreach($arResult["SECTIONS"] as $arSection), у меня это 118 строка. Далее остается только добавить эли элементы в массив aMenuLinksNew. Для этого вставляем код в массив foreach($arResult["SECTIONS"] as $arSection):

	foreach($arSection["ELEMENT_LIST"] as $arElement) {
$aMenuLinksNew[$menuIndex++] = array(
htmlspecialcharsbx($arElement["NAME"]),
$arElement["DETAIL_PAGE_URL"],
$arElement["DETAIL_PAGE_URL"],
array(
"FROM_IBLOCK" => true,
"IS_PARENT" => false,
"DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"]+1,
),
);
}

И изменяем значение ключа IS_PARENT у раздела на:

(empty($arSection["ELEMENT_LIST"])?false:true),

Коммментарии

Возврат к списку