[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
1
1 188
+5

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

Pavel Zarubin
29 марта 2018, 04:19
+1
Сразу напишу для всех параноиков, запрос на пункты выдачи не кэшируется, в чанк прилетает почти не обработанный ответ прямо от сдэка при любом запросе карты. У сдэка нет лимитов на запрос пунктов выдачи, и обрабатывает сдэк эти запросы молниеносно, тестировал под нагрузкой в 100 одновременных запросов, просадка скорости почти отсутствовала
Igor Ivanov
29 марта 2018, 06:06
+1
Менеджер сможет в админке поменять пункт самовывоза?
    Pavel Zarubin
    29 марта 2018, 12:15
    +1
    Да, поле пункта самовывоза является обычным текстовым полем
Паша
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
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. корзина капитально блокируется… при попытке расчитать сдек с несуществующим индексом

          … И по ПикПоинт помощь нужна…