+7 495 008 8452 пн.-пт. 10:00 – 17:00
Обработчики используются для вмешательства в ход работы модуля без вмешательства в его исходные файла. В модуле имеется поддержка довольно большого списка событий. Кратко опишем их ниже.

Системные события:
  • 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 удаляемого профиля, теперь, имея его, можно выполнить необходимые действия.
   }
 );

Возврат к списку