Как модуль встраивается в компоненты
Своих компонентов у модуля нет и не будет. Форк штатного компонента — это чужая копия в поставке, которая ломается на каждом обновлении ядра, и сопровождать её пришлось бы вечно.
Вместо этого модуль подставляет перевод в данные, которые компонент уже
получил. Делается это в result_modifier.php шаблона — одной-двумя строками.
Две разные ситуации
Данные вы выбираете сами. Тогда перевод подставляется при выборке, и дописывать в шаблон вообще ничего не нужно: Выборка с учётом языка.
Данные выбрал штатный компонент. Тогда в его шаблон добавляется вызов хелпера. Про это все страницы раздела.
Общий вид
// result_modifier.php шаблона компонента
use mrLexndr\Translate\IblockHelper;
IblockHelper::substituteStandardFields($arResult);
Для списков — по элементу:
foreach ($arResult['ITEMS'] as &$arItem) {
IblockHelper::substituteStandardFields($arItem);
}
unset($arItem);
Порядок важен. SEO-подстановка читает уже подставленные поля, поэтому
substituteSeo() зовут после substituteStandardFields(), а не до.
Данные получайте массово. Подстановка в цикле — нормально, запросы в цикле — нет. Хелпер рассчитан на то, что элементы у вас уже на руках.
Кеш компонента
Вызовы в result_modifier.php выполняются при промахе кеша, и результат
кешируется вместе с остальным. Это правильное место: перевод считается один раз
на сборку кеша, а не на каждый показ.
Отсюда следствие: после перевода витрина покажет старое, пока кеш не истечёт. Сбросьте кеш сайта, если проверяете результат сразу.
Страницы по компонентам
| Компонент | Что подставляется |
|---|---|
| news.list | списки новостей и статей |
| news.detail | детальная страница, SEO, alt и title картинок |
| catalog.element | карточка товара |
| catalog.section | витрина раздела |
| search.page | результаты поиска |
| breadcrumb | хлебные крошки |
| sale.basket.basket | корзина |
| sale.order.ajax | оформление заказа |
Если вашего компонента здесь нет — принцип тот же: найдите в его
result_modifier.php массив с элементами и подставьте перевод в него. Нестандартный
компонент от штатного в этом смысле не отличается.
Про готовые рецепты под коммерческие шаблоны
Аспро, Next и подобные сборки мы под рукой не держим, поэтому готовых рецептов
«вставьте вот сюда» для них здесь нет и придумывать их наугад мы не будем.
Принцип от шаблона не зависит: вызов идёт в result_modifier.php того шаблона,
который у вас реально подключён.