В модуле перевода есть файл класса обработки корзины basketclass.php
В нем перевод уходит в массив с наименованием $result["BASKET_ITEM_RENDER_DATA"], данный массив используется исключительно в обычном компоненте корзины в котором есть вспомогательный файл mutator.php в котором и происходит вся магия.
НО! Есть проблема в том, что при небольших компонентах работы корзины, не такие тяжеловесные как стандартные, данного файла просто нет, например в шаблоне компонента работы с плавающей корзиной т.е. в ней урезанные данные, которые используют обычный массив $arResult без изменений, а в него модуль как раз и не пишет данные.
Чтобы это обойти мне пришлось дописать костыли. В стандартном коде есть строчка:
if(!is_array($result["BASKET_ITEM_RENDER_DATA"])) return;
Т.е. если этого массива нет, то ни чего не переводить, я в это место и вставил кастомные строки чтобы данные всё таки переводились и уходили в шаблон компонента летающей корзины.
Чтобы данные появились в шаблоне нужно переводить массив $result["GRID"]["ROWS"], следовательно я пропустил его через модуль перевода:
foreach ($result["GRID"]["ROWS"] as &$Item) {
if ($arRes = \FCIBlockElement::GetByID($Item["PRODUCT_ID"])->GetNextElement()) {
$fields = $arRes->GetFields();
$Item["NAME"] = $fields["~NAME"] ? $fields["~NAME"] : $fields["NAME"];
}
}
Получилась следующая логика - если массива $result["BASKET_ITEM_RENDER_DATA"] нет, то переводим $result["GRID"]["ROWS"],а если он есть то переводим по той логике как заложено было изначально в модуле перевода.
После чего летающая корзина перевелась.
Надеюсь, что вы доработаете модуль так, чтобы не нужно было изобретать костыли, чтобы не слетало после обновления модуля.
В нем перевод уходит в массив с наименованием $result["BASKET_ITEM_RENDER_DATA"], данный массив используется исключительно в обычном компоненте корзины в котором есть вспомогательный файл mutator.php в котором и происходит вся магия.
НО! Есть проблема в том, что при небольших компонентах работы корзины, не такие тяжеловесные как стандартные, данного файла просто нет, например в шаблоне компонента работы с плавающей корзиной т.е. в ней урезанные данные, которые используют обычный массив $arResult без изменений, а в него модуль как раз и не пишет данные.
Чтобы это обойти мне пришлось дописать костыли. В стандартном коде есть строчка:
if(!is_array($result["BASKET_ITEM_RENDER_DATA"])) return;
Т.е. если этого массива нет, то ни чего не переводить, я в это место и вставил кастомные строки чтобы данные всё таки переводились и уходили в шаблон компонента летающей корзины.
Чтобы данные появились в шаблоне нужно переводить массив $result["GRID"]["ROWS"], следовательно я пропустил его через модуль перевода:
foreach ($result["GRID"]["ROWS"] as &$Item) {
if ($arRes = \FCIBlockElement::GetByID($Item["PRODUCT_ID"])->GetNextElement()) {
$fields = $arRes->GetFields();
$Item["NAME"] = $fields["~NAME"] ? $fields["~NAME"] : $fields["NAME"];
}
}
Получилась следующая логика - если массива $result["BASKET_ITEM_RENDER_DATA"] нет, то переводим $result["GRID"]["ROWS"],а если он есть то переводим по той логике как заложено было изначально в модуле перевода.
После чего летающая корзина перевелась.
Надеюсь, что вы доработаете модуль так, чтобы не нужно было изобретать костыли, чтобы не слетало после обновления модуля.
Изменено: - 27.01.2023 10:28:54