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