Опишите доработку или сценарий — обсудим вместе с другими клиентами.
Расчёт доставки: МКАД, КАД и произвольные зоны
Технические данные
Совместимые редакции
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Малый бизнес
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Бизнес
Описание
Модуль добавляет в интернет-магазин службы доставки с расчётом стоимости по адресу клиента. Адрес уточняется через сервис DaData: подсказки при вводе и определение координат. Тарифы DaData опубликованы на сайте сервиса.
Доступны три службы:
- МКАД — стоимость относительно Московской кольцевой автодороги;
- КАД — стоимость относительно кольцевой автодороги Санкт-Петербурга;
- Зоны на карте — фиксированная цена, если адрес попадает в полигон, который администратор нарисовал в админке.
Тарификация МКАД и КАД
- цена за километр за пределами кольца;
- таблица дистанций — разная стоимость для диапазонов, например от 0 до 20 км и от 21 до 40 км.
Можно задать стоимость доставки внутри кольца и при необходимости прибавлять её к цене за пределами МКАД или КАД.
Произвольные зоны
Функция выключена по умолчанию. После включения в настройках модуля администратор рисует зоны на Яндекс.Карте, задаёт название, цвет и цену. На оформлении заказа модуль берёт координаты адреса из DaData и определяет, в какую зону он попал. Если адрес вне всех зон, можно показать фиксированную цену.
Для рисования зон в админке нужен ключ JavaScript API Яндекс.Карт.
Нестандартная логика магазина
Расчёт можно дополнить своими обработчиками событий. Типичный пример: внутри МКАД доставка 300 ₽, а при сумме заказа от 3500 ₽ — бесплатно.
Модуль совместим со стандартным шаблоном компонента sale.order.ajax. Если шаблон оформления заказа сильно переработан, может понадобиться доработка.
ОБЯЗАТЕЛЬНЫЕ УСЛОВИЯ ДЛЯ КОРРЕКТНОЙ РАБОТЫ МОДУЛЯ
- в PHP включено расширение curl;
- на счёте DaData положительный баланс — тарифицируется каждый запрос;
- в свойствах заказа есть свойство с флагом «Является адресом», его поле выведено на странице оформления заказа;
- если модуль в демо-режиме, демо-период не должен быть просрочен;
- для зон: опция включена в настройках модуля и указан ключ JavaScript API Яндекс.Карт.
1. Установите модуль из Маркетплейса.
2. Зарегистрируйтесь в сервисе DaData и получите API-ключ и секретный ключ в личном кабинете.
3. Откройте Настройки → Настройки продукта → Настройки модулей → Расчёт доставки: МКАД, КАД и произвольные зоны. На вкладке «Интеграция с Dadata» укажите API-ключ и секретный ключ.
В свойствах заказа должно быть свойство с флагом «Является адресом», его поле нужно вывести на страницу оформления заказа.
Служба МКАД или КАД
- Перейдите в Магазин → Настройки → Службы доставки, нажмите «Добавить» и выберите службу для МКАД или КАД.
- На вкладке «Общие настройки» при необходимости измените название и описание.
- На вкладке «Настройка обработчика» укажите цену доставки внутри кольца. Для расчёта за километр заполните цену за километр. Для таблицы дистанций отметьте чекбокс «Рассчитывать стоимость доставки на основе таблицы дистанций».
- Если включена таблица дистанций, откройте Магазин → Настройки → МКАД — стоимость доставки или КАД — стоимость доставки и задайте цены по диапазонам (например, 0–20 км и 21–40 км).
Служба по зонам на карте
- В настройках модуля на вкладке «Зоны доставки» включите расчёт по зонам и укажите ключ JavaScript API Яндекс.Карт (не ключ Геокодера и не ключ DaData). Ключ получают в кабинете разработчика Яндекса. При необходимости задайте центр карты.
- Сохраните настройки. В меню появится пункт Магазин → Настройки → Зоны доставки. Нарисуйте полигоны, укажите название и цену каждой зоны.
- В Магазин → Настройки → Службы доставки добавьте службу «Доставка по зонам на карте». На вкладке «Настройка обработчика» выберите, что делать, если адрес вне зон: фиксированная цена или сообщение (например, «по согласованию»).
Готово: модуль настроен.
Разработчикам
Можно изменить уже рассчитанную стоимость через события модуля tmg.kaddelivery:
- OnDeliveryInMkadCalculated — стоимость внутри МКАД;
- OnDeliveryOutMkadDistanceCalculated — за МКАД по таблице дистанций;
- OnDeliveryOutMkadForKmCalculated — за МКАД по цене за километр;
- OnDeliveryInKadCalculated — стоимость внутри КАД;
- OnDeliveryOutKadDistanceCalculated — за КАД по таблице дистанций;
- OnDeliveryOutKadForKmCalculated — за КАД по цене за километр;
- OnDeliveryZoneCalculated — стоимость по зоне на карте (в том числе если адрес вне зон).
События МКАД и КАД получают три аргумента:
- $order — экземпляр Bitrix\Sale\Order;
- $arAddress — ответ DaData по адресу, см. документацию clean/address;
- &$price — рассчитанная стоимость, её можно изменить.
OnDeliveryZoneCalculated получает четвёртый аргумент $zone — строка найденной зоны или null, если адрес вне зон. Порядок аргументов: $order, $arAddress, $zone, &$price.
Пример: внутри МКАД доставка бесплатна, если сумма заказа больше 3500 ₽. В файле /bitrix/php_interface/init.php или /local/php_interface/init.php:
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'tmg.kaddelivery',
'OnDeliveryInMkadCalculated',
'OnDeliveryInMkadCalculatedHandler'
);
function OnDeliveryInMkadCalculatedHandler($order, $arAddress, &$amp;price)
{
if ($order->getPrice() > 3500) {
$price = 0;
}
} |
Установите этот модуль прямо сейчас!
Для этого укажите адрес сайта:
