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