Для разработчиков
Событие | Вызывается | С версии |
---|---|---|
getModuleParameters | при инициализации модуля на странице заказа | 1.0.6 |
OnYandexBeforeCalculatePrice | в начале расчета стоимости доставки | 1.2.0 |
OnYandexAfterCalculatePrice | в конце расчета стоимости доставки | 1.2.0 |
События изменения параметров модуля
getModuleParameters
C помощью данного события можно корректировать геолокацию выдаваемых подсказок по местоположению.
Коды можно взять на сайте https://kladr-rf.ru/
Bitrix\Main\EventManager::getInstance()->addEventHandler("corsik.yadelivery", "getModuleParameters", 'newModuleParameters');
function newModuleParameters(&$arOptions)
{
$arOptions['dadata']['geoLocation'] = [["kladr_id" => "50"], ["kladr_id" => "77"]];
}
События расчета стоимости доставки
Пример данных, приходящих в $data
$data = [
'id' => 17,
'action' => 'calculate',
'delivery' => [
'warehouse' => 'sklad',
'start' => 'bolee-20-km-ot-mkad',
'stop' => false,
],
'order' => [
'price' => 18473,
'weight' => 2,
],
'distance' => 29671.23991394043,
'type' => 'out',
];
OnYandexBeforeCalculatePrice
С помощью данного события вы можете получить и изменить данные до начала расчета.
Bitrix\Main\EventManager::getInstance()->addEventHandler("corsik.yadelivery", "OnYandexBeforeCalculatePrice", 'onBeforeCalculate');
function onBeforeCalculate(&$data)
{
$data['order']['price'] = $data['order']['weight'] > 10000 ? 500 : 500 * 0.1;
}
OnYandexAfterCalculatePrice
С помощью данного события вы можете получить и изменить стоимость доставки после расчета.
Для того, чтобы модуль выдал предупреждение и не продолжал дальнейший расчет стоимости необходимо выполнить следующие действия:
в переменнyю $price передать -1, а в $params массив с errors и вашим текстом ошибки.
Bitrix\Main\EventManager::getInstance()->addEventHandler("corsik.yadelivery", "OnYandexAfterCalculatePrice", 'onAfterCalculate');
function onAfterCalculate(&$price, $data, &$params)
{
$lineDistance = $data['greatCircleDistance'] / 1000; // Линейное расстояние от начала зоны доставки до точки доставки
$typeDelivery = $data['type']; // Тип доставки in - внутри зона, out - за пределами зон
$deliveryDistance = $data['distance'] / 1000; // Получаем длина маршрута в километрах
$deliveryPolygon = $data['delivery']['stop']; // Зон куда прошла доставка
$orderPrice = $data['order']['price']; // Сумма заказа
/**
* Ограничение по минимальной стоимости заказа
*/
if ($typeDelivery === 'in') {
$minimalPrice = 0;
if ($deliveryPolygon === 'do-10-km-ot-mkad' && $orderPrice < 500) {
$price = -1;
$minimalPrice = 500;
}
if ($deliveryPolygon === '10-20-km-ot-mkad' && $orderPrice < 800) {
$price = -1;
$minimalPrice = 800;
}
if ($price < 0) {
$errorText = "<p>Доставка в выбранную зону осуществляется при заказа от <b>$minimalPrice</b> рублей</p>";
$params = [
'errors' => [
'modal' => $errorText,
'checkout' => $errorText
]
];
}
}
/**
* Ограничение по максимальной отдалённости за пределы зон
*/
if ($typeDelivery === 'out' && $lineDistance > 30) {
$price = -1;
$errorText = "<p>К сожалению так далеко мы не доставляем</p>";
$params = [
'errors' => [
'modal' => $errorText,
'checkout' => $errorText
]
];
}
}