#SECTION_CODE_PATH# и простые компоненты каталога

December 12, 2014

На днях потребовалось выполнить интернет магазин со сложной структурой каталога. Увидел такую интересную вещь как #SECTION_CODE_PATH#. Эта "переменная" хранит в себе иерархическую информацию от корня сайта до текущей категории: site.ru/catalog/section/subsection/subsection/subsubsection/

На странице я использовал простые компоненты, такие как bitrix:catalog.section и bitrix:catalog.section.list

Как оказалось, переменную SECTION_CODE_PATH поддерживают только комплексные компоненты.

На данный момент поддержка вложенных ЧПУ в модуле Информационные блоки реализована только для комплексных компонентов catalog, news и photo.
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=5319&LESSON_PATH=3906.4485.5319

С уважением,
сотрудник технической поддержки
Дмитрий.


Ну чтож, давайте реализуем поддержку сами, раз разработчикам это так сложно.

За маршрутизацию запросов на сайте отвечает файл urlrewrite.php. Добавим в него такие строки:

    array(
"CONDITION" => '#^/catalog/([/-_.a-zA-Z0-9]+)/#',
"RULE" => "SECTION_PATH=$1&$2",
"ID" => "bitrix:catalog.section",
"PATH" => "/catalog/index.php",
),
array(
"CONDITION" => "#^/catalog/#",
"RULE" => "",
"ID" => "bitrix:catalog.section",
"PATH" => "/catalog/index.php",
),

В первом правиле мы указываем на ссылку указывающую на конкретную категорию с полным или частичным путем к нему. Второе правило указывает на индексную страницу каталога.

В битриксе есть также файл

bitrix/php_interface/init.php

Добавим в него событие на запуск функции перед выполнением компонентов:

AddEventHandler("main",'OnProlog','setCurrentSectioCodeBySectionCodePath');

function setCurrentSectioCodeBySectionCodePath(){
$path = explode('/', $_REQUEST['SECTION_PATH']);
$_REQUEST['SECTION_CODE'] = array_pop($path);
}


В данной функции наши пути разбиваются по знаку / и выбирается последний. Он то и является SECTION_CODE.

Данное решение было предложено на сайте 1с-Битрикс Рамилем Юналиевым, а мною уже доработано.

Комментарии

comments powered by Disqus