[msDeliveryOnMap] Выбор адреса и подсчёт стоимости доставки одним кликом по карте



Пакет считает стоимость доставки по имеющимся в базе автомобилям и зонам, в которые эти автомобили доставляют.

Демо-сайт компонента msDeliveryOnMap
Купить компонент в Modstore




Зоны доставки:

Для того, чтобы компонент работал и считал стоимость доставки до определённого места, нам нужно добавить на странице компонента зоны доставки.
Зона содержит название, которое во фронтенде нигде не выводится и необходимо только для обозначения зоны в бекенде. А также из обязательного:

  • Расстояние от склада:

  • или Область на карте:
    Интересный момент:
    Область на карте указывается в режиме редактирования и позволяет нарисовать любой требуемый многоугольник, потратив лишь немного времени. Однако, если у вас уже есть координаты многоугольника, то их можно ввести в поле «Координаты», и он мнгновенно добавится на карту.
    Также, есть возможность указать properties и options у многоугольника. Здесь можно почитать о том, какие возможности они дают. Указываются эти поля в JSON формате, например так:

    {"fillColor":"#6699ff","strokeColor":"#487cab","strokeWidth":2,"interactivityModel":"default#transparent","opacity":0.4}

Автомобили:

Следующим шагом будет добавление автомобилей, которые есть у нас в распоряжении.
У автомобиля есть обязательное название, объём и длина. При желании, для автомобиля можно добавить изображение. После добавления автомобиля у нас есть возможность привязать зоны доставки к нему из ранее добавленных нами:



Привязка зоны к автомобилю:

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

Полная инструкция по настройке:

  1. Устанавливаем компонент и включаем способ доставки в настройках miniShop2.
  2. Заходим в системные настройки и указываем всё, что нам нужно.
    Важным параметром является msdom_address_field. Он отвечает за поле, которое будет использовано в качестве полного адреса на странице корзины. По-умолчанию, для записи полного адреса задействовано поле city, которое в ms2 есть «из коробки». Можно заменить лексиконы бекенда/фронтенда для данного поля и оно вполне подойдёт для записи адреса при заказе.
  3. Создаём необходимые зоны на странице компонента.
  4. Создаём необходимые автомобили на странице компонента. После чего привязываем к каждому из автомобилей, зоны, в которые он будет доставлять.
  5. Заполняем товары так, чтобы в итоге можно было вычислить объём и длину единицы каждого товара. Можно добавить сразу объём/длину в товар, чтобы не вычислять их впоследствии «на ходу».
  6. В форму form.ms2_form, где находится наша кнопка «Добавить в корзину», добавляем 2 hidden поля, которые будут содержать информацию об объёме и длине:
    <input type="hidden" name="options[volume]" value="[[+tv_volume]]">
    <input type="hidden" name="options[length]" value="[[+tv_length]]">
    Обратите внимание, что я указал объём и длину в виде ТВ полей, но у вас они могут быть указаны в виде ms2 свойств/опций. Либо вы можете вычислить объём на ходу, если у вас есть необходимые для этого данные (длина, ширина, высота).
  7. Добавляем на страницу корзины или сразу в чанк tpl.msOrder.outer вызов сниппета:
    [[!msDom?inCart=`1`]]
  8. При желании, можно добавить вывод карты со списком автомобилей на любую другую страницу. Это удобно использовать на странице «Оплата и доставка», тем самым дав пользователю ознакомиться с примерными ценами на доставку в его район. Вот вывод сниппета:
    [[!msDom]]

Спасибо Михаилу Воеводскому за спонсорскую поддержку!
Павел Гвоздь
27 мая 2016, 23:48
modx.pro
2
3 508
+16
Поблагодарить автора Отправить деньги

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

Yar
Yar
28 мая 2016, 10:53
+2
Гениально!
    Konstantin
    29 мая 2016, 06:12
    +2
    Давно пора, давно ждали. Павел в своем стиле ) и каждый раз все круче и круче
      Rrp2010
      30 мая 2016, 11:25
      0
      Я наверное первый бета-тестер)

      Не сохраняются параметры



      Версия PHP 5.4

      Подскажите, куда копать?
        Василий Наумкин
        30 мая 2016, 12:25
        0
        В лог сервера — все ошибки 500 только там.
          Rrp2010
          30 мая 2016, 13:04
          0
          При клике на /assets/components/msdeliveryonmap/connector.php Failed to load
          {"success":false,"message":"\u0414\u043e\u0441\u0442\u0443\u043f \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d.","total":0,"data":[],"object":{"code":401}}
          В error.log на хосте, нет ошибок.
            Павел Гвоздь
            30 мая 2016, 13:07
            0
            Напиши в личку данные от бекенда, пожалуйста.
              Павел Гвоздь
              30 мая 2016, 13:46
              0
              Спасибо, готово! Была утрачена совместимость с ранними версия PHP, относительно 5.5. Обновил пакет на твоём сайте.

              Я наверное первый бета-тестер)
              Пакет тестировался на сайте заказчика пакета. Так что нет, ты не первый бета-тестер. Ты первый тестер с PHP 5.4. :)
                Rrp2010
                30 мая 2016, 14:26
                0
                Спасибо!
                  Rrp2010
                  30 мая 2016, 14:35
                  0
                  Координаты центра карты не передаются из параметров в бекенд, каждый раз при добавлении зоны, центр Москвы.

                  Это как совет, для будущих исправлений.
            Anastasis223
            31 мая 2016, 14:55
            0
            Кхм. Какие «теплые» воспоминания о временах, когда это пилилось, до Максима...) Жаль итогового варианта проекта со всеми красотами не дождалась, что бы «красиво» сдать)
              Павел Гвоздь
              31 мая 2016, 15:33
              +1
              А я совершенно не понял, о чём речь.
                Anastasis223
                31 мая 2016, 16:11
                0
                О том, откуда появился данный доп изначально ;-)
                Воеводский Михаил
                31 мая 2016, 22:25
                +1
                Настя, никакого Максима, насколько мне известно, рядом с данной задачей не было )
                Павел, Настя принимала участие в работе по данной задаче, прежде чем задача добралась до тебя.
                  Anastasis223
                  31 мая 2016, 23:05
                  0
                  Миша, виновата, каюсь!!! Телефон гадский Макса, видимо, любит больше)) Конечно, я имела в виду тебя)
                    Павел Гвоздь
                    31 мая 2016, 23:07
                    0
                    Всё встало на свои места. :)
                  Rrp2010
                  15 июля 2016, 16:29
                  0
                  После обновления minishop до версии 2.4.0-rc7. Перестала работать карта в корзине.

                  Такие ошибки:
                  Uncaught TypeError: msDom.tmp.ms2CallbacksClone.Order.add.response.success is not a function
                  default.js: 163
                  и
                  Uncaught TypeError: msDom.tmp.ms2CallbacksClone.Order.getcost.response.success is not a function
                  default.js: 180

                  Подскажите пожалуйста решение.
                    Павел Гвоздь
                    15 июля 2016, 16:30
                    0
                    Спасибо, скоро решу проблему. А вообще лучше писать в поддержку дополнения в modStore.pro.
                      Павел Гвоздь
                      15 июля 2016, 22:06
                      0
                      Поправил совместимость.
                        Rrp2010
                        15 июля 2016, 22:51
                        0
                        Спасибо большое, работает! )

                        А вообще лучше писать в поддержку дополнения в modStore.pro.
                        Я думал там только отзывы можно писать.
                          Павел Гвоздь
                          15 июля 2016, 22:54
                          0
                          В отзывах — да. А ещё есть раздел «Поддержка»:
                      Любовь
                      19 июля 2016, 14:32
                      0
                      Подскажите, пожалуйста. Планируется интернет-магазин по доставке блюд из ресторана и нужно рассчитывать стоимость в зависимости от расстояния. Ресторанов несколько.

                      Данный плагин подойдет?
                        Павел Гвоздь
                        19 июля 2016, 16:02
                        +1
                        По первому впечатлению — да. Вообще советую перечитать пост повнимательнее, ибо там описано, что требуется добавить для расчёта доставки, а именно:
                        1) Список автомобилей,
                        2) Список зон доставки,
                        3) Далее привязать зоны к автомобилям.
                        4) И важно то, чтобы у товаров были указаны длина и объём.

                        Но!.. В вашем случае, я думаю, длина и объём будет не важен. У вас стоимость доставки фиксированная для любого кол-ва заказанных блюд, верно? Вам нужно формировать цену только в зависимости от расстояния от точки старта? В таком случае, добавляете один автомобиль с заведомо большим объёмом и длиной (например: 999999). И добавляете зоны доставки (расстояния, по которым будет формироваться стоимость доставки). Далее привязываете эти расстояния к ранее добавленному автомобилю и выставляете необходимые параметры стоимости доставки (за км, либо фиксированную). Вот и всё, вроде как. Если что-то будет не ясно — пишите в службу поддержки компонента в modStore.pro.
                          Любовь
                          19 июля 2016, 16:50
                          0
                          Спасибо за ответ!
                          При доставке более 1500 руб. доставка бесплатная. И еще есть до 10 км стоимость, свыше 10км и удаленные районы.
                            Павел Гвоздь
                            19 июля 2016, 17:09
                            0
                            На счёт бесплатной доставки: напишите в поддержку пакета, как настроите всё остальное. По-умолчанию этого не предусматривается, но там не сложно дописать это на месте.
                            По второй части сообщения — не понял. Если можно, опишите подробнее, что имелось ввиду.
                              Любовь
                              19 июля 2016, 18:13
                              0
                              Дело в том, что пакет я еще не купила, хочу сначала выяснить подойдёт ли он для моих целей.
                                Павел Гвоздь
                                19 июля 2016, 19:51
                                0
                                Насколько я понял задачу — думаю, что подойдёт.
                        Евгений Шеронов
                        20 февраля 2017, 21:58
                        0
                        Здравствуйте!

                        Можно ли с помощью этого компонента сделать расчёт стоимости доставки за каждый километр от границ многоугольника?

                        К примеру, доставка в пределах МКАДа бесплатная, а за пределы — фикс. стоимость за каждый км.
                        (Расстояние нужно считать от границ МКАДа, не от склада то есть)
                          Павел Гвоздь
                          21 февраля 2017, 06:20
                          0
                          Без допила — нет. С допилом — возможно. Пишите, если есть бюджет на допил, проверю, реализуемо ли это вообще.
                          Алексей
                          06 июля 2018, 10:27
                          0
                          Добрый день!
                          Возможно ли в данном компоненте добавление нескольких точек старта?
                            Павел Гвоздь
                            06 июля 2018, 12:51
                            0
                            Увы, нет.
                              Алексей
                              06 июля 2018, 13:02
                              0
                              На разных контекстах поставил свои точки старта. Сейчас буду тестировать. Единственное, что не понятно как поставить разную стоимость зоны в зависимости от контекста и возможно ли это?
                          Николай Савин
                          08 августа 2018, 15:26
                          0
                          Возможно ли указать на карте ОДИН район (центр), добавив ему доставку 500.
                          А все что за пределами района(микрорайноны) оценивать в 700 без отрисовки доп зон?
                            Oleg Pimanov
                            19 июня 2020, 22:29
                            0
                            А такой вопрос, у меня выскакивает ошибка. Это с чем связано, блокирует?

                            api-maps.yandex.ru/services/search//v2/?callback=id_159259467443652378378&text=55.75396%2C37.620393&format=json&rspn=0&lang=ru_RU&token=a1ae8b8fdcb424fa45c938cc1840d0e6&type=geo&properties=addressdetails&geocoder_sco=latlong&origin=jsapi2Geocoder:1 Failed to load resource: the server responded with a status of 403 (Forbidden)

                            Отдает ответ вот такой

                            {
                            statusCode: 403,
                            error: «Forbidden»,
                            message: «Key is required»
                            }
                              Alex
                              06 июля 2020, 16:19
                              0
                              Добрый день. Я так понимаю, что для работы компонента все же нужно платную версию api использовать?
                              К примеру из корзины мы передаем значение адреса доставки в письмо или в админку modx.
                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                              36