# Подмена URL элементов/разделов инфоблока

Данный функционал может потребоваться, если у вас действующий сайт и к нему подключено решение (приложение) в виде второго сайта, при этом они должны использовать один и тот же инфоблок. На действующем сайта у вас один принцип формирования ЧПУ, а в решении он другой (жёстко задан frontend частью).

Создаём файл **bitrix/modules/astdesign.marketpro/lib/custom/utils/iblock.php**

Содержимое файла:

```php
<?php

namespace Astdesign\Marketpro\Custom\Utils;

use \Astdesign\Marketpro\Utils\Options;

/**
 * Class IBlock
 * @package Astdesign\Marketpro\Utils
 */
class IBlock
{
    /**
     * @param $res \CIBlockResult
     * @param $iblock
     * @throws \Bitrix\Main\ArgumentException
     * @throws \Bitrix\Main\ObjectPropertyException
     * @throws \Bitrix\Main\SystemException
     */
    public static function setIblockUrlTemplate(&$res, $iblock)
    {
        if ($iblock == 55) {
            $res->strDetailUrl = "#SITE_DIR#products/#ELEMENT_ID#/";
            $res->strListUrl = "#SITE_DIR#catalog/";
            $res->strSectionUrl = "#SITE_DIR#catalog/#SECTION_CODE#/";
        } elseif ($iblock == 63) {
            $res->strDetailUrl = "#SITE_DIR#brands/#ELEMENT_CODE#/";
            $res->strListUrl = "#SITE_DIR#brands/";
        } else {
            Options::set('checkCustomMethodSkip', true);
            \Astdesign\Marketpro\Utils\IBlock::setIblockUrlTemplate($res, $iblock);
        }
        return $res;
    }

    public static function getIblockUrlTemplate($iblock)
    {
        if ($iblock == 55) {
            return [
                'LIST_PAGE_URL' => "#SITE_DIR#catalog/",
                'DETAIL_PAGE_URL' => "#SITE_DIR#products/#ELEMENT_ID#/",
                'SECTION_PAGE_URL' => "#SITE_DIR#catalog/#SECTION_CODE#/"
            ];
        } else {
            Options::set('checkCustomMethodSkip', true);
            return \Astdesign\Marketpro\Utils\IBlock::getIblockUrlTemplate($iblock);
        }
    }
}
```

В двух приведённых методах мы переопределяем ЧПУ инфоблока (от действующего сайта) и меняем правило формирования ссылок на то, которое нужно frontend части решения.

# Почему в примере `return $res`

Решение подставляет результат вашего метода на место своего: возвращённое значение записывается в `$res`. Если метод ничего не вернёт, решение решит, что кастомизации нет, и подставит свои шаблоны ЧПУ. Поэтому `return $res` в конце обязателен — как и `Options::set('checkCustomMethodSkip', true)` перед вызовом оригинала в ветке `else`, иначе получится бесконечная рекурсия. Подробнее про механизм — в статье [«Кастомизация (переопределение) методов решения»](/s/marketpro/doc/kastomizaciya-pereopredelenie-metodov-resheniya-3CGyziBRLa).

# Не зашивайте ID инфоблоков

В примере стоят числа `55` и `63` — это ID инфоблоков конкретного сайта. На другой установке они будут другими, поэтому такой код не переносится: посмотрите свои в **Контент → Инфоблоки → Типы инфоблоков**.

Лучше вообще не писать числа:

* инфоблоки решения ищите по коду — `\Astdesign\Marketpro\Solution::getIblockByCode('catalog')`. Так делает само решение, и при переносе на другой сайт код продолжит работать;
* «чужой» инфоблок действующего сайта, ради которого и нужна подмена, ищите по его символьному коду штатными средствами Битрикса, а ID получайте уже из него.

Тогда единственное, что придётся править при переносе, — сами шаблоны адресов.

---

**Documents**

- [Установка решения](https://docs.astdesign.ru/s/marketpro/doc/ustanovka-resheniya-Z8Q6r79liU)
- [FAQ перед покупкой](https://docs.astdesign.ru/s/marketpro/doc/faq-pered-pokupkoj-HPgKP7mWDT)
- [Общая настройка](https://docs.astdesign.ru/s/marketpro/doc/obshaya-nastrojka-Io6HZQaGXf)
- [Шаблон](https://docs.astdesign.ru/s/marketpro/doc/shablon-ylLAFZV3o8)
- [Главная страница](https://docs.astdesign.ru/s/marketpro/doc/glavnaya-stranica-7PwYozaVVo)
- [Магазины (склады)](https://docs.astdesign.ru/s/marketpro/doc/magaziny-sklady-7rEEZJrA45)
- [Каталог](https://docs.astdesign.ru/s/marketpro/doc/katalog-FpnYzZr900)
- [Поиск](https://docs.astdesign.ru/s/marketpro/doc/poisk-xsDdFVh5h0)
- [Текстовые страницы](https://docs.astdesign.ru/s/marketpro/doc/tekstovye-stranicy-jVtNXZv3T5)
- [Реклама и маркетинг](https://docs.astdesign.ru/s/marketpro/doc/reklama-i-marketing-iZkaCoxr5b)
- [Региональность](https://docs.astdesign.ru/s/marketpro/doc/regionalnost-bCuM9AOBNO)
- [Корзина](https://docs.astdesign.ru/s/marketpro/doc/korzina-Mh27pZA7v9)
- [Оформление заказа](https://docs.astdesign.ru/s/marketpro/doc/oformlenie-zakaza-VyvQjOQxZo)
- [Авторизация](https://docs.astdesign.ru/s/marketpro/doc/avtorizaciya-5HwEb1oDJG)
- [SEO и аналитика](https://docs.astdesign.ru/s/marketpro/doc/seo-i-analitika-d1Hw6c4YAM)
- [Уведомления](https://docs.astdesign.ru/s/marketpro/doc/uvedomleniya-SKDyjYg14J)
- [Мобильное приложение](https://docs.astdesign.ru/s/marketpro/doc/mobilnoe-prilozhenie-F5E0hT7TnN)
- [Обновление решения](https://docs.astdesign.ru/s/marketpro/doc/obnovlenie-resheniya-RRRgtxV5uH)
- [Для разработчика](https://docs.astdesign.ru/s/marketpro/doc/dlya-razrabotchika-WJePeJCmpy)
- [Интеграции](https://docs.astdesign.ru/s/marketpro/doc/integracii-D3DqjYOZYm)
- [Что делать, если что-то не работает](https://docs.astdesign.ru/s/marketpro/doc/chto-delat-esli-chto-to-ne-rabotaet-Q8L8sTVJF8)