[msdSector] - расчет стоимости доставки с учетом секторов.

msdSector — расчет стоимости доставки с учетом секторов.


Особенности:

  • работа только с новым miniShop2 (version =>2.4.0-beta2)
  • сниппет расчета стоимости корзины
  • подсказки и выбор адреса с помощью DaData api
Демо: msdsector.vgrish.ru

Типы доставки:

Можно создать любой тип доставки и задать для нее нужные характеристики

Установка:

После установки компонента доступны 2 метода доставки.

  • Самовывоз
  • Курьер


Включите необходимые вам методы.
Подсказки геообъектов реализованы с помощью DaData Api. Нужно зарегистироваться в данном сервисе dadata.ru
и получить ключ dadata.ru/profile/#info

Сектора доставки:

Доступны для редактирования в окне метода доставки на одноименной вкладке.



Обозначиваете требуемый сектор, указываете стоимость и если необходимо описание и время доставки.

Расчет стомости:

За расчет стоимости доставки отвечает класс msdSectorDeliveryHandler. Можно подключить свой кастомный класс унаследовав базовый
и переопределив метод calculateCost.
Логика базового класса проста, берется локация пользователя и выбирается сектор с максимальной ценой включающий данную локацию, если таковой имеются идет расчет доставки.

Вы можете написать кастомный класс расчета согласно вашей логике.

msdSector.Order — расчет стоимости корзины
Сниппет msdSector.Order — для расчет стоимости корзины.
Аналогичен сниппету msOrder, добавлена инициализация основного класса и подгрузка необходимых сриптов.

  • tpl — Чанк оформления
  • elements — Список сниппетов через запятую, которые нужно запустить
  • processBlocks — JSON строка содержащая блоки необходимые для обработки
пример вызова — адрес одной строкой
{!msdSector.Order'|snippet:[
'tpl' => 'msdSector.order',
'suggestConfig' => [
	'token'  => '8993f742548398839f83aea5d5e2c75e3630a13f',
		'fields' => [
			'address'  => [
				'type' => 'ADDRESS',
				'constraints' => [
					'label'     => '',
					'deletable' => true,
					'locations' => [
						['city' => 'Ковров'],
						['city' => 'Мелехово'],
						['area' => 'Ковровский', 'settlement' => 'Первомайский'],
						['area' => 'Ковровский', 'settlement' => 'Новый'],
						['area' => 'Ковровский', 'settlement' => 'Заря']
					],
				],
				'subject'        => [
					'msdsector_coords' => 'geo_coords',
					'city'             => 'settlement,city',
					'street'           => 'street',
					'building'         => 'house',
					'room'             => 'flat',
				],
				'formatSelected' => 'formatAddressSelected',
				'formatResult'   => 'formatAddressResult',
			],
			'receiver' => [
				'type'   => 'NAME',
				'params' => [
					'parts' => [
						'NAME',
						'PATRONYMIC',
					],
				],
			],
			'email'    => [
				'type' => 'EMAIL',
			],
		],
	]
]}

пример вызова — адрес гранулярный
{'!msdSector.Order'|snippet:[
'tpl' => 'msdSector.order2',
'suggestConfig' => [
	'token'  => '8993f742548398839f83aea5d5e2c75e3630a13f',
	'fields' => [
		'city'  => [
			'type'  => 'ADDRESS',
			'hint'  => false,
			'setValue'  => true,
			'value' => 'г Ковров',
			'bounds'  => 'city-settlement',
			'constraints' => [
				'label'     => '',
				'deletable' => true,
				'locations' => [
					['region' => 'Владимирская'],
					['area' => 'Ковровский'],
				],
			],
		],
		'street'  => [
			'type'  => 'ADDRESS',
			'hint'  => false,
			'setValue'  => true,
			'bounds'  => 'street',
			'constraints' => 'city',
			'subject' => [
				'msdsector_coords' => 'geo_coords',
			],
		],
		'building'  => [
			'type'  => 'ADDRESS',
			'hint'  => false,
			'setValue'  => true,
			'fixData' => true,
			'bounds'  => 'house',
			'constraints' => 'street',
			'subject' => [
				'msdsector_coords' => 'geo_coords',
			],
		],
		'receiver' => [
			'type'   => 'NAME',
			'params' => [
				'parts' => [
					'NAME',
					'PATRONYMIC'
				]
			]
		],
		'email'    => [
			'type' => 'EMAIL'
		]

	]
]
]}
Важно
— компонент предназначен для работы с новым miniShop2 версии >= 2.4.0-beta2
— работа компонента не тестировалась с другими компонентами доставки, возможны конфликты в работе.
— кастомизация подсказок читать — dadata.userecho.com/, есть множество примеров.

Кастомизация
У методов доставки доступны следующие свойства

  • hidden — список полей которые необходимо скрыть при активной доставке. Например — msdsector_pickup_info
Чанки
  • msdSector.order — чанк заказа магазина. Взят дефолтный чанки и добавлены блоки с дополнительной информацией.
    — адрес подсказка одной строкой
    — msdsector_delivery_info — информация о выбранной доставке
  • msdSector.order2 — чанк заказа магазина. Взят дефолтный чанки и добавлены блоки с дополнительной информацией.
    — адрес гранулярные подсказки
    — msdsector_delivery_info — информация о выбранной доставке
  • msdSector.block.delivery.info — чанк информации о доставке
  • PS. Всем праздничного настроения! Спасибо за внимание. Пакет в магазине
Володя
24 декабря 2017, 11:21
modx.pro
1
2 400
+9
Поблагодарить автора Отправить деньги

Комментарии: 10

Максим
29 декабря 2017, 04:16
+2
Классный компонент, идеально подходит для интернет магазинов с доставкой еды. Особенно круто работает добавление областей на карту! Спасибо за работу!
    Володя
    29 декабря 2017, 12:22
    0
    Спасибо за отзыв!
    Валентина Павлова
    04 октября 2019, 14:22
    0
    Спасибо за дополнение! Как его посмотреть в работе?
    На сайте msdsector.vgrish.ru при выборе ул Дегтярева, д 162 выпадает г Владимир и модуль пишет, что доставки нет.
    alexandr.skyrda
    20 июля 2020, 23:43
    0
    купил плагин, в dadata зарегистрировался, но он не работает у меня правильно, в заказе в поле адреса ввожу данные, но пишет предупреждение «Укажите адрес доставки».
    joxi.ru/BA0Xn5aCP04LqA
    вот код вызова
    [[!msdSector.Order?
                &tpl=`msdSector.order`
                &suggestConfig=`[
            	'token'  => '6bd91e6e5de617c438ac56b1bbbe436cbb61419f',
            		'fields' => [
            			'address'  => [
            				'type' => 'ADDRESS',
            				'constraints' => [
            					'label'     => '',
            					'deletable' => true,
            					'locations' => [
            						['city' => 'Москва'],
            					],
            				],
            				'subject'        => [
            					'msdsector_coords' => 'geo_coords',
            					'city'             => 'settlement,city',
            					'street'           => 'street',
            					'building'         => 'house',
            					'room'             => 'flat',
            				],
            				'formatSelected' => 'formatAddressSelected',
            				'formatResult'   => 'formatAddressResult',
            			],
            			'receiver' => [
            				'type'   => 'NAME',
            				'params' => [
            					'parts' => [
            						'NAME',
            						'PATRONYMIC',
            					],
            				],
            			],
            			'email'    => [
            				'type' => 'EMAIL',
            			],
            		],
            	]`
            ]]
      Максим
      30 сентября 2020, 04:06
      0
      Очень полезный компонент, спасибо.
      Но вот документация, как обычно, «на отвали» сделана.
        Максим
        28 февраля 2021, 02:41
        0
         
          Игорь
          03 июня 2023, 10:52
          0
          Здравствуйте.
          Подскажите, можно ли использовать этот компонент совместно с картой во фронтенде — т.е. выбирать точку на карте при оформлении заказа?.. В демо, вроде, такого нет…
            Игорь
            03 июня 2023, 20:49
            0
            Компонент вообще поддерживается ещё?
            Установил на тестовый хостинг modhost.pro, что-то не работает ничего… (((
            При установке пишет:
            PHP notice: Undefined index: guid
            Could not load vehicle!
            PHP notice: Undefined index: guid
            Could not load class: encryptedVehicle from transport.encryptedvehicle.
            The specified xPDOVehicle class (transport.encryptedVehicle) could not be loaded.
            PHP notice: Undefined index: guid
            Успешно установлен пакет msdsector-1.0.6-beta
              Алексей
              16 мая 2024, 08:23
              0
              Всё норм работает, надо только заменить в файле core/components/msdsector/controllers/msdsectordeliveryhandler.class.php

              if (!class_exists("msDeliveryInterface")) {
                  require_once MODX_CORE_PATH . "components/minishop2/model/minishop2/msdeliveryhandler.class.php";
              }
              на
              if (!class_exists("msDeliveryInterface")) {
                  require_once MODX_CORE_PATH . "components/minishop2/handlers/msdeliveryhandler.class.php";
              }
              видимо пути переделали в свежем минишопе
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            10