[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
923
+5

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

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
Вот это реально круто