- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/services/manager.php
- Класс: BitrixSaleDeliveryServicesManager
- Вызов: Manager::initHandlers
static function initHandlers()
{
if(self::$handlers !== null)
return true;
self::$handlersDirectories = array(
'LOCAL' => '/local/php_interface/include/sale_delivery/',
'CUSTOM' => Option::get('sale', 'delivery_handles_custom_path', BX_PERSONAL_ROOT.'/php_interface/include/sale_delivery/'),
'SYSTEM' => '/bitrix/modules/sale/handlers/delivery/'
);
$result = array(
'BitrixSaleDeliveryServicesGroup' => 'lib/delivery/services/group.php',
'BitrixSaleDeliveryServicesAutomatic' => 'lib/delivery/services/automatic.php',
'BitrixSaleDeliveryServicesConfigurable' => 'lib/delivery/services/configurable.php',
'BitrixSaleDeliveryServicesAutomaticProfile' => 'lib/delivery/services/automatic_profile.php',
'BitrixSaleDeliveryServicesEmptyDeliveryService' => 'lib/delivery/services/emptydeliveryservice.php',
);
BitrixMainLoader::registerAutoLoadClasses('sale', $result);
/*
* To add you own handler you must wrote smth. like this in for example init.php:
*
* function addCustomDeliveryServices()
* {
* return new BitrixMainEventResult(
* BitrixMainEventResult::SUCCESS,
* array(
* 'SaleHandlersDeliverySimpleHandler' => '/bitrix/modules/sale/handlers/delivery/simple/handler.php'
* ),
* 'sale'
* );
* }
*
* $eventManager->addEventHandler('sale', 'onSaleDeliveryHandlersClassNamesBuildList', 'addCustomDeliveryServices');
*/
$event = new Event('sale', 'onSaleDeliveryHandlersClassNamesBuildList');
$event->send();
$resultList = $event->getResults();
if (is_array($resultList) && !empty($resultList))
{
$customClasses = array();
foreach ($resultList as $eventResult)
{
/** @var BitrixMainEventResult $eventResult*/
if ($eventResult->getType() != EventResult::SUCCESS)
continue;
$params = $eventResult->getParameters();
if(!empty($params) && is_array($params))
$customClasses = array_merge($customClasses, $params);
}
if(!empty($customClasses))
{
BitrixMainLoader::registerAutoLoadClasses(null, $customClasses);
$result = array_merge($result, $customClasses);
}
}
$handlers = self::getHandlersClasses();
if(!empty($handlers))
{
BitrixMainLoader::registerAutoLoadClasses(null, $handlers);
$result = array_merge($result, self::getHandlersClasses());
}
self::$handlers = array_keys($result);
for($idx = count(self::$handlers) - 1; $idx >= 0; $idx--)
{
/** @var BitrixSaleDeliveryServicesBase $handler */
$handler = self::$handlers[$idx];
if(!$handler::isHandlerCompatible())
{
unset(self::$handlers[$idx]);
continue;
}
$profiles = $handler::getChildrenClassNames();
if(!empty($profiles))
{
self::$handlers = array_merge(self::$handlers, $profiles);
}
}
return true;
}