Всякий, кому доводилось настраивать оформление (кастомизировать) меню, знает, насколько это неудобный и трудоемкий процесс. Несколько файлов стилей, несколько скриптов JavaScript, фоновые изображения. Всю эту структуру надо описать, держать в архиве, при каждой модификации меню актуализировать. Нельзя ли упростить процедуру? Можно. И вот каким образом:
1. Сделаем шаблон меню
Для этого используем следующий код PHP:
<?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;?>
2. Вид меню будет определять скрипт-модификатор
Создадим файл result_modifier.php. Его задачей будет трансформировать линейное меню в древовидное.
<?if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
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);
}
3. Настроим динамическое формирование на любом уровне вложенности
Используем для этого следующий код:
$GLOBALS['arResult'] = $arResult;
$countItems = count($arResult);
function returnSubMenu() {
global $countItems;
static $k = 0;
$arSubMenu = array();
while(1) {
Готово!
Кастомизация трехуровневого меню теперь проста, однозначна и занимает не более 35 минут времени.
Назад в раздел