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

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
Наверх