Древовидное меню
17.04.2024
310

У компонента меню $arResult выглядит примерно следующем образом
Array
(
[TEXT] => О Volume
[LINK] => /o-volume/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
)
[CHAIN] => Array
(
[0] => О Volume
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
[1] => Array
(
[TEXT] => Продукция
[LINK] => /products/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[class] =>
[block] => --products
)
[CHAIN] => Array
(
[0] => Продукция
)
[DEPTH_LEVEL] => 1
[IS_PARENT] => 1
)
[2] => Array
(
[TEXT] => Моторные масла
[LINK] => /products/motornye-masla/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
[PICTURE] => /upload/iblock/ef7/cfp79q7yhz9zm102wlfxl0sur7cpc6nr.png
)
[CHAIN] => Array
(
[0] => Продукция
[1] => Моторные масла
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[3] => Array
(
[TEXT] => Трансмиссионные масла
[LINK] => /products/transmissionnye-masla/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[PICTURE] => /upload/iblock/be7/be7d71ebb44d6a756bed6a35d11c880d.png
)
[CHAIN] => Array
(
[0] => Продукция
[1] => Трансмиссионные масла
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[4] => Array
(
...
)
[5] => Array
(
...
)
[6] => Array
(
[TEXT] => UTTO
[LINK] => /products/utto/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 4
[PARAMS] => Array
(
[PICTURE] => /upload/iblock/d84/d84b40789922047aed38f303de37a433.png
)
[CHAIN] => Array
(
[0] => Продукция
[1] => UTTO
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[7] => Array
(
[TEXT] => Область применения
[LINK] => /oblast-primeneniya/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 2
[PARAMS] => Array
(
)
[CHAIN] => Array
(
[0] => Область применения
)
[DEPTH_LEVEL] => 1
[IS_PARENT] => 1
)
[8] => Array
(
[TEXT] => Легковой и легкий коммерческий транспорт
[LINK] => /oblast-primeneniya/legkovoy-i-legkiy-kommercheskiy-transport/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
[0] => /oblast-primeneniya/legkovoy-i-legkiy-kommercheskiy-transport/
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
[FROM_IBLOCK] => 1
[PICTURE] => /upload/iblock/98a/p8clmyokbsepy0zajrnr41cb0nqy1f8f.png
[IS_PARENT] =>
[DEPTH_LEVEL] => 1
)
[CHAIN] => Array
(
[0] => Область применения
[1] => Легковой и легкий коммерческий транспорт
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[9] => Array
(
[TEXT] => Коммерческий транспорт и спецтехника
[LINK] => /oblast-primeneniya/kommercheskiy-transport/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
[0] => /oblast-primeneniya/kommercheskiy-transport/
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[FROM_IBLOCK] => 1
[PICTURE] => /upload/iblock/494/4949034e8d820a88793ab7e2066dd541.png
[IS_PARENT] =>
[DEPTH_LEVEL] => 1
)
[CHAIN] => Array
(
[0] => Область применения
[1] => Коммерческий транспорт и спецтехника
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[10] => Array
(
...
)
[11] => Array
(
...
)
[12] => Array
(
...
)
[13] => Array
(
...
)
[14] => Array
(
[TEXT] => Блог
[LINK] => /articles/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 3
[PARAMS] => Array
(
[arrow] => Y
)
[CHAIN] => Array
(
[0] => Блог
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
[15] => Array
(
[TEXT] => Новости
[LINK] => /news/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 4
[PARAMS] => Array
(
[arrow] => Y
)
[CHAIN] => Array
(
[0] => Новости
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
)?>
В файле result_modifier.php добавим обработку, если такого файла нет, создайте его в папке шаблона компонента меню
$tree = [];
$path = [];
foreach ($arResult as $element) {
$currentDepth = $element['DEPTH_LEVEL'];
if ($element['DEPTH_LEVEL'] == 1) {
// Это элемент первого уровня
$tree[] = $element;
$path[$currentDepth] = &$tree[count($tree) - 1];
} else {
// Это элементы более глубоких уровней
$parentDepth = $currentDepth - 1;
if (!isset($path[$parentDepth])) {
continue; // Если нет родителя, пропускаем элемент
}
if (!isset($path[$parentDepth]['CHILDREN'])) {
$path[$parentDepth]['CHILDREN'] = [];
}
$path[$parentDepth]['CHILDREN'][] = $element;
$path[$currentDepth] = &$path[$parentDepth]['CHILDREN'][count($path[$parentDepth]['CHILDREN']) - 1];
}
}
$arResult = $tree;
После обработки мы увидим уже древовидную структуру и проще будет с ним работать в шаблоне компонента и не составит труда внедрить любую верстку.
Array
(
[TEXT] => О Volume
[LINK] => /o-volume/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
)
[CHAIN] => Array
(
[0] => О Volume
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
[1] => Array
(
[TEXT] => Продукция
[LINK] => /products/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[class] =>
[block] => --products
)
[CHAIN] => Array
(
[0] => Продукция
)
[DEPTH_LEVEL] => 1
[IS_PARENT] => 1
[CHILDREN] => Array
(
[0] => Array
(
[TEXT] => Моторные масла
[LINK] => /products/motornye-masla/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
[PICTURE] => /upload/iblock/ef7/cfp79q7yhz9zm102wlfxl0sur7cpc6nr.png
)
[CHAIN] => Array
(
[0] => Продукция
[1] => Моторные масла
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[1] => Array
(
[TEXT] => Трансмиссионные масла
[LINK] => /products/transmissionnye-masla/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[PICTURE] => /upload/iblock/be7/be7d71ebb44d6a756bed6a35d11c880d.png
)
[CHAIN] => Array
(
[0] => Продукция
[1] => Трансмиссионные масла
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[2] => Array
(
...
)
[3] => Array
(
...
)
[4] => Array
(
...
)
)
)
[2] => Array
(
[TEXT] => Область применения
[LINK] => /oblast-primeneniya/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 2
[PARAMS] => Array
(
)
[CHAIN] => Array
(
[0] => Область применения
)
[DEPTH_LEVEL] => 1
[IS_PARENT] => 1
[CHILDREN] => Array
(
[0] => Array
(
[TEXT] => Легковой и легкий коммерческий транспорт
[LINK] => /oblast-primeneniya/legkovoy-i-legkiy-kommercheskiy-transport/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
[0] => /oblast-primeneniya/legkovoy-i-legkiy-kommercheskiy-transport/
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 0
[PARAMS] => Array
(
[FROM_IBLOCK] => 1
[PICTURE] => /upload/iblock/98a/p8clmyokbsepy0zajrnr41cb0nqy1f8f.png
[IS_PARENT] =>
[DEPTH_LEVEL] => 1
)
[CHAIN] => Array
(
[0] => Область применения
[1] => Легковой и легкий коммерческий транспорт
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[1] => Array
(
[TEXT] => Коммерческий транспорт и спецтехника
[LINK] => /oblast-primeneniya/kommercheskiy-transport/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
[0] => /oblast-primeneniya/kommercheskiy-transport/
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 1
[PARAMS] => Array
(
[FROM_IBLOCK] => 1
[PICTURE] => /upload/iblock/494/4949034e8d820a88793ab7e2066dd541.png
[IS_PARENT] =>
[DEPTH_LEVEL] => 1
)
[CHAIN] => Array
(
[0] => Область применения
[1] => Коммерческий транспорт и спецтехника
)
[DEPTH_LEVEL] => 2
[IS_PARENT] =>
)
[2] => Array
(
...
)
[3] => Array
(
...
)
[4] => Array
(
...
)
[5] => Array
(
...
)
)
)
[3] => Array
(
[TEXT] => Блог
[LINK] => /articles/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 3
[PARAMS] => Array
(
[arrow] => Y
)
[CHAIN] => Array
(
[0] => Блог
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
[4] => Array
(
[TEXT] => Новости
[LINK] => /news/
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => D
[ITEM_INDEX] => 4
[PARAMS] => Array
(
[arrow] => Y
)
[CHAIN] => Array
(
[0] => Новости
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
)?>