# Модификация данных в компонентах

В решении есть класс **\\Astdesign\\Marketpro\\Components\\Modifiers** , методы которого подключаются в используемых компонентах. Данные методы позволяют модифицировать данные, которых приходят в шаблоны компонентов и которые эти шаблоны отдают.

**Важно**: методы должны возвращать обратно входящий массив.

## Пример использования

**Задача**: нужно выводить артикул товара на детальной странице по другому принципу (не из свойства).

**Реализация**:

Создаём кастомный файл с модификаторами **bitrix/modules/astdesign.marketpro/lib/custom/components/modifiers.php**

```javascript
<?php

namespace Astdesign\Marketpro\Custom\Components;

use Astdesign\Marketpro\Solution;

class Modifiers
{
    public static function catalogElement(&$arResult = [], $arParams = [])
    {
       
        $arResult['PROPERTIES']['ARTICUL']['VALUE'] = "#" . $arResult['XML_ID'];

        return $arResult;
    }
}
```

В данном случае метод **catalogElement** просто подменяет значение свойства **ARTICUL** (т.к. базово именно оно отвечает за вывод) на то, что нам нужно.

## Ещё один пример

В данном случае метод **catalogElementAfter** изменяет значение количества бонусов, переопределяя стандартные расчёты решения.

```javascript
<?php

namespace Astdesign\Marketpro\Custom\Components;

use Astdesign\Marketpro\Solution;

class Modifiers
{
    public static function catalogElementAfter(&$arResult = [], $arParams = [])
    {

        $arResult['JSON']['bonus'] = [
            'value' => round(($arResult['MIN_PRICE']['DISCOUNT_VALUE'] * 3) / 100),
            'description' => Solution::getOption("bonusDescription", "")
        ];

        return $arResult;
    }

}
```

# Все точки, куда можно вклиниться

Методов-модификаторов десять. Пара «метод» и «метод + After» означает «до обработки решением» и «после неё»: в первом вы получаете данные, как их отдал компонент Битрикса, во втором — как их подготовило решение для витрины.

| Метод | Что модифицирует |
|-------|------------------|
| `catalogSection` | список товаров раздела, до обработки решением |
| `catalogSectionAfter` | тот же список после обработки — то, что уедет на витрину |
| `catalogElement` | карточка товара, до обработки |
| `catalogElementAfter` | карточка после обработки |
| `catalogSmartFilter` | умный фильтр, до обработки |
| `catalogSmartFilterAfter` | фильтр после обработки |
| `modifyCatalogSectionParams` | **параметры** запроса раздела, а не результат: этим меняют выборку до того, как товары получены |
| `salePersonalOrderList` | список заказов в личном кабинете |
| `brandCatalogSections` | разделы каталога на странице бренда |
| `modifyBannersAfter` | баннеры после обработки |

# Правила

**Возвращайте массив.** Решение подставляет возвращённое значение на место своего. Ничего не вернули — считается, что кастомизации нет, и ваши правки потеряются.

**Не вызывайте оригинал без нужды.** В отличие от других переопределяемых методов, здесь оригинальные модификаторы почти ничего не делают: они — точки расширения. Вызывать штатный метод из своего, как в других статьях, здесь обычно не требуется.

`**After**` **— для того, что видит покупатель.** Если правите то, что уже посчитало решение (цены, бонусы, лейблы, наличие), берите версию с `After`: иначе решение пересчитает данные после вас и перезапишет правку.

Файл кладётся в **lib/custom**, а эта папка исключается из пакета обновления — правки сохраняются. Как работает подстановка `Custom` в имя класса, описано в статье [«Кастомизация (переопределение) методов решения»](/s/marketpro/doc/kastomizaciya-pereopredelenie-metodov-resheniya-3CGyziBRLa).

---

**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)