Системные события:
- OnFindPlugins () - при поиске плагинов, можно добавить свои плагины,
-
OnAfterFindPlugins ($arPlugins) - после поиска плагинов, некоторые плагины можно убрать,
-
OnBeforeProcessField ($obField, $arField, $arElement, $arProfile) - при обработке поля, можно выгрузить в любом поле любые свои данные (т.е. как бы переопределить),
-
OnAfterProcessField ($mResult, $obField, $arField, $arElement, $arProfile) - после обработки поля, можно произвольным образом обработать полученные в соответствии с настройками поля,
- onGetProcessEntities ($obExporter, $arProfile, $intIBlockID, $arElement, &$bProcessElement, &$bProcessOffers) - при получении режима работы с ТП, можно переопределить (с вероятностью 99.9% это вам не нужно),
-
OnGetElementArray (&$arResult, $intElementID, $intIBlockID, $bGetParent, $obElement) - при получении данных товара, можно изменить данные, т.е. чтобы каждый товар модуль "видел" иначе (изменить название, цены и т.п.),
-
OnGetSteps (&$arResult, $strModuleId, $intProfileID) - при получении шагов обработки - можно добавить свои шаги или удалить некоторые стандартные (большинство стандартных полей удалить нельзя),
- OnExportStart ($intProfileID, &$arData) - событие при старте выгрузки,
- OnExportFinish ($intProfileID, $arData) - событие при завершении выгрузки.
События при настройке профилей:
- OnGetAdditionalTabs (&$arTabs) - при получении вкладок, можно добавить свои вкладки в настройки профиля,
-
OnGetCategoryRedefinitions (&$arIBlock, &$arResult) - при получении сопоставления категорий,
-
OnBeforeProcessElementField (&$mResult, $obField, &$arElement, &$arProfile, &$bStop) - при обработке значения поля для конкретного элемента,
-
OnAfterProcessElementField (&$mResult, $obField, &$arElement, &$arProfile) - после обработки значения поля для конкретного элемента,
-
OnBuildFilter (&arFilter, $obFilter) - при сборке фильтра (можно влиять на фильтр, но осторожно),
-
OnBuildFilterItem (&$arResult, $arItem, $bIsOffers, $intIBlockOffersID, $intOffersPropertyID, $bNegation) - при сборке отдельного элемента фильтра,
- OnGetProfileFilter (&$arFilter, $intProfileID, $intIBlockID, $intMainElementId) - для дополнения условий отбора товаров по фильтру,
-
OnGetAllSettings ($arParams) - при получении настроек, можно добавить свои настройки в обработку полей,
-
OnAfterGetAllSettings (&$arResult, $arParams) - после получения настроек, можно удалить некоторые настройки,
- OnCustomHtmlToText (&$strValue, $arParams, $obField) - при преобразовании html в текст,
Также в каждом плагине есть свои обработчики, например:
- OnYandexMarketXml
- OnYandexMarketResult
- OnGoogleMerchantXml
- OnGoogleMerchantResult
В каждом обработчике - свои аргументы, узнать которые можно несложно (не говоря про вариант изучения исходного кода), например: напишите свой обработчик, добавьте несколько аргументов $a, $b, $c, и в коде обработчика делайте, например, var_dump($a), при этом аргументов может быть много.
Обработчики в универсальных плагинах
Необходимо знать, что некоторые плагины в модуле - универсальные, т.е. основаны не на классе Plugin, а на классе UniversalPlugin (а он, в свою очередь, основан на Plugin). Соответственно, вся работа с такими плагинами строится абсолютно иначе, в т.ч. обработчики.
В универсальных плагинах обработчики имеют названия, начинающиеся с "onUp" (означает on Universal Plugin some action), они могут быть обработаны как обычным для 1С-Битрикс способом, так и с помощью методов плагина - например, при срабатывании события onUpBeforeProcessElement сначала вызывается метод onUpBeforeProcessElement текущего плагина, после него - вызываются обычные обработчики 1С-Битрикс.
При обработке событий имейте в виду, что первым аргументом всегда добавляется $this - т.е. объект текущего плагина. Например, если Вы видите что в коде происходит вызов события
$this->handler('onUpShowSettings', array(&$arSettings));
Значит в функции-обработчике аргументы должны быть $obPlugin, &$arSettings.
Обработчиков в универсальных плагинах достаточно много, вот некоторые из них (жирным шрифтом отмечены те, которые, на наш взгляд, могут быть наиболее востребованными):
- onUpShowSettings (&$arSettings) - при показе настроек плагина. Позволяет добавить или удалить собственные настройки,
- onUpGetFields (&$arResult, $intProfileID, $intIBlockID, $bAdmin) - при получении списка полей плагина (по каждому инфоблоку),
- onUpAfterGetFields (&$arResult, $intProfileID, $intIBlockID, $bAdmin) - после составления списка полей и сортировки,
- onUpBeforeProcessElement (&$arResult, &$arElement, &$arFields, &$arElementSections, $intMainIBlockId, &$bStop) - перед обработкой элемента для выгрузки, позволяет управлять данными товаров перед выгрузкой,
- onUpAfterProcessElement (&$arResult, $arElement, $arFields, $arElementSections, $intMainIBlockId) - после обработки одного элемента, можно изменить сгенерированные данные перед их сохранением для последующей выгрузки,
- onUpStepCheck (&$arSession) - при старте выгрузки, в момент проверки всех систем,
- onUpGetXmlStructure (&$strXml) - при получении базовой структуры XML (в виде строки),
- onUpGetJsonStructure(&$arJson) - при получении базогово JSON (в виде массива),
- onUpGetExportSteps (&$arExportSteps, &$arSession) - при определении списка шагов выгрузки - можно добавить собственные шаги выгрузки,
- onUpBeforeExportItems (&$arStep) - непосредственно перед выгрузкой элементов (из сохранённых данных),
- onUpAfterExportItems (&$arStep, &$bBreaked) - непосредственно после выгрузки элементов,
- onUpBeforeBuildXml (&$arResult, &$arElement, &$arFields, &$arElementSections) - при подготовке к сборке итогового XML,
- onUpBuildXmlTag (&$arXmlTags, &$arElement, &$arFields, &$arElementSections, &$key, &$mValue) - при сборке одного тега (выполняется для каждого поля),
- onUpBuildXmlAttr (&$arXmlTags, &$arElement, &$arFields, &$arElementSections, &$key, &$mValue) - при сборке каждого атрибута (для каждого поля-атрибута [начинающегося с символа @]),
- onUpBuildXml (&$arXmlTags, &$arXmlAttr, &$strXmlItem, &$arElement, &$arFields, &$arElementSections) - в момент сборки конечного XML,
- onUpGetDataMore (&$arElement, &$arFields, &$arElementSections, &$mDataMore, $arXml) - при получении дополнительных данных для выгрузки для каждого товара,
- onUpAfterBuildXml (&$arResult, $arElement, $arFields, $arElementSections) - сразу после сборки XML, при необходимости можно непосредственно редактировать полученный XML,
- onUpGetXmlCategoryTag (&$strCategoryXml, $intCategoryID, $arCategory, $arCategories) - при сборке одного тега-категории,
- onUpGetXmlCurrencyTag (&$strCurrencyXml, $arCurrency, $strRate) - при сборке одного тега-валюты,
- onUpXmlExportItem (&$arItem, &$strXml) - непосредственно при записи одного товара в файл,
- onUpBeforeBuildJson (&$arResult, &$arElement, &$arFields, &$arElementSections) - при подготовке к сборке JSON,
- onUpBuildJsonTag (&$arJson, &$arElement, &$arFields, &$arElementSections, &$key, &$mValue) - при сборке одного элемента JSON,
- onUpBuildJson (&$arJson, &$arElement, &$arFields, &$arElementSections) - в момент начала сборки JSON,
- onUpAfterBuildJson (&$arResult, $arElement, $arFields, $arElementSections) - непосредственно после окончания сборки JSON,
- onUpJsonExportHeader (&$strJsonHeader, &$arSession, &$bWrite) - при выгрузке основной части JSON (над товарами),
- onUpJsonExportItem (&$arItem, &$strJson, &$arSession, &$bWrite) - при записи одного товара в JSON,
- onUpJsonExportFooter (&$strJsonFooter, &$arSession, &$bWrite) - при записи завершающей части JSON (после товаров),
- onUpBeforeBuildExcel (&$arResult, &$arElement, &$arFields, &$arElementSections) - перед выгрузкой в Excel,
- onUpBuildExcel (&$arJson, &$arElement, &$arFields, &$arElementSections) - в момент сборки Excel,
- onUpAfterBuildExcel (&$arResult, $arElement, $arFields, $arElementSections) - после сборки Excel,
- onUpBeforeExcelOpen (&$strFilename) - перед открытием файла Excel,
- onUpAfterExcelOpen (&$strFilename) - после открытия файла Excel,
- onUpBeforeExcelSave (&$strFilename, &$strFilenameUpdated) - перед сохранением файла Excel,
- onUpAfterExcelSave (&$strFilename, &$strFilenameUpdated) - после сохранение файла Excel,
- onUpZipSuccess ($strFilenameArchive) - при упаковке файла в архив,
- onUpWriteToFile (&$strContent, &$strFilenameSuffix, &$bAutoConvert) - перед записью в файл
- onSetProfileArray () - при установке массива профиля в текущий объект, позволяет отследить данные профиля и скорректировать на основе них другие данные.
Обработчики ORM
Для использования событий (добавления, изменения, удаления) различных сущностей модуля (профили, инфоблоки в профиле, поля в профиле (и дополнительные поля в профиле), значения полей в профиле, данные для экспорта, связи товаров с внешними источниками, переопределение категорий) используйте стандартные событий ORM Битрикса. Например, отследить событие удаления профиля можно так:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'acrit.exportproplus',
sprintf('%s::%s', '\Acrit\ExportProPlus\Profile', \Bitrix\Main\ORM\Data\DataManager::EVENT_ON_DELETE),
function($event){
$ID = $event->getParameters()['id']['ID'];
// $ID - это ID удаляемого профиля, теперь, имея его, можно выполнить необходимые действия.
}
);
Возврат к списку