[mscDistance] - доставка по городу/району

mscDistance — рассчитывает стоимость доставки, с учетом расстояния от точки до точки.
Вкратце — вы создаете сами тарифную сетку доставки.



Особенности
  • работа только с новым miniShop2 (version =>2.4.0-beta2)
  • сниппет для расчета стоимости корзины
  • каждому методу доставки своя точка отправления и свои цены
демо: delivery.vgrish.ru/

Типы доставки
Ваш собственный тип доставки.

Установка
После установки компонента доступен 1 метод доставки.
Необходимовыставить точку отправления

Задать цены


сниппет mscDistance.Order — расчет стоимости корзины
параметры
  • elements — cписок сниппетов через запятую, которые нужно запустить.
  • pointName — имя точки доставки
Практически сниппет обертка, выполняет необходимые действия, данные выставляет в плейсходеры, затем запускает поочередно сниппеты из списка elements. Последним необходимо указать родной сниппет msOrder.

пример вызова
[[!mscDistance.Order?
]]

Информация о доставке
Вся информация о доставке пишется в поле properties msOrderAddress.
Так же доступна в админке на странице заказов.


Важно
Компонент предназначен для работы с новым miniShop2 версии >= 2.4.0-beta2
Другие компоненты по расчету стоимости доставки будут переписаны по аналогии, на данный момент они не совместимы.

Совместимость
пример вызова корзины для доставки msDellin2 и mscDistance
[[!msDellin.Order?
    &elements=`mscDistance.Order,msOrder`
    &tpl=`msAll.order`
]]

ps. Всем спасибо за внимание!
Володя
27 июля 2016, 13:31
modx.pro
4 732
+5
Поблагодарить автора Отправить деньги

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

Степан Прищепенко
10 января 2017, 18:42
0
Привет, опять я с доставкой, чет не получается заставить работать вместе с msDellin2, чанк msAll.order отсутствует. И msDellin2 и mscDistance версий 2.0.6-beta.
    Володя
    10 января 2017, 18:50
    0
    Привет, опять я с доставкой, чет не получается заставить работать вместе с msDellin2, чанк msAll.order отсутствует. И msDellin2 и mscDistance версий 2.0.6-beta.
    не получается что? Отсутствие чанка msAll.order?

    msAll.order — это сборный чанк, вот пример gist.github.com/vgrish/1061f0295e665b02b9d5f878c7f7cd17
      Степан Прищепенко
      10 января 2017, 19:11
      0
      Ну да чанка то нет, информации найти по нему не получилось, решил спросить. Скопипастил, запустил как
      [[!msDellin.Order?
          &elements=`mscDistance.Order,msOrder`
          &tpl=`msDeliveryAll`
      ]]
      в ответ получаю вот это:
      Правильно ли я понимаю, что чанк должен содержать только те способы доставки что существуют в системе? или я скопипастил криво?
        Володя
        10 января 2017, 19:14
        0
        Правильно ли я понимаю, что чанк должен содержать только те способы доставки что существуют в системе?
        Да, конечно. Каждый блок выделен комментариями, удалите ненужные способы и все будет ок.
    Степан Прищепенко
    10 января 2017, 19:33
    0
    Спасибо!
      Konstantin
      02 мая 2017, 09:05
      0
      Володя,
      Не могли бы объяснить, как работает штука чит на картинке?

      Пытался понять, но видимо дурак, потому что стоимость доставки всегда выходит 6800 :-).
      Точка (координаты склада) настроенна, а результат в корзине такой:

      Я не понял как настроить доставку так:
      Стоимость — 80₽ км, доставка осуществляется в пределах 70 км от склада

        Володя
        02 мая 2017, 09:58
        0
        Я не понял как настроить доставку так:
        Стоимость — 80₽ км
        поставьте стоимость за единицу — 80

        доставка осуществляется в пределах 70 км от склада
        ограничений как таковых помоему нет, просто задайте для верхнего диапазона завышенную стоимость и все.

        или можно плагином на событие mscDistanceOnAfterRequest
        switch ($modx->event->name) {
        
            case 'mscDistanceOnAfterRequest':
                
                $result = $modx->getOption('result', $scriptProperties, array(), true);
                $options = $modx->getOption('options', $result);
                $distance = $modx->getOption('distance', $options, 0, true);
                 
                if ($distance > 0) {
                    $result['result']['errors'] = array('Превышен лимит перевозки');
                }
                
                $modx->event->returnedValues['result'] = $result;
                
                break;
        
        }
        Kirill
        25 марта 2020, 15:03
        0
        Добавьте возможность указывать apikey для яндекс.карт, а то с недавних пор без ключа они «не заводятся»
          Mandarins
          05 февраля 2021, 20:12
          -1
          Добрый вечер, купил это плагин и где настраивать его так и не понял?
          как он настраивается, где добавляется не отобразился (
          инструкцию пожалуйста дайте
            Андрей
            06 февраля 2021, 02:38
            -1
              Mandarins
              08 февраля 2021, 19:25
              -1
              Системных настройках пусто, token не могу понять куда вставить.
            Mandarins
            08 февраля 2021, 19:05
            -1
            Не понятно куда нужно вставлять яндекс ключ. скачал уже дополнение MapsYandex вставил всё равно ошибка 403, в чём дело в системных настройках этого дополнение нету полей куда нужно вставлять api ключ.
            Куда прописать?
            С 2019 года не обновлялся, думаю понятно почему так дёшево стоит много ошибок ((
              Андрей
              09 февраля 2021, 00:06
              0
              Вместо того чтобы истерить, нужно писать в поддержку компонента, где и решаются подобные вопросы.
                Mandarins
                09 февраля 2021, 17:49
                0
                Списался с автором, была реальна ошибка точнее не было поля добавил api для яндекса у дополнения.
                Автор отличный. Рекомендую.
                  Алексей
                  23 марта 2021, 16:26
                  0
                  Добрый день! Подскажите, а как вы добавили поля api для яндекса??? Какая-то системная настройка?
                    Олег Захаров
                    25 сентября 2021, 00:01
                    0
                    Код подключения Api для яндекса указывается в скрипте assets/components/mscdistance/js/web/default.js — он скорее всего должен быть там прописан. И в коде подключения api должен быть обязательно ключ apikey. У меня при одной переустановке компонента почему-то этот код apikey отсуствовал. Благо в резервных копиях он остался и я вручную его прописал и доставка заработала — но только на ПК. На мобильных были проблемы работы, вроде решил путем явного прописывания в начало чанка head кода подключения метрики с указанием apikey. Мой коммент ниже.
                      Алексей
                      25 сентября 2021, 08:31
                      0
                      Спасибо! Я разобрался.
              Олег Захаров
              22 сентября 2021, 01:26
              1
              0
              Вопрос — у последних версий нет системных настроек?
              Например на mscDistance
              есть указание возможности задания настроек.
              Например не нашел в настройках способа доставки (задаваемого в настройках Minishop) возможность ограничить:
              Город доставки — указать город в пределах которого осуществляется доставка товаров
              Регион доставки — указать регион в пределах которого осуществляется доставка товаров
              Вот хочу я например ограничить доставку одним городом, чтобы не выводил адреса из других городов. Сейчас можно указать адрес доставки другие города что мешает.
              Сейчас в системных настройках по mscdistance пусто. Пробовал переустановить, все равно пусто.
              Или можно указанные настройки вручную создать. Как они будут работать. Почему нельзя было вывести в системные настройки? Или это баг?
                Олег Захаров
                22 сентября 2021, 01:45
                1
                0
                Еще хотелось бы настраивать отображение карты, задавать возможность отображения маркера, масштаба показа в начальный момент экрана загрузки карты.
                Еще очень хотелось бы чтобы пользователь мог выбрать точку на карте (кликнуть по зданию) и указать что-то типа доставить сюда.

                Ведь это было удобно для пользователя.
                Плюс еще есть потребность чтобы если пользователь авторизован, адрес доставки можно хранить в настройках пользователя и при оформлении заказа у авторизованного пользователя была возможность выбирать адрес доставки по умолчанию — и тогда при оформлении заказа чтобы доставка рассчитывалась для этого адреса, выбранного по умолчанию (или даже хранить несколько адресов у пользователей и была возможность выбирать в момент оформления заказа.)
                И еще вопрос за что отвечает mscDistance.product.cost (не уверен входит ли он в стандартную поставку компонента — на исправляемом сайте клиента компонент уже стоял, возможно этот сниппет был создан другим программистом)? Как его использовать? Посмотрел код, можно разобраться. Но было бы правильно указать его описание на странице компонента — сейчас там о нем нет описания.
                  Олег Захаров
                  22 сентября 2021, 04:01
                  1
                  0
                  Еще момент — иногда возникают ошибки расчета стоимости когда например пользователь ввел один адрес, стоимость доставки посчиталась и запомнилась в форме. Затем пользователь меняет адрес доставки, но стоимость уже остается посчитанной для предыдущего адреса. Т.е. получается не пересчитывается доставка. Так можно сделать обман пользователем чтобы доставка посчиталась по минимуму а затем уже выбирается реальный адрес, а стоимость может остаться старой.
                  Или же пользователь ввел заново название города, а улицу не указал (есть адреса типа железнодорожная станция и она не сохраняется как улица), или она не подставилась, и доставка точно не посчиталась/ не обновилась. У меня происходит так что если указать просто Новосибирск — то выводится Новосибирск, и тогда считается доставка в центр или даже оставляет старый маршрут (карта не перерисовывается) и стоимость доставки не меняется. Для указания просто города наверное вообще надо делать чтобы доставка не считалась правильно указанной и посчитанной.
                  Вижу решение проблемы чтобы через js проверять чтобы улица (поле street, делаю у себя скрытым, заполняется после заполнения через поле mscdistance_delivery_to_point) была заполнена.
                  Но были также ошибки когда не считается переменная mscdistance_delivery_distance. И доставка не считается. Как быть в этом случае? Приходится думать в сторону написания JS кода для проверки наличия заполнения mscdistance_delivery_distance (ну и mscdistance_delivery_to_point соответственно).
                    Олег Захаров
                    24 сентября 2021, 23:45
                    0
                    Есть еще проблема — если ввести и выбрать адрес доставки, карта инициализируется и стоимость пересчитывается. Но если очистить строку адреса стоимость и поля координат и расстояний не пересчитываются. Вообще хотелось бы сделать проверку что поле длины расстояний (mscdistance_delivery_distance) не оставались пустыми или равными 0. Если в поле указания адреса доставки введенный адрес удалить и ввести новый адрес и кликнуть по выпадающему адресу — вроде бы карта переинициализируется. Но периодически бывает так чтобы не обновляется и стоимость не сбрасывается.
                    Попробовал сделать такой код на проверку что поле адреса пустое вызывая команду mscDistance.initialize();
                    $(document).on('change keydown','#mscdistance_delivery_to_point',function(e){
                    			/*надо бы добавить проверку логики если ранее выбранная улица не совпадает с новой*/
                    			if($(e.target).val()!=""){
                                                /*если поле не  пустое*/
                    			}else{
                    				/*пытаемся пере инициализировать расчет доставки*/	
                    				mscDistance.initialize();
                    			}
                    		});
                    $(document).on('blur','#mscdistance_delivery_to_point',function(e){
                    			if($(e.target).val()==""){
                    				mscDistance.initialize();
                    			}
                    		});
                    Не работает, сумму доставки и карту не обновляет. Какая команда в js отвечает за переинициализацию доставки (стоимости и карты маршрута)?
                      Олег Захаров
                      24 сентября 2021, 23:56
                      0
                      Еще сегодня нашел одну возможную проблему неправильной работы доставки. На тестовом сервере все работало, на рабочем доставка в упор не считалась, карта не обновлялась По выводимым ошибкам поискал информацию и нашел рекомендации о том чтобы код api яндекс карт не были ниже кода метрики. Понаблюдал за тем как код карт подгружается и пришел к выводу о том что возникает проблема с попыткой скрипта assets/components/mscdistance/js/web/default.js добавить (инициализировать) карту. Конкретно у меня возникал конфликт с метрикой (т.к. ее код подгружался через Google Tag Manager динамически) я по совету форумов повторил код апи яндекс карт с указанием ключа — вставил непосредственно выше (но не рядом с метрикой и не над ней — все равно глючило) и все прекрасно стало грузиться.
                      Была проблема плохой работы на мобильных устройствах. Почитал справочные материалы — оказалось что вроде на устройствах с низкой скоростью интернета методы со вставкой кода (метод document.writeln в default.js) плохо срабатывают — где-то пишут что блокируется браузером. Вышеуказанный метод вставки кода непосредственно в начало чанка head помог с решением проблемы. Но это костыль. Вставлял так:
                      <script src="https://api-maps.yandex.ru/2.1/?apikey=ВзялAPIкодИзdefault.jsс5строки&lang=ru_RU&mode=debug&load=package.full&onload=mscDistance.Ymaps.ready&ns=ymaps" type="text/javascript">
                          </script>
                      По сути это повтор 5 строки скрипта assets/components/mscdistance/js/web/default.js — и сайт сразу стал прекрасно работать и на мобильном тоже. Таковы мои изыскания нескольких бессонных ночей. Искал причину по разному, переделал форму заказа и корзины, а оказалось проблема в конфликте кода метрики с кодом подключения карт.
                        Олег Захаров
                        25 сентября 2021, 00:24
                        0
                        Источник проблемы был — подгружаемый скрипт yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/2.1.79-26/build/debug/full-a37604fde567790c251386c8114a5a4c2048380e.js
                        В нем есть на строке 167285:
                        setTimeout(function () {
                                    document.head.insertBefore(tag, document.head.firstChild);
                                }, 0);
                        — через просмотр источника в вкладке Sources всплывает подсказка о ошибке на текст «insertBefore(tag, document.head.firstChild)» — текст сообщения об ошибке «Failed to load resource:the server responded with a status of 400 ()»
                        На него в консоли выходит ошибка:
                        full-a37604fde567790c251386c8114a5a4c2048380e.js:167286 GET https://api-maps.yandex.ru/services/search//v2/?callback=id_163251784219566603305&text=&format=json&rspn=0&lang=ru_RU&results=1&token=780a34112aa192be3eeaa652724b81e9&type=geo&properties=addressdetails&geocoder_sco=latlong&origin=jsapi2searchcontrol&apikey=туткодapikey net::ERR_ABORTED 400
                        Олег Захаров
                        05 октября 2023, 12:56
                        0
                        Перестал работать компонент — выходит ошибка
                        ?apikey=6ee930bf-c98….ready&ns=ymaps:152 Uncaught 
                        YMError {name: 'FeatureRemovedError', message: 'Suggest is not available. See https://yandex.com/dev/jsapi-v2-1/doc/en/v2-1/ref/reference/suggest', stack: 'FeatureRemovedError: Suggest is not available. See…ll&onload=mscDistance.Ymaps.ready&ns=ymaps:71:35)'}
                        message
                        : 
                        "Suggest is not available. See https://yandex.com/dev/jsapi-v2-1/doc/en/v2-1/ref/reference/suggest"
                        name
                        : 
                        "FeatureRemovedError"
                        stack
                        : 
                        "FeatureRemovedError: Suggest is not available. See https://yandex.com/dev/jsapi-v2-1/doc/en/v2-1/ref/reference/suggest\n    at Object.create (https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/2.1.79-12582779/build/debug/full-d51589ea85e8a3942e95b516910fa20e45c52c65.js:21744:24)\n    at Object.suggest (https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/2.1.79-12582779/build/debug/full-d51589ea85e8a3942e95b516910fa20e45c52c65.js:173957:45)\n    at https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/2.1.79-12582779/build/debug/full-d51589ea85e8a3942e95b516910fa20e45c52c65.js:134590:37\n    at Array.<anonymous> (https://api-maps.yandex.ru/2.1/?apikey=6ee930bf-c98d-4e9f-9e3c-a1c854a3744b&lang=ru_RU&mode=debug&load=package.full&onload=mscDistance.Ymaps.ready&ns=ymaps:760:56)\n    at MutationObserver.callFns (https://api-maps.yandex.ru/2.1/?apikey=6ee930bf-c98d-4e9f-9e3c-a1c854a3744b&lang=ru_RU&mode=debug&load=package.full&onload=mscDistance.Ymaps.ready&ns=ymaps:71:35)"
                        [[Prototype]]
                        : 
                        YMError
                        Подскажите что сделать чтобы исправить ошибку?
                        Олег Захаров
                        05 октября 2023, 13:19
                        0
                        Еще просьба сделать описание или указать как Api-ключ добавлять — нигде не могу найти инструкции.
                        Пытаюсь обновить апи ключ в кабинете разработчика developer.tech.yandex.ru/services, выдает что ключ неправильный. Какой АПИ должен использоваться? JavaScript API и HTTP Геокодер или Static API Яндекс.Карт?
                        Еще при регистрации как указыватья от частного лица или юр.лица? Там на юриков тарифы появлятся? драконовские. Или ограничения срабатывают.
                        Вообще компонент бы надо обновить!
                          Олег Захаров
                          18 октября 2023, 22:43
                          0
                          Автор компонента ни в личку не отвечает, ни тут. Печаль…
                            Олег Захаров
                            26 октября 2023, 17:43
                            0
                            Разобрался в чем была проблема. Автору дополнения надо учесть это.
                            Яндекс API изменилось.
                            Теперь помимо основного ключа Api в случае если на сайте используется поисковые подсказки (что в дополнении реализовано при вводе адреса доставки строка поиска suggestview и выводит всплывающими подсказками варианты адресов) — то надо подключить API Геосаджеста.
                            Ответ от Разработчиков (повторю здесь есть на просторах тырнета):
                            Теперь все обращения к Геосаджесту требуют ключа от этого сервиса, включая все подсказки в JavaScript API (SuggestView, поисковая строка, панель маршрутов). Подробней это описано на страницах используемых методов.

                            Чтобы использовать саджест в JS API:

                            Получите ключ для саджеста через личный кабинет.
                            Укажите его при подключении JS API в формате
                            https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=<ваш ключ для JS API>&suggest_apikey=<ваш ключ для Suggest API>
                            .
                            Угловые скобки вокруг полученного в кабинете разработчика ключа оставлять не надо.
                            Я добавил в кабинете разработчика ключ API Геосаджеста, добавил его в у себя на сайте.
                            А именно:
                            1. У меня подключение к API-карт продублировано в head перед подключением метрики, т.к. были проблемы с кодом метрики, конфликтовал. Не ставить код яндекс.карт рядом с кодом Яндекс.Метрики — замечена ошибка работы карт если код карт ставить рядом с кодом метрики. Также код ниже указан с apikey т.к. замечено что иногда код не подхватывается на мобильных устройствах — судя по справкам и анализу ошибок это связано с тем что в некоторых случаях браузер из-за низкой скорости интернета в основном на мобильных устройствах блокирует работу скриптов для ускорения.
                            <script src="https://api-maps.yandex.ru/2.1/?apikey=ваш_ключ_для_JS_API&suggest_apikey=ваш_ключ_для_Suggest_API&lang=ru_RU&mode=debug&load=package.full&onload=mscDistance.Ymaps.ready&ns=ymaps" type="text/javascript">
                                </script>
                            2. apikey должны быть также указаны в assets/components/mscdistance/js/web/default.js:
                            if (!window.ymaps) {
                            	document.writeln('<script src="' +
                            		'https://api-maps.yandex.ru/2.1/?' +
                            		'lang=ru_RU' +
                            		'&mode=debug' +
                            		'&load=package.full' +
                            		'&onload=mscDistance.Ymaps.ready' +
                            		'&ns=ymaps' +
                            		'&apikey=ваш_ключ_для_JS_API' +
                            		'&suggest_apikey=ваш_ключ_для_Suggest_API' +
                            		'"><\/script>');
                            }
                              Олег Захаров
                              26 октября 2023, 17:47
                              0
                              Да и код заработал не сразу, а через 15 минут как указано в https://yandex.ru/dev/geosuggest/doc/ru/quickstart.
                              В первые моменты выводило ошибку доступа на
                              Access to XMLHttpRequest at 'https://suggest-maps.yandex.ru/v1/suggest?... from origin ... has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on
                                Амир
                                25 января 2024, 20:47
                                0
                                Спасибо за Ваши ответы)
                              Смайл
                              04 марта 2024, 19:50
                              0
                              Добрый день! не работает дополнение не считает не работает платёжные ситсемы из за этого не работуют кто знает автор живой?
                                Володя
                                04 марта 2024, 19:58
                                0
                                Я знаю. Автор жив. Пишите в ТП дополнения — вам ответят.
                                  Смайл
                                  04 марта 2024, 20:04
                                  0
                                  дополнение давно куплено, 05 февраля 2021, 17:54
                                    Смайл
                                    04 марта 2024, 20:04
                                    0
                                    тикит не открыть.
                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                  34