События и кастомные типы свойств
События
Для подписи на события сущности инфоблоков можно использовать штатные механизмы ORM:
use Bitrix\Main\ORM\Data\DataManager;
// ID инфоблока
$iblockId = 32;
// объект инфоблока
$iblock = \Bitrix\Iblock\Iblock::wakeUp($iblockId);
// диспетчер событий
$em = \Bitrix\Main\ORM\EventManager::getInstance();
$em->registerEventHandler(
$iblock->getEntityDataClass(),
DataManager::EVENT_ON_BEFORE_ADD,
'mymodule',
'MyClass',
'method'
);
Внимание! Поддержка событий информационных блоков, относящихся к старому ядру, в данный момент не реализована.
Кастомные типы свойств
Чтобы добавить свои поля в сущность свойства, при описании свойства нужно задать отдельный коллбэк GetORMFields:
public static function GetUserTypeDescription()
{
return [
...
"GetORMFields" => array(__CLASS__, "GetORMFields"),
];
}
/**
* @param \Bitrix\Main\ORM\Entity $valueEntity
* @param \Bitrix\Iblock\Property $property
*/
public static function GetORMFields($valueEntity, $property)
{
$valueEntity->addField(
...
);
}