Требовалось создать раскрывающиеся ссылки в активном разделе левого вертикального меню.
При чём раскрывающиеся ссылки должны были указывать на страницы с дополнительным описанием элементов.
Первоначально шаблон компонента "bitrix:menu" выглядел так.
Пример фрагмента сведений, которыми наполнялся массив «$arResult».
[0] => Array
(
[TEXT] => Портативные генераторы BALTOSPOT
[LINK] => /catalog/index.php?SECTION_ID=224
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => U
[ITEM_INDEX] => 0
[PARAMS] => Array
(
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
Я пошёл следующим путём.
Дополнил меню параметром «SECTION_ID» с соответствующими значениями (Пример: SECTION_ID = 224).
Создал файл "result_modifier.php" с записью "<? CModule::IncludeModule('iblock'); ?>".
(Хотя можно было поместить эту запись в файл "template.php".)
В файле "template.php" организовал выборку полей элементов, которые находятся в конкретном разделе (папке).
Посредством следующей вставки получилось достигнуть желаемого.
Вставку я поместил там, где высвечивается раздел меню в активном состоянии.
Считаю, что в предложенном решении есть уязвимое место. Это добавление в меню параметра «SECTION_ID».
Но как более грамотно помочь шаблону узнавать «ID» раздела, список элементов которого надо высветить?
Ведь в моём распоряжении есть только путь к этому разделу.
При чём раскрывающиеся ссылки должны были указывать на страницы с дополнительным описанием элементов.
Первоначально шаблон компонента "bitrix:menu" выглядел так.
Код |
---|
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <?if (!empty($arResult)):?> <ul class="left-menu"> <?foreach($arResult as $arItem):?> <?if($arItem["SELECTED"]):?> <li><a class="selected" href="<?=$arItem["LINK"]?>" ><?=$arItem["TEXT"]?></a></li> <?else:?> <li><a href="<?=$arItem["LINK"]?>" ><?=$arItem["TEXT"]?></a></li> <?endif?> <?endforeach?> </ul> <?endif?> |
Пример фрагмента сведений, которыми наполнялся массив «$arResult».
[0] => Array
(
[TEXT] => Портативные генераторы BALTOSPOT
[LINK] => /catalog/index.php?SECTION_ID=224
[SELECTED] =>
[PERMISSION] => X
[ADDITIONAL_LINKS] => Array
(
)
[ITEM_TYPE] => U
[ITEM_INDEX] => 0
[PARAMS] => Array
(
)
[DEPTH_LEVEL] => 1
[IS_PARENT] =>
)
Я пошёл следующим путём.
Дополнил меню параметром «SECTION_ID» с соответствующими значениями (Пример: SECTION_ID = 224).
Создал файл "result_modifier.php" с записью "<? CModule::IncludeModule('iblock'); ?>".
(Хотя можно было поместить эту запись в файл "template.php".)
В файле "template.php" организовал выборку полей элементов, которые находятся в конкретном разделе (папке).
Посредством следующей вставки получилось достигнуть желаемого.
Вставку я поместил там, где высвечивается раздел меню в активном состоянии.
Код |
---|
<blockquote> <? //CModule::IncludeModule('iblock'); $arOrder = array("sort" => "asc", "timestamp_x" => "asc"); $arFilter = array("SECTION_ID" => $arItem[PARAMS][SECTION_ID]); $res = CIBlockElement::GetList($arOrder, $arFilter); while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); //print_r($arFields); echo '<p><a href="', $arFields['DETAIL_PAGE_URL'].'&SECTION_ID='.$arItem[PARAMS][SECTION_ID], '">', $arFields['NAME'], '</a></p>'; } ?> </blockquote> |
Считаю, что в предложенном решении есть уязвимое место. Это добавление в меню параметра «SECTION_ID».
Но как более грамотно помочь шаблону узнавать «ID» раздела, список элементов которого надо высветить?
Ведь в моём распоряжении есть только путь к этому разделу.