Модификация данных в компонентах
В решении есть класс \Astdesign\Marketpro\Components\Modifiers , методы которого подключаются в используемых компонентах. Данные методы позволяют модифицировать данные, которых приходят в шаблоны компонентов и которые эти шаблоны отдают.
Важно: методы должны возвращать обратно входящий массив.
Пример использования
Задача: нужно выводить артикул товара на детальной странице по другому принципу (не из свойства).
Реализация:
Создаём кастомный файл с модификаторами bitrix/modules/astdesign.marketpro/lib/custom/components/modifiers.php
<?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 изменяет значение количества бонусов, переопределяя стандартные расчёты решения.
<?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» означает «до обработки решением» и «после неё»: в первом вы получаете данные, как их отдал компонент Битрикса, во втором — как их подготовило решение для витрины.
Метод | Что модифицирует |
|---|---|
| список товаров раздела, до обработки решением |
| тот же список после обработки — то, что уедет на витрину |
| карточка товара, до обработки |
| карточка после обработки |
| умный фильтр, до обработки |
| фильтр после обработки |
| параметры запроса раздела, а не результат: этим меняют выборку до того, как товары получены |
| список заказов в личном кабинете |
| разделы каталога на странице бренда |
| баннеры после обработки |
Правила
Возвращайте массив. Решение подставляет возвращённое значение на место своего. Ничего не вернули — считается, что кастомизации нет, и ваши правки потеряются.
Не вызывайте оригинал без нужды. В отличие от других переопределяемых методов, здесь оригинальные модификаторы почти ничего не делают: они — точки расширения. Вызывать штатный метод из своего, как в других статьях, здесь обычно не требуется.
After — для того, что видит покупатель. Если правите то, что уже посчитало решение (цены, бонусы, лейблы, наличие), берите версию с After: иначе решение пересчитает данные после вас и перезапишет правку.
Файл кладётся в lib/custom, а эта папка исключается из пакета обновления — правки сохраняются. Как работает подстановка Custom в имя класса, описано в статье «Кастомизация (переопределение) методов решения».