Добрый день!
Загрузка товаров на сайт через скрипт [B]/bitrix/admin/1c_exchange.php[/B] работает некорректно.
Для свойств товаров с типом [B]Список[/B] и установленным признаком [B]Множественное[/B] у товара устанавливается только первое значение из переданных в файле обмена.
Ошибка локализована в модуле [B]bitrix/modules/iblock/classes/general/cml2.php[/B]
Метод [B]ImportElement[/B] класса [B]CIBlockCMLImport[/B]
В цикле проверяется полное соответствие на имя ключа, и для множественного типа они устанавливаются как строки
Чтобы работало правильно, достаточно поменять
[CODE]if($prop_type == "L" && $k == $l_key)[/CODE]
например, на
[CODE]if($prop_type == "L" && ($k == $l_key || strpos($k, $l_key)==0))[/CODE]
или, по аналогии как сделано выше по коду
[CODE]
$lPV = mb_strlen($strPV);
if($prop_type == "L" && mb_substr($k, 0, $lPV) === $l_key)
[/CODE]
Установленное решение: Современный интернет-магазин (bitrix.eshop) 24.0.0
Виртуальная машина: VMBitrix 9.0.3 для VirtualBox
Версия PHP: 8.1.30
Загрузка товаров на сайт через скрипт [B]/bitrix/admin/1c_exchange.php[/B] работает некорректно.
Для свойств товаров с типом [B]Список[/B] и установленным признаком [B]Множественное[/B] у товара устанавливается только первое значение из переданных в файле обмена.
Ошибка локализована в модуле [B]bitrix/modules/iblock/classes/general/cml2.php[/B]
Метод [B]ImportElement[/B] класса [B]CIBlockCMLImport[/B]
В цикле проверяется полное соответствие на имя ключа, и для множественного типа они устанавливаются как строки
Чтобы работало правильно, достаточно поменять
[CODE]if($prop_type == "L" && $k == $l_key)[/CODE]
например, на
[CODE]if($prop_type == "L" && ($k == $l_key || strpos($k, $l_key)==0))[/CODE]
или, по аналогии как сделано выше по коду
[CODE]
$lPV = mb_strlen($strPV);
if($prop_type == "L" && mb_substr($k, 0, $lPV) === $l_key)
[/CODE]
Часть кода с ошибкой |
|---|
| [CODE] foreach($value as $k=>$prop_value) { if(array_key_exists("bOld", $arElement["PROPERTY_VALUES"][$prop_id])) { if($prop_type=="F") { foreach($arElement["PROPERTY_VALUES"][$prop_id] as $PROPERTY_VALUE_ID => $PROPERTY_VALUE) $arElement["PROPERTY_VALUES"][$prop_id][$PROPERTY_VALUE_ID] = array( "tmp_name" => "", "del" => "Y", ); unset($arElement["PROPERTY_VALUES"][$prop_id]["bOld"]); } else { $arElement["PROPERTY_VALUES"][$prop_id] = array(); } } if($prop_type == "L" && $k == $l_key) { $prop_value = $this->GetEnumByXML_ID($this->arProperties[$prop_id]["ID"], $prop_value); } elseif($prop_type == "N" && isset($this->next_step["sdp"])) { if ($prop_value <> '') $prop_value = $this->ToFloat($prop_value); } $arElement["PROPERTY_VALUES"][$prop_id]["n".$i] = array( "VALUE" => $prop_value, "DESCRIPTION" => false, ); $i++; } [/CODE] |
Установленное решение: Современный интернет-магазин (bitrix.eshop) 24.0.0
Виртуальная машина: VMBitrix 9.0.3 для VirtualBox
Версия PHP: 8.1.30