Документация для разработчиков
Темная тема

ReplaceDetailUrl

string public static CIBlock::ReplaceDetailUrl(
	string $url,
	array $arr,
	bool $server_name = false,
	mixed $arrType = false
);

Метод заменяет шаблонные макросы в URL элемента или раздела инфоблока на значения из массива $arr. Метод статический.

Параметры вызова

Параметр Описание
$url Шаблон URL с макросами, например #SITE_DIR#, #IBLOCK_ID#, #ELEMENT_ID#, #ELEMENT_CODE#, #SECTION_ID#, #SECTION_CODE#, #SECTION_CODE_PATH#.
$arr Массив значений для замены макросов. Метод использует ключи LANG_DIR, ID, CODE, EXTERNAL_ID, IBLOCK_TYPE_ID, IBLOCK_ID, IBLOCK_CODE, IBLOCK_EXTERNAL_ID, ELEMENT_ID, ELEMENT_CODE, IBLOCK_SECTION_ID, SECTION_CODE, а также варианты с префиксом ~ для кодов без HTML-обработки.
$server_name Если передано true, метод дополнительно заменяет макросы #SITE_DIR#, #SERVER_NAME# и #LANG# с учетом сайта или текущих констант.
$arrType Тип данных для замены макросов: E для элемента, S для раздела, false для общего режима.

Возвращаемое значение

Метод возвращает строку URL после замены макросов. В конце выполнения метод нормализует повторяющиеся слеши, кроме слешей после схемы URL.

Особенности

  • Для типа E метод подставляет значения элемента и при необходимости вычисляет #SECTION_CODE# и #SECTION_CODE_PATH#.
  • Для типа S метод подставляет значения раздела.
  • Если в шаблоне элемента есть макрос #PRODUCT_URL#, метод заменяет его URL товара.
  • Значения кодов в макросах проходят через rawurlencode.

Примеры

Формирование URL детальной страницы элемента по шаблону инфоблока:

\Bitrix\Main\Loader::includeModule('iblock');

// Задайте ID элемента, для которого формируете URL
$elementId = 25;

$element = \CIBlockElement::GetByID($elementId)->Fetch();

if ($element) {
    $iblock = \CIBlock::GetArrayByID($element['IBLOCK_ID']);
    
    $langDir = defined('SITE_DIR') ? SITE_DIR : '/';
    
    // Соберите массив полей, который ожидает метод
    $fields = array(
        'LANG_DIR'         => $langDir,
        'ID'                => $element['ID'],
        'ELEMENT_ID'        => $element['ID'],
        'CODE'             => $element['CODE'],
        'ELEMENT_CODE'     => $element['CODE'],
        'IBLOCK_ID'         => $element['IBLOCK_ID'],
        'IBLOCK_CODE'     => $iblock['CODE'],
        'IBLOCK_TYPE_ID'    => $iblock['IBLOCK_TYPE_ID'],
        'IBLOCK_SECTION_ID' => $element['IBLOCK_SECTION_ID'],
    );

    // Задайте шаблон URL
    $urlTemplate = '#SITE_DIR#/catalog/#SECTION_CODE#/#ELEMENT_CODE#/';
    
    // Замените макросы, 'E' означает, что формируете URL для элемента
    $url = \CIBlock::ReplaceDetailUrl($urlTemplate, $fields, false, 'E');
    
    echo "Сформированный URL: " . $url . "\n";
} else {
    echo "Элемент с ID {$elementId} не найден.\n";
}

При типе E метод использует данные элемента. Если в шаблоне есть макросы #SECTION_CODE# или #SECTION_CODE_PATH#, значения будут получены по IBLOCK_SECTION_ID.



© «Битрикс», 2001-2026, «1С-Битрикс», 2026