Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Обработка ID родительского и дочернего раздела

00 голосов
4
Доброе время. Видел, подобный вопрос поднимался на форуме, но остался без ответа.

Имею структуру:
Раздел 1
..Подраздел 1_1
..Подраздел 1_2
Раздел 2
..Подраздел 2_1
..Подраздел 2_2

Имеется собственный компонент, аналог iblock.section.list. Пытаюсь создать комплексный компонент на базе этого аналога.

Задача следующая: Отображать список разделов 1 уровня. При выборе раздела отображать подразделы выбранного раздела и сохранить отображение 1 уровня. При выборе подраздела 2 уровня увидеть список элементов, при этом также сохранив список разделов 1 и 2 уровня.

Т.е., как я понимаю необходимо работать с параметрами SECTION_ID и например SUBSECTION_ID, но в настройках инфоблока есть только #SECTION_ID#.

Конечно, можно передавать вручную через шаблон дописать вручную параметр SUBSECTION_ID и потом ловить _REQUEST'ом, но хотелось бы воспользоваться возможностями платформы.
Проблема заключается в том, что не понимаю как это реализовать. Создать собственный шаблон ссылки? но это для обработки, а как сделать чтобы система формировала и заменяла скажем #SUBSECTION_ID# на ID подраздела и получалась ссылка вида "/?SECTION_ID=#SECTION_ID#&SUBSECTION_ID=#SUBSECTION_ID#"?

надеюсь не запутал

другими словами, как научить вложенные в комплексный компонент компоненты формировать ссылку, понятную для разбора самим комплексным компонентом, при том, что эти вложенные стандартные компоненты должны работать лишь с одним нужным им параметром SECTION_ID, подготовленным для каждого индивидуально самим комплексным компонентом.

или может есть другие решения?
спросил 01 Дек, 13 от Sprigan (100 баллов)

4 Ответы

00 голосов
в качестве решения буду пробовать использовать SetUrlTemplates в результате выборки подразделов, с добавлением в компонент поля для ручного указания шаблона
ответил 28 Янв, 14 от Sprigan (100 баллов)
00 голосов
Погодите. Вам надо показывать подразделы выбранного раздела и подразделы родительского?
ответил 16 Май, 14 от Pomnep (13,960 баллов)
00 голосов
Мне нужно показывать разделы инфоблока (Раздел 1,Раздел 2) и при выборе одного из разделов показывать их подразделы (..Подраздел 1_1..Подраздел 1_2..), но еще и чтобы при выборе подраздела я увидел список, а "выбранность" разделов осталась прежней.

|----------------------------------
| /dev/?SECTION_ID=1&SUBSECTION_ID=11
|----------------------------------
| Раздел 1,Раздел 2 (section.list#1)
| Подраздел 1_1, Подраздел 1_2 (section.list#2)
|
| Элемент 1_1_1
| Элемент 1_1_2
|----------------------------------

Ночкой по-колдовал, добавил к компоненту section.list возможность указывать свой шаблон ссылок и переменную для замены.
У section.list#2 прописал в параметрах шаблон /dev/?SECTION_ID=#PSECTION_ID#&SUBSECTION_ID=#SECTION_ID# и указал переменную для замены #PSECTION_ID#. Таким образом внутри section.list, если активирована подмена путей,то компонент использует этот шаблон и заменит в нем #PSECTION_ID# на значение SECTION_ID, которое пришло от section.list#1. И использует #SECTION_ID# для подстановки "от себя"
и получается ссылка вида /dev/?SECTION_ID=1&SUBSECTION_ID=11 как "в рисунке".

Код
внутри шаблона комплексного компонента
$APPLICATION->IncludeComponent("my.section.list", "", array(
  ...
  "SECTIONID" => 0,
  "ENABLE_SECTION_PATH" => "N"
  ),
  $component
);
$APPLICATION->IncludeComponent("my.section.list", "", array(
  ...
  "SECTIONID" => $arParams["SECTIONID"],
  "ENABLE_SECTION_PATH" => "Y",
  "SECTION_PATH_VARNAME" => "#PARENT_SECTION_ID#",
  "SECTION_PATH_TEMPLATE" => "/dev/?SECTION_ID=#PARENT_SECTION_ID#&SUBSECTION_ID=#SECTION_ID#",
  ),
  $component
);
$APPLICATION->IncludeComponent("my.element.list", "", array(
  ...
  "SECTIONID" => $arParams["SUBSECTIONID"],
  ),
  $component
);


Код
внутри my.section.list
if($arParams["ENABLE_SECTION_PATH"]=="Y"):
    $arParams["SECTION_PATH_TEMPLATE"] = str_replace(
      $arParams["SECTION_PATH_VARNAME"],
      $arParams["SECTIONID"],
      $arParams["SECTION_PATH_TEMPLATE"]
    );
    $res->SetUrlTemplates("",$arParams["SECTION_PATH_TEMPLATE"]);
endif;
ответил 13 Сен, 14 от Sprigan (100 баллов)
00 голосов
появляется новый вопрос - как реализовать поддержку ЧПУ?
использую код компонента из справочника
могу ли я в режиме ЧПУ подсунуть собственно названную переменную для обработки?

путь запроса /dev/1/11/
т.е. раздел_1, подраздел_1_1

Код
$arDefaultUrlTemplates404 = array(
   "list" => "",
   "section" => "#SECTION_ID#",
   "subsection" => "#SECTION_ID#/#SUBSECTION_ID#/",
);

такой вариант не принимает

пока успешно реализовал только с url_rewrite:
Код
#^/dev/([0-9]+)/([0-9]+)/{0,1}.*#
/dev/index.php
SECTION_ID=S1&SUBSECTION_ID=S2
ответил 18 Янв, 15 от Sprigan (100 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 01 Фев, 14 от oPs (380 баллов)
0 голосов
2 ответов
спросил 18 Апр, 14 от kakashka1 (340 баллов)
0 голосов
1 ответ
спросил 23 Июнь, 14 от beatsspam (440 баллов)
0 голосов
2 ответов
спросил 22 Июнь, 14 от beatsspam (440 баллов)
0 голосов
3 ответов
спросил 04 Апр, 14 от asagava (680 баллов)