Блог разработчика 1С-Битрикс

Использование метода ParseComponentPath в 1С-Битрикс для работы с ЧПУ в комплексных компонентах

Метод CComponentEngine::ParseComponentPath() — инструмент для обработки ЧПУ в комплексных компонентах 1С-Битрикс. В этой статье мы разберем его работу, приведем практические примеры и раскроем нюансы использования.

Использование метода ParseComponentPath

Что делает метод?

Метод анализирует текущий URL, сопоставляет его с шаблонами путей компонента и возвращает идентификатор подходящего шаблона. При этом он извлекает переменные, заданные в URL, что упрощает обработку динамических страниц.

Синтаксис:

mixed CComponentEngine::ParseComponentPath(
    string $folder404,
    array $arUrlTemplates,
    array &$arVariables,
    string $requestURL = false
);

Параметры

Параметр Описание
folder404 Путь компонента (соответствует $arParams["SEF_FOLDER"]).
arUrlTemplates Массив шаблонов URL компонента.
arVariables Ссылка на массив для извлеченных переменных.
requestURL Опциональный URL для анализа (по умолчанию — текущая страница).

Пример базового использования

// Шаблоны URL компонента
$arUrlTemplates = [
    "list" => "index.php",
    "section" => "#SECTION_ID#/",
    "detail" => "#SECTION_ID#/#ELEMENT_ID#.php"
];

// Папка компонента в режиме ЧПУ
$arParams["SEF_FOLDER"] = "/catalog/";

// Текущий URL: /catalog/15/123.php
$arVariables = [];
$page = CComponentEngine::ParseComponentPath(
    $arParams["SEF_FOLDER"],
    $arUrlTemplates,
    $arVariables
);

// Результат:
// $page = "detail"
// $arVariables = ["SECTION_ID" => 15, "ELEMENT_ID" => 123]

Расширенные сценарии

1. Работа с Query-параметрами

Метод обрабатывает только путь до ?. Для параметров после знака вопроса используйте initComponentVariables:

CComponentEngine::InitComponentVariables(
    $page,
    ["SECTION_ID", "ELEMENT_ID"],
    ["detail" => ["SECTION_ID" => "SECTION", "ELEMENT_ID" => "ID"]],
    $arVariables
);

// Теперь $arVariables содержит параметры из URL и query-строки

2. "Жадные" шаблоны (Greedy Parts)

Для захвата путей с / добавьте "жадные" части:

$engine = new CComponentEngine();
$engine->addGreedyPart("SECTION_CODE_PATH");
$arUrlTemplates = [
    "section" => "#SECTION_CODE_PATH#/"
];
// URL: /catalog/electronics/mobile/
// $arVariables["SECTION_CODE_PATH"] = "electronics/mobile"

3. Кастомный requestURL

Анализ произвольного URL:

$page = CComponentEngine::ParseComponentPath(
    "/catalog/",
    $arUrlTemplates,
    $arVariables,
    "/catalog/42/test.php"
);

Типичные ошибки и их решение

Ошибка 1: Неверный формат шаблонов

Неправильно:

"detail" => "/#SECTION_ID#/#ELEMENT_ID#.php" // Лишний слеш в начале

Правильно:

"detail" => "#SECTION_ID#/#ELEMENT_ID#.php"

Ошибка 2: Переменные не извлекаются

Убедитесь, что SEF_FOLDER совпадает с базовым путем:

// Если SEF_FOLDER = "/blog/", а запрос /news/..., метод вернет false

Ошибка 3: Не учитывается порядок шаблонов

Шаблоны сортируются в порядке:

  1. Без переменных ("list" => "index.php")
  2. С обычными переменными ("section" => "#SECTION_ID#/")
  3. С "жадными" частями

Пример правильной сортировки:

$arUrlTemplates = [
    "list" => "index.php",
    "detail" => "#SECTION_ID#/#ELEMENT_ID#.php",
    "section_tree" => "#SECTION_CODE_PATH#/"
];

Полный пример компонента

class CatalogComponent extends CBitrixComponent {
    public function executeComponent() {
        $this->arParams["SEF_FOLDER"] = "/catalog/";
        $this->arParams["SEF_URL_TEMPLATES"] = [
            "sections" => "sections/",
            "section" => "#SECTION_CODE#/",
            "detail" => "#SECTION_CODE#/#ELEMENT_CODE#.php"
        ];

        $arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates(
            ["sections" => "sections/", "section" => "#SECTION_CODE#/"],
            $this->arParams["SEF_URL_TEMPLATES"]
        );

        $arVariables = [];
        $engine = new CComponentEngine();
        $engine->addGreedyPart("SECTION_CODE");
        $page = $engine->guessComponentPath(
            $this->arParams["SEF_FOLDER"],
            $arUrlTemplates,
            $arVariables
        );

        CComponentEngine::InitComponentVariables(
            $page,
            ["SECTION_CODE", "ELEMENT_CODE"],
            [],
            $arVariables
        );

        $this->arResult = $arVariables;
        $this->includeComponentTemplate($page);
    }
}

Заключение

ParseComponentPath — инструмент для реализации ЧПУ в комплексных компонентах. Правильное использование шаблонов, учет порядка их определения и работа с переменными позволяют создавать удобные и SEO-оптимизированные URL. Тестируйте ваши шаблоны с помощью параметра requestURL и не забывайте обрабатывать "жадные" части для сложных структур.

Теги: ParseComponentPath, ЧПУ, комплексные компоненты, SEO, URL, PHP


Валерий Макеев
11.09.2025 12:20
Анализируем ЧПУ-адрес интернет-магазина, определяем тип страницы (продукт) и извлекаем параметры пути — коды категории, подкатегории и ID товара — для дальнейшего рендеринга контента.
Код
<?php
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$arUrlTemplates = [
    "category" => "#CATEGORY_CODE#/",
    "subcategory" => "#CATEGORY_CODE#/#SUBCATEGORY_CODE#/",
    "product" => "#CATEGORY_CODE#/#SUBCATEGORY_CODE#/#PRODUCT_ID#"
];

$SEF_FOLDER = "/shop/";
$requestURL = "/shop/books/fiction/987";

$arVariables = [];
$page = CComponentEngine::ParseComponentPath($SEF_FOLDER, $arUrlTemplates, $arVariables, $requestURL);

echo "Определена страница: " . $page . "\n";
echo "Извлечённые переменные: " . print_r($arVariables, true);

// Выведет:
// Определена страница: product
// Извлечённые переменные: Array ( [CATEGORY_CODE] => books [SUBCATEGORY_CODE] => fiction [PRODUCT_ID] => 987 )

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.