Связь
Здравствуйте! Я Ваш личный надежный программист.
1С Предприятие 8.2-8.3, 1С-Битрикс: Управление сайтом, Битрикс24

В модуле работы с корзиной есть ошибка: Не переводит летающую корзину с легким шаблоном

В модуле перевода есть файл класса обработки корзины basketclass.phpВ нем перевод уходит в массив с наименованием $result["BASKET_ITEM_RENDER_DATA"], данный массив используется исключительно в обычном компоненте корзины в котором есть вспомогательный файл mutator.php в котором и происходит вся магия.НО! Есть проблема в том, что при небольших компонентах работы корзины, не такие тяжеловесные как стандартные, данного файла просто нет, например в шаблоне компонента работы с плавающей...
 
В модуле перевода есть файл класса обработки корзины basketclass.php
В нем перевод уходит в массив с наименованием $result["BASKET_ITEM_RENDER_DATA"], данный массив используется исключительно в обычном компоненте корзины в котором есть вспомогательный файл mutator.php в котором и происходит вся магия.

НО! Есть проблема в том, что при небольших компонентах работы корзины, не такие тяжеловесные как стандартные, данного файла просто нет, например в шаблоне компонента работы с плавающей корзиной https://disk.yandex.ru/i/h12_AYfigsJB2A т.е. в ней урезанные данные, которые используют обычный массив $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
 
Спасибо, действительно восхищаемся вашим подробным описанием!
Еще уточните пожалуйста, о каком конкретно компоненте идет речь.  
 
Компонент bitrix > sale.basket.basket
Шаблон компонента обычный v1 а летающей корзины top_hover по структуре шаблона можно увидеть разницу в обработке входящих данных от стандартного компонента.
 
Шаблон стороннего решения, и он видимо использует выдачу данных по другоиму.
В типовом списке шаблонов компонента sale.basket.basket я вижу только два:
  1. .default
  2. bootstrap_v4
Это шаблоны Битрикса. И оба они работают корректно с нашим решением.
 
Ни чего в этом удивительного, это изначально было понятно. Речь идёт о том, что у вас в классе стоит ошибка, точнее существенное урезание функционала и гибкости. Я привёл даже пример решения, осталось его только интегрировать. Очень надеюсь на внимание к просьбам сделать более универсальное решение, чтобы не использовать ручные костыли после обновления модуля.
 
Исправлена ошибка, когда не переводились данные при пересчете корзины. Аякс запрос не учитывал язык.

Ожидайте обновления в понедельник
 
Как я понимаю последний комментарий относится не к данной проблеме. Она по прежнему сохраняется и после каждого обновления приходится дописывать костыль в класс решения, чтобы работало корректно. Детали как сделано уже описал. В вашем классе выводится return что отключает перевод, а костыль дописывает чтобы он всё равно был, чтобы работало корректно.
 
Готово: https://prnt.sc/pfLRI6Tky_wG
 
Спасибо, сейчас работает и без заплаток. Наконец! 🎉
 
Супер!
Читают тему
file_download Скачать Модуль Маркет
file_download Скачать Модуль Маркет