При сохранении элемента записать вес и габариты
Прошу помочь...
ловлю событие OnBeforeIBlockElementUpdate или OnAfterIBlockElementUpdate
выполняю какой то код ... в процессе надо записать габариты и вес элемента
$res = Catalog\ProductTable::update(
123,
array(
"WEIGHT" => 7000,
"LENGTH" => 100,
"WIDTH" => 200,
"HEIGHT" => 300,
)
);
но значения не сохраняются.
На другом форуме подсказали т.к. происходит обновление элемента, сразу после обновления элемента запускается обновление товара в торговом каталоге и юзать надо события торгового каталога, но!!! если я буду использовать \Bitrix\Catalog\Product::OnBeforeUpdate или OnAfterUpdate, то при каждом изменении например кол-ва и/или цены будут происходить ненужные действия типа запросы в бд, вычисления и запись габаритов и веса.
Задача при сохранении/обновлении элемента записать элемент и его все параметры в том числе габариты и вес, как это сделать?
Ответы (1 шт):
Вес относится к товару, а не элементу. Попробуйте через OnBeforeProductUpdate и OnBeforeProductAdd. Что-то вроде
AddEventHandler("catalog", "OnBeforeProductUpdate", Array("MyClass", "ChangeWeightUpdate"));
AddEventHandler("catalog", "OnBeforeProductAdd", Array("MyClass", "ChangeWeightAdd"));
class MyClass
{
function ChangeWeightAdd(&$arFields) {
$arFields["WEIGHT"] = 999;
}
function ChangeWeightUpdate($id, &$arFields) {
$arFields["WEIGHT"] = 999;
}
}
Должно сработать. Но не проверял :-)