[ms_cdek2] - Пункты самовывоза

За спонсирование обновления спасибо Алексею.

Всем привет! Вышло большое обновление компонента, которое многие ждали и просили, исправлено множество косяков, ну а главная тема — это конечно же пункты самовывоза.

Главные «фишки» обновления:
  • Стандартное оформление не зависит от бутстрапа
  • Самовывоз можно включить только для определенных методов доставки
  • Пункты самовывоза работают изолированно, т.е. если выбран метод не сдэк, или город не содержит информации о пунктах самовывоза — карта удаляется
  • Выбранный пункт самовывоза записывается в заказ
  • Поле самовывоза в админке динамическое и появляется только в случае если покупатель действительно выбрал пункт
  • Поле расширяет msOrderAdress, по этому доступно везде, где ведется работа с заказом, от писем пользователю/менеджеру, до msGetOrder
  • Переписана добрая часть фронтенда, доработан автокомплит
А теперь собственно то, для чего затевалась новость. Связи с ростом сложности компонента, выборами президента и инфляции как только обкатается обновление на рабочих проектах цена компонента повысится на 300р-500р, по этому если вы еще думаете приобретать компонент или нет, советую сделать это в ближайшем будущем :)

Приобрести компонент по цене 990р
Демо-сайт

Ну а теперь к инструкции по установке и скриншотам:

Настройка пунктов самовывоза:
За пункты самовывоза отвечает сниппет cdekDeliveryPoints
Он принимает несколько параметров:
  • cityid — id города по таблице сдэк (если вы хотите вывести пункты самовывоза только одного города)
  • citypostcode — почтовый индекс города (если вы хотите вывести пункты самовывоза только одного города)
  • tpl — чанк оформления вывода, по умолчанию используется стандартный cdek2.getpvz
  • deliveryids — id способов доставки для которых нужно выводить пункты самовывоза через запятую (по умолчанию выводится для всех)
Сниппет обязательно должен быть обернут в div с id cdek2_map_ajax
Пример вызова:
<div id="cdek2_map_ajax">
	{'!cdekDeliveryPoints' | snippet}
</div>
В чанк приходит множество переменных по умолчанию используется лишь малая часть, вы можете оформить вывод пунктов самовывоза как вам угодно, перед использованием настоятельно рекомендую посмотреть все переменные
{$pvz | print}

Если вы хотите, чтобы выбранный адрес самовывоза записывался в админку, то в форму заказа (id=«msOrder») добавьте input:
<input type="hidden" name="point">

Тогда после оформления заказа, если пользователь выбрал пункт самовывоза он будет записан в админку:

Вы также можете использовать его в письме пользователя.
Внимание! Поле динамическое и появляется только тогда, когда пользователь выбрал доставку, в противном случае вы его не увидите!
Pavel Zarubin
29 марта 2018, 00:51
modx.pro
1
5 134
+5
Поблагодарить автора Отправить деньги

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

Pavel Zarubin
29 марта 2018, 04:19
+1
Сразу напишу для всех параноиков, запрос на пункты выдачи не кэшируется, в чанк прилетает почти не обработанный ответ прямо от сдэка при любом запросе карты. У сдэка нет лимитов на запрос пунктов выдачи, и обрабатывает сдэк эти запросы молниеносно, тестировал под нагрузкой в 100 одновременных запросов, просадка скорости почти отсутствовала
    Igor Ivanov
    29 марта 2018, 06:06
    +1
    Менеджер сможет в админке поменять пункт самовывоза?
      Pavel Zarubin
      29 марта 2018, 12:15
      +1
      Да, поле пункта самовывоза является обычным текстовым полем
      Spirit_Ninja
      29 марта 2018, 10:42
      +2
      Круто!!! Я ждал этого)
        Максим
        31 марта 2018, 23:32
        +3
        Неплохо было бы, что бы пункт менялся и при клике на балун на карте. А то сейчас только в списке искать.
          Pavel Zarubin
          01 апреля 2018, 02:10
          +1
          Это уже есть в To-do на следующее обновление
            Илья
            05 апреля 2018, 10:37
            0
            Здравствуйте, в новом обновлении не добавлено или на демо версии пока обновление не обновлено?
              Pavel Zarubin
              05 апреля 2018, 16:55
              0
              Добрый, нет, новое обновление не добавляло новые возможности, только фикс существующих багов. Обновление по карте планируется на понедельник
                Pavel Zarubin
                05 апреля 2018, 16:55
                0
                На демо — сайте всегда актуальная версия стоит
                  Pavel Zarubin
                  08 апреля 2018, 18:55
                  0
                  В обновлении 1.2.2 добавлена такая возможность
                Pavel Zarubin
                08 апреля 2018, 18:55
                0
                Сегодня выпущено обновление 1.2.2, где добавлена такая возможность
                Илья
                03 апреля 2018, 13:03
                0
                Здравствуйте. А прямая доставка до двери то есть или только из пункта самовывоза можно забрать?
                  Pavel Zarubin
                  03 апреля 2018, 13:14
                  0
                  Если вы вообще про сдэк, то есть как прямая доставка до двери, так и доставка до склада
                  Владимир
                  09 апреля 2018, 13:48
                  0
                  Здравствуйте, Павел! При использовании компонента происходит ли создание нового заказа внутри личного кабинета на lknew.cdek.ru/user/login?
                    Pavel Zarubin
                    09 апреля 2018, 14:04
                    0
                    Здравствуйте, нет, компонент не взаимодействует с заказами СДЭК
                      Владимир
                      10 апреля 2018, 11:07
                      0
                      Возможно ли заказать настройку такой опции?
                  Илья
                  12 апреля 2018, 14:37
                  0
                  Здравствуйте, 3 вопроса — есть ли возможность настроить оплату наложенным платежом и если есть договор со СДЭК есть ли возможность настроить свои цены? Учитывается ли как то вес заказа при расчёте?
                    Pavel Zarubin
                    12 апреля 2018, 14:47
                    0
                    Здравствуйте,
                    1) Создавайте способ оплаты «Наложный платеж» и все :) Компонент не отправляет данные в сам сдэк, все отправления нужно делать вручную
                    2) Я не много работал с api сдэка касаемо api личного кабинета, да и желающих предоставить доступы для отладки работы с api нет, по этому не совсем знаю механизм на счет которого вы спрашиваете. В случае договора со сдэком цены на тарифы которые добавляются с компонентом (они все есть на демо-сайте) будут такие же, как в личном кабинете
                    3) Что вы подразумеваете под своими ценами? Если дополнительную цену к расчету — да, поле «дополнительная цена» полностью работает как в % так и в цифрах, если же это связано с ценами на тарифы то ответ в пункте 2
                    Pavel Zarubin
                    22 апреля 2018, 18:14
                    0
                    Дополнение от 22.04.2018
                    Если вдруг список методов доставки который идет в комплекте вас не устраивает — вы можете добавить свои методы доставки. Заходим в дополнение console и вставляем вот такой код
                    $tarifs = array(
                        '139' => 'Посылка дверь-дверь',
                        '138' => 'Посылка дверь-склад',
                        '137' => 'Посылка склад-дверь',
                        '136' => 'Посылка склад-склад'
                    );
                    
                    foreach ($tarifs as $key => $value) {
                        $newDeliv = $modx->newObject('msDelivery', array(
                            'name' => $value,
                            //'description' => '',
                            'price' => 0,
                            'weight_price' => 0,
                            'distance_price' => 0,
                            'active' => 0,
                            'logo' => MODX_ASSETS_URL.'components/ms_cdek2/cdek.png',
                            'class' => 'msCDEK_handler',
                            'requires' => 'email,receiver,index'
                        ));
                        $newDeliv->save();
                        $modx->log(3, 'Добавлен метод доставки <b>'.$value.'</b>, с ID '.$key);
                    
                        $id = $newDeliv->get('id');
                        $cdek = $modx->newObject('MsCdek', array(
                            'id_delivery' => $id,
                            'id_tarif' => $key
                        ));
                        $cdek->save();
                    }
                    смотрим массив «tarifs», ключ массива — это id метода доставки (его смотрим тут документация по api калькулятора), значение — название метода
                      Максим
                      04 мая 2018, 22:57
                      0
                      Как-то странно все-таки работает.

                      Можно сделать так, чтобы город нормально отрабатывал, если его ввести самому, а не выбирать в выпадающем списке?
                      А то если поменять город не выбирая из списка. Карта обновляется, но не меняется, цена остается прежней.
                      Модуль не понимает, что я изменил город и показывает мне данные предыдущего.
                      ===
                      К тому же обновляет данные с задержкой.
                      Если быстро переключать виды доставок, то итоговая цена «запутается»
                      К примеру быстро пощелкал и доставка за 590 рублей превратилась в доставку за 840.
                      joxi.ru/L21WDQ3t88kJNr
                      joxi.ru/brRe0JdtJJq1WA
                      Не знаю как она записывается, но там можно наколдовать всякого…
                      Если будет только один тариф от сдек думаю будет норм, но на демо-сайте все очень легко ломается.
                        Pavel Zarubin
                        05 мая 2018, 03:47
                        0
                        1) Избавится от выбора города никак нельзя, по той простой причине, что сдэк смотрит не на название города а на его ID. Как «костыль» была переделана стандартная библиотека которая научилась работать с индексом, там нет автокомплита и выбирать ничего не надо, а учет города можно отключить в настройках
                        2) У меня не получилось поломать, представляете?) Вот сколько бы не тыкал, не ломается) И да, за переключение способов доставки отвечает не мой модуль, а minishop2
                          Максим
                          06 мая 2018, 02:38
                          0
                          1) Плохо. А, в теории, нельзя будет сделать поле вроде select2? Типа, если введенный город не совпадает со списком, то поле введенным не считается. Или типа того.

                          2) А вот у меня с ума сходит очень легко) К тому же если тыкать быстро между доставками, они входят в какой-то цикл и бесконечно вылезают сообщения) joxi.ru/DmBJ3y7Uwwnpbm
                          Ну да ладно, хоть меня немного беспокоит этот баг с ценой, клиентам обычно не нужно столько видов доставки, они ограничиваются 1 или максимум парой тарифов.
                            Pavel Zarubin
                            06 мая 2018, 02:49
                            0
                            Вы у себя можете сделать что угодно :) Я не думаю что это многим надо, особенно учитывая то, что 90% магазинов перепроверяют заказы а города в который надо доставить товар возможно даже нет в базе сдэка.
                            Да, повторил я ваш баг, связан он с множественными ajax запросами, в следующем обновлении добавлю прелоадер при смене метода доставки, тогда система просто не даст пользователю сменить метод пока не был рассчитан предыдущий
                        Vlad Brise
                        06 декабря 2018, 22:08
                        +3
                        Вот это реально круто
                          Артем
                          11 февраля 2019, 13:55
                          0
                          Здравствуйте.
                          При заказе не одного товара, а нескольких единиц товара, каким образом идет перерасчет цены за доставку? Надо вводить какие-то параметры (ш*в*д) или просто идет привязка к единице, т.е. мы не можем задавать разному товару, разные параметры.?
                            Pavel Zarubin
                            11 февраля 2019, 16:10
                            0
                            Добрый день, в компоненте есть учет размеров, для этого должно быть заполнено поле size. По умолчанию учитывается только вес. Учет размеров включается в настройках компонента
                              Артем
                              11 февраля 2019, 16:32
                              0
                              А есть учет кол-ва?
                              Например мы продаем товар коробками. Для каждого товара мы задаем параметры веса, размеров.
                              Если кто то покупает две единицы товара (то есть две коробки) стоимость доставки будет пересчитана?
                                Pavel Zarubin
                                11 февраля 2019, 17:52
                                0
                                Естественно, при том пересчитывается из расчета
                                объем * кол-во (если включена опция расчета габаритов)
                                Вес * кол-во
                                  АндрейЧ
                                  18 февраля 2019, 16:02
                                  0
                                  Павел сорри за беспокойство.
                                  Это я в вам в телеграм пишу, жду когда время найдете и денег сколько скажете…

                                  1. Вызов и скрытие карты выбора ПВ СДЕК
                                  3. Объем корзины новая формула
                                  4. корзина капитально блокируется… при попытке расчитать сдек с несуществующим индексом

                                  … И по ПикПоинт помощь нужна…
                            Вячеслав
                            24 апреля 2019, 11:55
                            0
                            Павел, купили ваш модуль по CDEK, возник глупый вопрос- есть ли возможность скрыть пункты самовывоза при выборе курьерской доставки? Не вижу в этом практического смысла, как это поправить, можете дать решение?
                              Pavel Zarubin
                              24 апреля 2019, 12:29
                              0
                              Добрый день, в документации это описано, цитирую
                              За пункты самовывоза отвечает сниппет cdekDeliveryPoints
                              deliveryids — id способов доставки для которых нужно выводить пункты самовывоза (по умолчанию выводится для всех)
                                АндрейЧ
                                24 апреля 2019, 15:59
                                0
                                Павел приветствую. Я вам пишу в телеграме. В воскресенье писал. Помогите пожалуйста, после моих доработок ошибки критические — корзина зависает…

                                когда время будет у вас уделите плз мне его. Пусть не срочно, просто сами ответьте плз когда будет время.
                                Сразу готов платить 5-ку, вам там осталось на пару часов. Месяц могу ждать, вобщем свяжитесь плз когда время будет
                              Алексей
                              05 мая 2019, 15:11
                              0
                              Добрый день, прописал

                              //Пункт само-вывоза
                              в форме id=«msOrder», но в админке так и не появляется поле пункта самовывоза,
                              в письме все отправляется, а в админке нету (

                                Алексей
                                05 мая 2019, 18:32
                                0
                                <input type="hidden" name="point">
                                  Pavel Zarubin
                                  06 мая 2019, 04:37
                                  +1
                                  Плагину необходимо назначить событие, согласно инструкции
                                  Александр
                                  14 октября 2019, 11:40
                                  0
                                  подскажите город при вводе постоянно сбрасывается с мобильного телефона. На пк все норм
                                  В чем может быть проблема?
                                    Bor
                                    Bor
                                    27 ноября 2019, 00:52
                                    0
                                    Всем привет. кто нибудь делал бесплатную доставку, при заказе от определенной суммы?
                                    как я понимаю, нужно объединить core/components/ms_cdek2/model/ms_cdek2/msCDEK_handler.class.php и это решение modx.pro/help/6159
                                    Андрей
                                    25 апреля 2020, 12:20
                                    0
                                    Добрый день.
                                    Возможно ли округление суммы итоговой, чтобы не получались копейки?
                                      eflit
                                      23 октября 2020, 05:06
                                      0
                                      Здравствуйте, подскажите как решить проблему когда ставишь в настройках Вес в граммах — Да перестает считать код ошибки 3
                                        mekirile
                                        12 августа 2021, 11:56
                                        0
                                        После обновления получаю ошибку:
                                        "PHP message: PHP Fatal error:  Cannot declare class msCDEKHandler, because the name is already in use in /home/s6103/www/core/components/ms_cdek2/model/ms2/mscdekhandler.class.php on line 7" while reading response header from upstream, client: 185.19.179.154, server: s6103.h5.modhost.pro, request: "GET /cart.html HTTP/2.0"
                                        Подскажите как исправить?
                                          charset
                                          29 сентября 2021, 23:37
                                          0
                                          Добрый день, могу ли я показать карту по своему событию (из js), т.к. поле город у меня скрыто, и заполняется скриптом? Искал в коде но так и не нашел к чему можно привязаться.
                                            Ильмир
                                            21 января 2023, 23:53
                                            0
                                            Возникла проблема при подключении модуля ms_cdek2. Установил данное дополнение.
                                            Подскажите, пожалуйста!
                                            Кроме подключения Jquery-библиотек, вставки на страницу заказа вызова сниппета [[!ms_CDEK2]] что ещё не необходимо в обязательном порядке сделать, чтобы карта выбора ПВЗ СДЭК отобразилась на странице? Всё проделал из этого перечня, но не отображается.
                                              Pavel Zarubin
                                              23 января 2023, 15:37
                                              0
                                              Добрый день, я уже больше двух лет не поддерживаю данное дополнение и не в курсе по поводу его текущей кодовой базы, все вопросы задавайте в поддержку modstore
                                              Максим
                                              23 января 2023, 15:32
                                              0
                                              Скажите, а можно в расчете доставки учитывать страховую сумму, которая зависит от стоимости товара?
                                                Pavel Zarubin
                                                23 января 2023, 15:37
                                                0
                                                Добрый день, я уже больше двух лет не поддерживаю данное дополнение и не в курсе по поводу его текущей кодовой базы, все вопросы задавайте в поддержку modstore
                                                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                47