+7 495 008 8452
  • Загрузка
Выберите ваш цвет

Упрощаем кастомизацию многоуровнего меню

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Упрощаем кастомизацию многоуровнего меню

Меню - это, пожалуй, самый неприятный блок для кастомизации на сайте. Не знаю, кого не встречал (себя в том числе) - не нравится его кастомить и все тут. Подход под катом развеет боязнь и даже самое страшное меню превратится в приятное глазу разработчика.

Прежде всего, я не советую брать стандартные шаблоны меню и "править их под себя", если только вы не верстальщик-интегратор в одном лице. Ибо css различны, блоки различны, очень много гемора вылезет. Посему, я советую для шаблона меню брать вот такой шаблон-костяк:
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();?>
<?if (!empty($arResult)):?>
   <?foreach($arResult as $i => $arItem):?>
      <a href="<?=$arItem['LINK']?>"><?=$arItem['TEXT']?></a>
   <?endforeach?>
<?endif;?>
А теперь представим, что перед нами трехуровневое меню. Загляните в системный шаблон меню horizontal_multilevel и проникнетесь. Работает, использует какие-то хитрые приемы, но чудовищно для кастомизации.

Посему, к шаблону выше прилагается примерно такой result_modifier.php, который превращает линейное меню в дерево:
if (!empty($arResult)) {
   $parentID = false;
   $subParentID = false;
   foreach($arResult as $i => $arItem) {
      if ($arItem['DEPTH_LEVEL'] == 1) {
         $parentID = $i;
         $arResult[$i]['ITEMS'] = array();
      } elseif ($arItem['DEPTH_LEVEL']==2 && $parentID!==false) {
         $arResult[$parentID]['ITEMS'][$i] = $arItem;
         $subParentID = $i;
         unset($arResult[$i]);
      } elseif ($arItem['DEPTH_LEVEL']==3 && isset($arResult[$parentID]['ITEMS'][$subParentID])) {
         if (!isset($arResult[$parentID]['ITEMS'][$subParentID]['ITEMS'])) {
            $arResult[$parentID]['ITEMS'][$subParentID]['ITEMS'] = array();
         }
         $arResult[$parentID]['ITEMS'][$subParentID]['ITEMS'][] = $arItem;
         unset($arResult[$i]);
      }
   }
   $arResult = array_values($arResult);
}
Оригинал файла вы можете скачать в приложении к посту.

Что получили и что выиграли?

1. Красивый и понятный код шаблона

2013_08_26_12_28.png

2. 30-40 минут на кастомизацию такого меню:

2013_08_26_12_30.png

Ну пусть час, чтобы накидать еще тестовые категории :)  

 

 

Источник: http://dev.1c-bitrix.ru/community/webdev/user/11948/blog/8302/

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

Подписаться на новые материалы раздела:
Загрузка...