Подскажите пожалуйста, кто знает, каким образом лучше сделать такое меню:
Цитата |
---|
Чтобы скрипт выводил подуровни каталога с 3-мя уровнями вложенности в зависимости от того, в каком разделе находишься. т.е. раздел 1 раздел 1.1 раздел 1.1.1 раздел 1.1.2 раздел 1.1.3 раздел 1.2 раздел 1.3 раздел 2 раздел 2
- в случае, если находишься в разделе "раздел 1.1"
раздел 1 раздел 1.1 раздел 1.2 раздел 1.3 раздел 2 раздел 2
- в случае, если находишься в разделе "раздел 1"
раздел 1 раздел 2 раздел 2
- в случае, если находишься в корне инфоблока |
С двумя уровнями всё довольно просто: берем из $_REQUEST SECTION_ID, и в зависимости от этого раскрываем нужный подуровень меню.
Но когда нужно открыть 3-й уровень, данный метод уже не срабатывает.
В общем, я пришел к некоторому, на мой взгляд, не рациональному решению:
Код |
---|
<?
if(CModule::IncludeModule("iblock"))
{
// если $ID не задан или это не число, тогда
// $ID будет =0, выбираем корневые разделы
$SECTION_ID = IntVal($_GET['SECTION_ID']);
$items = GetIBlockSectionList(45, 0, Array("sort"=>"asc"));
while($arItem = $items->GetNext())
{
echo '<a href='.$arItem["SECTION_PAGE_URL"].'>'.$arItem["NAME"].'</a><br>'; // вывод первого уровня
$items22 = GetIBlockSectionList(45, $arItem["ID"], Array("sort"=>"asc")); //секции второго уровня
while($arItem22 = $items22->GetNext())
{
if ($arItem22["ID"] == $SECTION_ID)
$pp = 1; // вводим признак. Если ID секции второго уровня равен $SECTION_ID, то $pp=1 и в таком случае отображаются секции и второго и третьего уровня
}
if ($SECTION_ID == $arItem["ID"] || $pp == 1)
{
$items2 = GetIBlockSectionList(45, $arItem["ID"], Array("sort"=>"asc"));
while($arItem2 = $items2->GetNext())
{
echo ' <a href='.$arItem2["SECTION_PAGE_URL"].'>'.$arItem2["NAME"].'</a><br>'; // вывод второго уровня
if ($SECTION_ID == $arItem2["ID"])
{
$items3 = GetIBlockSectionList(45, $arItem2["ID"], Array("sort"=>"asc"));
while($arItem3 = $items3->GetNext())
{
echo ' <a href='.$arItem3["SECTION_PAGE_URL"].'>'.$arItem3["NAME"].'</a><br>'; // вывод 3-го уровня
}
}
}
$pp = 0; // Убиваем признак, чтобы не выводились секции второго уровня у всех разделов первого уровня
}
}
}
else
ShowError("Модуль не установлен");
?> |
Хотелось бы иметь какое-то универсальное решение на случай, если, к примеру, будет не 3, а 4 или 5 уровней вложенности..
Кто что может посоветовать?