События модуля (для программистов)

Внимание.

Реализацию обработчиков событий модуля следует поручить разработчику, хорошо знакомому с работой CMS Битрикс.

Компания 5Post не несет какой-либо ответственности за любые последствия, произошедшие по причине некорректно созданных и/или используемых обработчиков событий модуля.

С помощью обработчика этого события можно скрыть вывод профилей службы доставки. Пример скрытия обработчика с определенным идентификатором для определенного города:


\Bitrix\Main\EventManager::getInstance()->addEventHandler('ipol.fivepost', 'onCompabilityBefore', 'onCompabilityBeforeFivepostHandler');

/**
 * onCompabilityBefore sample handler
 *
 * @param \Bitrix\Main\Event $event
 * @return \Bitrix\Main\EventResult
 */
function onCompabilityBeforeFivepostHandler(\Bitrix\Main\Event $event)
{	
    /** @var $deliveryId int Delivery handler ID */
    $deliveryId = $event->getParameter("DELIVERY_ID");
    
    /** @var $profiles array Available delivery profiles */
    $profiles = $event->getParameter("PROFILES");

    /** @var $shipment \Bitrix\Sale\Shipment Shipment object */
    $shipment = $event->getParameter("SHIPMENT");
    
    /** @var $order \Bitrix\Sale\Order */
    $order = $shipment->getCollection()->getOrder();
    $props = $order->getPropertyCollection();
    $deliveryLocationProp = $props->getDeliveryLocation();
    $deliveryLocation     = $deliveryLocationProp->getValue();
    
    /* Hide delivery service profile with id 101 for location Sankt-Peterburg */
    if ($deliveryLocation == '0000103664' && $deliveryId == 101)
    {
        /* Drop profiles */
        $profiles = array();
        return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['PROFILES' => $profiles]);
    }
    /* Do nothing in other cases */
    else
    {					
        return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::UNDEFINED, array());
    }
}

С помощью обработчика этого события можно изменить рассчитанные модулем стоимость и сроки доставки по практически любой желаемой логике.

Внимание.

Учтите, что наценки и округление, которые можно настроить в профилях службы доставки, применяются до срабатывания события onCalculate. Во избежание путаницы рекомендуется применять что-то одно: либо настройки профилей, либо модификацию стоимости через onCalculate.

Пример изменения стоимости доставки для определенных городов:


\Bitrix\Main\EventManager::getInstance()->addEventHandler('ipol.fivepost', 'onCalculate', 'onCalculateFivepostHandler');

/**
 * onCalculate sample handler
 *
 * @param \Bitrix\Main\Event $event
 * @return \Bitrix\Main\EventResult
 */
function onCalculateFivepostHandler(\Bitrix\Main\Event $event)
{	
	/** @var $deliveryId int Delivery handler ID */
	$deliveryId = $event->getParameter("DELIVERY_ID");
	
	/** @var $profile string Current delivery profile */
	$profile = $event->getParameter("PROFILE");
	
	/** @var $result array Delivery calculation result */
	$result = $event->getParameter("RESULT");

	/** @var $shipment \Bitrix\Sale\Shipment Shipment object */	
	$shipment = $event->getParameter("SHIPMENT");
	
	/** @var $order \Bitrix\Sale\Order */
	$order = $shipment->getCollection()->getOrder();
	$props = $order->getPropertyCollection();
	$deliveryLocationProp = $props->getDeliveryLocation();
	$deliveryLocation     = $deliveryLocationProp->getValue();
	
	/* Increase delivery cost for delivery service profile with id 101 for location Sankt-Peterburg */
	if ($deliveryLocation == '0000103664' && $deliveryId == 101 && $result['RESULT'] == 'OK')
	{
		$result['VALUE'] += 100;			
		return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $result]);
	}
	/* Fixed delivery cost for Moscow */
	else if ($deliveryLocation == '0000073738' && $result['RESULT'] == 'OK')
	{
		$result['VALUE'] = 250;
		return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['RESULT' => $result]);			
	}
	/* Do nothing in other cases */
	else
	{					
		return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::UNDEFINED, array());
	}
}

С помощью обработчика этого события можно изменить габариты, вес, названия и некоторые другие параметры товаров, которые используются для расчета стоимости доставки и выгрузки заявки в 5Post.

Внимание.

Через обработчик можно добавить или удалить какие-либо товары, но общая стоимость товаров после изменения должна совпадать с первоначальной, в противном случае такой заказ не удастся выгрузить в 5Post. На заказе Битрикса изменение списка товаров не отражается никак, все модификации происходят сугубо внутри модуля.

Пример добавления к названиям товаров их количества и единиц измерения:


\Bitrix\Main\EventManager::getInstance()->addEventHandler('ipol.fivepost', 'onItemsListReady', 'onItemsListReadyFivepostHandler');

/**
 * onItemsListReady sample handler
 *
 * @param \Bitrix\Main\Event $event
 * @return \Bitrix\Main\EventResult
 */
function onItemsListReadyFivepostHandler(\Bitrix\Main\Event $event)
{
	/** @var array $items Items list */
	$items = $event->getParameter("ITEMS");
	
	if (!empty($items)) {
		foreach ($items as &$item) {
			$item["NAME"] = implode(', ', [$item["NAME"], sprintf('%g', $item["QUANTITY"]).' '.$item["MEASURE_NAME"]]);
		}		
		
		return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, ['ITEMS' => $items]);
	}
	
	return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::UNDEFINED, []);
}
Обратитесь за платной консультацией, если не можете решить проблему или ваши технические специалисты заняты.
Нашли ошибку?
Или знаете как дополнить? Выделите фрагмент текста и нажмите CTRL+Enter или просто напишите сюда

Другие решения и услуги

cover
Интеграционное обслуживание
Услуги по комплексной интеграции и поддержке ваших клиентов
Об обслуживании cover
cover
Техническая поддержка
Для готового сайта, приложения и других систем любой сложности и готовности
О поддержке cover
cover
Готовое мобильное приложение
Для интернет-магазинов, доставки еды и продуктов
О приложении Mobile Shop cover
cover
Модуль КЛАДР
Подсказки и автозаполнение адреса в корзине вашего интернет-магазина
О модуле Кладр cover
cover
Модуль ASEO
Профессиональный инструмент для СЕО-оптимизации сайта
О модуле Aseo cover