Апрель 7, 2023
Обычные события ORM для классов "\Bitrix\Catalog\Model\Price" и "\Bitrix\Catalog\PriceTable" почему-то не работают. Вместо этого используются события "PriceOnBeforeAdd", "PriceOnBeforeUpdate" и подобные.
Умножение цены на коэффициент при сохранении (может пригодиться, например, при модификации данных из 1с):
<?php
namespace Partner;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'catalog',
'PriceOnBeforeAdd',
'\Partner\PriceTools::onBeforePriceAddUpdate'
);
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'catalog',
'PriceOnBeforeUpdate',
'\Partner\PriceTools::onBeforePriceAddUpdate'
);
class PriceTools
{
public static function onBeforePriceAddUpdate(\Bitrix\Main\Entity\Event $event)
{
// if($GLOBALS["APPLICATION"]->GetCurPage()!='/bitrix/admin/1c_exchange.php')
// return;
//$id = $event->getParameter("id");
$fields = $event->getParameter("fields"); // получаем список полей
$entity = $event->getEntity(); // получаем объект сущности
$eventType = $event->getEventType(); // получаем тип события (например, "PriceOnBeforeUpdate"
$rate = 2;
$result = new \Bitrix\Main\Entity\EventResult();
$fields["PRICE"] *= $rate;
$fields["PRICE_SCALE"] *= $rate;
$event->setParameter("fields",$fields);
$changedFields = array();
$changedFields["PRICE"] = $fields["PRICE"];
$changedFields["PRICE_SCALE"] = $fields["PRICE_SCALE"];
$result->modifyFields($changedFields);
//$result->unsetFields($arUnsetFields);
return $result;
}
}