Модуль “Расчет стоимости доставки” позволяет с помощью сервиса
С помощью API Яндекс.Карты 2.0 производится отображение зон, построение маршрутов и расчет протяженности маршрутов.
[spoiler]
Используя модуль
Для расчета стоимости используетcя 2 основных понятия:
Зона: область, в которой действуют определенные правила расчета и Карта: совокупность зон.
На шаге расчета стоимости доставки, в зависимости от параметров корзины (например, стоимости или суммарного веса, или от других необходимых условий) можно программно выбрать нужную карту.
Вот как выглядит форма для создания и настройки зоны из административной части (зону (область) карты настраиваем сами, кликая мышкой, выбираем цвет зоны и другие характеристики):
Таблица 1. Параметры настройки зон
Название | Стандартное поле элемента инфоблока. Служит для задания названия зоны. В публичной части не используется. |
Цена за км | Используется для расчета цены в зависимости от расстояния. При использовании этого параметра, обязательно должна быть указана зона, от которой идет отсчет (параметр “Зона от которой считается цена за км”) |
Зона от которой считается цена за км | Указывается зона, от которой будет рассчитываться расстояние по дорогам (длина маршрута). |
Фиксированная цена | Если не указана цена за километр, то стоимость доставки в этой зоне равна этому значению. Если указана цена за километр, то стоимость доставки расчитывается как: фиксированная цена + (цена за км * длина маршрута доставки) |
Цвет подсветки | Цвет зоны. Указывается в html формате, например #ff0000 для красного. При пустом значении, зоны в публичной части не показываются. |
Сортировка | Стандартное поле элементов инфоблока. Используется как параметр zIndex для настройки положения зоны относительно других зон (выше-ниже). Например, зона со значением сортировки 700 будет лежать выше зоны с сортировкой 500. |
Координаты зоны | Яндекс.карта, в которой необходимо визуально задать область создаваемой зоны. |
Округления и разделения выводимых значений стоимости | “Десятичная точка при выводе” - то что будет разделять целую и дробную часть. Например “,” “.” “Разделитель тысяч при выводе” - это разделитель через каждые три знака, Например: “пробел”, “.” “Количество десятичных знаков” - это количество знаков после запятой. Например: 1, 2, …. Количество десятков при округлении” - это округление до целого, десяток, сотен и т.д. Например: 0, 1, 2, ... |
! Некоторые пожелания к расстановке границ зоны (на примере г.Москва):
- точки желательно ставить по периметру зоны в одном направлении, т.к. выделяется зона
- точки желательно ставить по периметру зоны в одном направлении, т.к. выделяется зона
- точки желательно ставить на пересечении МКАД и радиальных шоссе.
Если точек много — расчет будет производится дольше.
Если мало — будет слишком неточным.! Будьте внимательны! Если в зонах задана фиксированная стоимость доставки без учета километража, то маршрут прорисовываться не будет и на карте не обозначается точка, от которой ведется отсчет.
Также следует упомянуть о механизме расчета маршрута, к сожалению, карты не позволяют в настоящий момент рассчитать маршрут от произвольной точки до многоугольника (полигона), поэтому расчет кратчайшего маршрута происходит по следующему алгоритму: проходим по всем вершинам многоугольника, для каждой точки рассчитываем маршрут до точки назначения, выбираем минимальный маршрут, подсчитываем стоимость. Поэтому при рисовании зон рекомендуется вершины многоугольника размещать на перекрестках ключевых улиц, магистралей, трасс.
Создаем необходимое нам кол-во зон и собираем в карту. Форма для создания и настроек карты из администраторской части:
Таблица 2. Параметры настройки карт
Название | Название карты или способа доставки. |
Зоны | Хранит зоны, которые относятся к этому способу доставки. |
Здесь собираем воедино созданные зоны доставки, через кнопку “добавить” - добавляем новое поле, в поле выбираем зону и так для всех нужных зон. Жмем сохранить, автоматически переходим к списку карт, где увидим свою.
Для того, чтобы при оформлении заказа стала доступна автоматизированная служба доставки, необходимо указать индекс и местоположение магазина ("Настройки модулей" -> "Интернет-магазин" -> "Адрес магазина";) и активировать службу доставки "sebekon_yaroute" на странице "Магазин" -> "Настройки магазина" -> "Службы доставки" -> "Автоматизированные"
Добавляем компонент в нужную часть страницы. У компонента можно задать следующие параметры:
Таблица 3. Параметры настройки компонента
Карта | Используется для ограничения вывода карт. Можно выбрать несколько карт. Результат расчета будет выводиться для каждой карты. |
Показать маршрут | Если значение установлено, то проложенный маршрут от выбранной точки, до зоны от которой идет расчет, будет показан. Также будет показана длинна рассчитанного минимального маршрута. |
1. “Расчет со множеством точек” (default). В настройках компонента, вставленного в нужное место страницы (как вариант, страница “Доставка и оплата”) указываем необходимые дополнительные параметры и выбираем нужные карты:
Этот шаблон имеет полный функционал от выбора адреса для доставки до формирования заказа на доставку с возможностью выбора неограниченного количества адресов доставки.
На карте с помощью окна поиска или просто двойным кликом мыши выбираем необходимое количество адресов для доставки, на карте отображается путь до выбранных адресов (кратчайший), автоматически рассчитывается стоимость доставки, далее можно добавить выбранные маршруты в корзину заказов и оформить заказ.
2. “Показ зон” (.light).
После добавления компонента на страницу, пользователю выводится карта для расчета стоимости доставки компонента версии default или light:
. default
.light
Расчет оплаты за доставку выполняется следующим образом:
При клике на карте выполняются действия:
- Проходим по всем выбранным в настройках компонента картам. В каждой карте проходим по ее зонам. Если точка находится внутри текущей зоны, то переходим к шагу № 2. (Если точка находится внутри двух пересекающихся зон, то в таком случае берем зону, у которой максимальный признак сортировки (Стандартное поле элементов инфоблока. Используется как параметр zIndex для настройки положения зоны относительно других зон (выше-ниже). Например, зона со значением сортировки 700 будет лежать выше зоны с сортировкой 500.))
- Если указана фиксированная цена и не указана цена за километр, значит стоимость доставки данным способом (в соответствии с текущей картой) равна фиксированной цене текущей зоны. Если указана цена за километр и зона от которой будет идти расчет, то добавляем текущую зону в список зон требующих расчета кратчайшего маршрута до точки.
- Проходим по всем зонам, требующим расчета маршрута, получаем координаты вершин многоугольника (зоны), от которой будет идти расчет до выбранной точки.
- Ожидаем завершения расчета всех маршрутов.
- Выбираем минимальную цену среди всех маршрутов.
Различные способы настроек более подробно описаны тут:
Коллеги, желаю приятной работы с 1С Битрикс!
Разработка модуля: Токарев Юрий.
Тестирование и помощь в написании поста: Алёна Осипенко.
,