+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Иерархичное меню и result_modifier

Приветствую! Наверное уже есть множество способов решения данной задачи, но я решил сделать новый велосипед. Зачем? Не знаю. Захотел сделать простое и кроткое решение. Пожалуй не только мне досаждает то, что у Битрикса стандартный шаблон модуля меню почему-то выдаёт массив элементов одним уровнем и вложенность определяется только по ключу DEPTH_LEVEL. Приходится выкручиваться всякими финтами с подстановкой </li></ul> в начале новой итерации цикла, но это эстетически никак не доставляет, полагаю, что никому.

Я написал простой result_modifier.php, который подкладываю в директорию шаблона:
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

$menuList = array();
$lev = 0;
$lastInd = 0;
$parents = array();
foreach ($arResult as $arItem) {
   $lev = $arItem['DEPTH_LEVEL'];
   
   if ($arItem['IS_PARENT']) {
      $arItem['CHILDREN'] = array();
   }
   
   if ($lev == 1) {
      $menuList[] = $arItem;
      $lastInd = count($menuList)-1;
      $parents[$lev] = &$menuList[$lastInd];
   } else {
      $parents[$lev-1]['CHILDREN'][] = $arItem;
      $lastInd = count($parents[$lev-1]['CHILDREN'])-1;
      $parents[$lev] = &$parents[$lev-1]['CHILDREN'][$lastInd];
   }
}
$arResult = $menuList;

В итоге мы имеем ключ CHILDREN у пункта меню, если у него имеются дочерние пункты меню, и соответственно дочерние у дочерних (we need to go deeper). Обычное и логичное разветвлённое иерархичное меню.

Вот код в файле: http://lotsmanov-va.narod.ru/files/bi...difier.txt

UPD 11.08.2011: Исправил имя ключа children на CHILDREN, совсем забыл про единство стиля.

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA