07 Апр Создание обработчика события OnBeforeIBlockElementUpdate для Bitrix
Размещено в 17:44h
in
Bitrix,
php,
Бэкенд
by Evgeny
При изменении цены товара обработчик будет удалять ненужные символы из значения цены товара.
<?php
// Создание обработчика события на изменение товара 'OnBeforeIBlockElementUpdate'.
// При изменении цены обработчик будет удалять ненужные символы из значения цены товара.
define('CATALOG_IBLOCK_ID', 2);
// Определяем константу глобально
// Событие вызывается в методе "CIBlockElement::Update" до изменения элемента информационного блока, и может быть использовано для отмены изменения или для переопределения некоторых полей.
// Событие передает массив полей arParams обновляемого элемена инфоблока.
// Обратите внимание, что все параметры данного обработчика являются ссылками на исходные переменные. Поэтому если вы измените значение параметра внутри обработчика, это приведет к смене значения исходной переменной поступившей на вход функции-обработчика.
// 1. Нужно создать обработчик (функцию-обработчик) в "\local\php_interface\include\event_handler.php".
// Файл обработчиков "event_handler.php" зарегистрировать в "init.php"
// Регистрируем обработчик в "event_handler.php":
// AddEventHandler зарегистрированная функция Битрикс.
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", array("MyClass", "OnBeforeIBlockElementUpdateHandler"));
// Передаем ей аргументы
// 1. Идентификатор модуля который будет инициировать событие.
// 2. Идентификатор события.
// 3. callback - Название функции обработчика. Если это метод класса, то массив вида Array(класс(объект), название метода).
class MyClass
{
// Создаем обработчик события "OnBeforeIBlockElementUpdate"
// Аргументы сюда пробрасываются из "OnBeforeIBlockElementUpdate"
public static function OnBeforeIBlockElementUpdateHandler(&$arFields)
{
if ($arFields['IBLOCK_ID'] == CATALOG_IBLOCK_ID) { // Если нужный нам инфоблок
$db_props = CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array("sort" => "asc"), array("CODE" => "PRICE"));
// Аргументы 1. id инфоблока, 2. id элемента, 3. сортировка, 4. Свойство элемента по коду.
if ($ar_props = $db_props->Fetch()) { // В этой строке результат вызова Fetch() присваивается переменной $ar_props
if(strlen($arFields['PROPERTY_VALUES'][$ar_props['ID']][$ar_props['PROPERTY_VALUE_ID']]['VALUE']) > 0) // Проверка на не пустое значение
{
$arFields['PROPERTY_VALUES'][$ar_props['ID']][$ar_props['PROPERTY_VALUE_ID']]['VALUE'] = preg_replace("/[^\d]/", "", $arFields['PROPERTY_VALUES'][$ar_props['ID']][$ar_props['PROPERTY_VALUE_ID']]['VALUE']); // Оставляем в результате только цифры, все другое убираем.
}
}
}
}
}
Нет комментариев