[ms_CDEK2] - Все с нуля




Всем привет, ребята! В ноябре ко мне на курирование перешел компонент msCDEK т.к. в последней выпущенной версии поломалось абсолютно все, я повтыкал в исходники и было принято решение снять компонент с публикации а также переписать его полностью с нуля.

Представляю вам вторую версию компонента! Главные отличия от старой версии:

  • Была немного переписана стандартная библиотека сдэк'а, компонент научился работать с индексами покупатель может указать только индекс или только город или все вместе и компонент рассчитает стоимость
  • Поддержка дополнительной цены (наценки)
  • Не конфликтует с другими методами доставки т.е. выводит статус времени и цены доставки только когда выбран сдэк, убирает его если выбран метод доставки не сдэк
  • Устранены проблемы с записью города в заказ
  • Выводимая информация о удачном расчете/времени доставки/ошибки расчета теперь выводится через чанки используя феном и pdoTools, вы можете спокойно модифицировать его, добавлять условия и т.д.
  • Для автокомплита теперь не используется громоздкий jquery UI, теперь используется маленькая библиотека на ванильном JS от pixabay
  • Компонент не требует модификации полей оформления заказа все подгружается и подключается самостоятельно
  • Добавлена возможность отключить автокомплит вообще
  • Добавлено корректное удаление дополнения, он чистит за собой все методы, что добавил
  • Авторизация работает корректно
  • Для города — отправителя теперь не нужно искать ID города в каких — то списках, достаточно указать индекс отправителя в настройках
  • Главный JS скрипт можно переопределить опять же в настройках
  • Компонент больше не совместим с msRussianPost

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

Демо-сайт
Купить дополнение
Что может:
  • Расчет цены и времени доставки СДЭК
  • Вывод статуса на фронт сайта
  • Расчет по индексу и/или названию города
  • Автокомплит городов
  • После выбора города поле области автоматически заполняется
Установка компонента:

  1. Если у вас была установлена первая версия, то перед установкой выполните зачистку старых методов доставки СДЭК (приложения->minishop2->настройки (вкладка варианты доставки) выберите все методы доставки от msCDEK (поддерживается мультивыбор через shift) затем нажмите правой кнопкой мыши и выберите «Удалить выбранные»
  2. Установите компонент из modstore
  3. На странице корзины в любом месте вызовите сниппет msCDEK.init
    {'!msCDEK.init' | snippet}
    	
    или
    [[!msCDEK.init]]
    	
    он подключит нужные js файлы а также создаст несколько глобальных js переменных.
    Внимание, у вас должен быть также подключен Jquery, компонент самостоятельно его не подключает! Если вы противник jquery по религиозным соображениям, вы можете переопределить стандартный скрипт, он очень прост и jquery там используется по минимуму
  4. В любом месте на странице корзины добавьте блок
    <div id="ms_cdek2_status"></div>
    сюда будет записываться информация о времени и цене доставки, а также об ошибках, если таковые будут
  5. Перейдите в системные настройки->ms_cdek2 и укажите ваш логин и пароль от СДЭК (если имеется), а также Индекс города-отправителя
Опциональность:
  • В чанке cdek2.status.success можно задать свой шаблон вывода статуса удачного расчета, туда передается три переменных:
    • price — цена доставки
    • min — минимальное кол-во дней доставки с момента отправления
    • max — максимальное кол-во дней доставки с момента отправления
  • В чанке cdek2.status.error можно задать свой шаблон вывода статуса неудачного расчета, туда передается одна переменная:
    • code — код ошибки. Он нужен для того, чтобы покупатель мог сообщить менеджеру какая именно ошибка произошла, также во время ошибки в лог modx'a записывается код ошибки и его расшифровка, так что вам не обязательно помнить все коды наизусть
Расшифровка кодов ошибок:
0 - Внутренняя ошибка на сервере. Обратитесь к программистам компании СДЭК для исправления.
1 - Указанная вами версия API не поддерживается 
2 - Ошибка авторизации 
3 - Невозможно осуществить доставку по этому направлению при заданных условиях 
4 - Ошибка при указании параметров места 
5 - Не задано ни одного места для отправления 
6 - Не задан тариф или список тарифов 
7 - Не задан город-отправитель 
8 - Не задан город-получатель
9 - При авторизации не задана дата планируемой отправки
10 - Ошибка задания режима доставки
11 - Неправильно задан формат данных
12 - Ошибка декодирования данных. Ожидается <json или jsop>
13 - Почтовый индекс города-отправителя отсутствует в базе СДЭК
14 - Невозможно однозначно идентифицировать город-отправитель по почтовому индексу
15 - Почтовый индекс города-получателя отсутствует в базе СДЭК
16 - Невозможно однозначно идентифицировать город-получатель по почтовому индексу

На что стоит обратить внимание:
  • Выбор города приоритетней, чем индекс, т.е. если вдруг покупатель выбрал город, а потом решил поменять индекс, не изменив город, то доставка будет рассчитываться исходя из выбранного города
  • При изменении полей индекса или города метод доставки сбрасывается
  • Компонент не реализует функционал интеграции, только функционал калькулятора, если появится спонсор на интеграцию, тогда возможно это будет сделано
  • Только minishop2.4+
22 января 2018, 17:12    Pavel Zarubin   G+  
1    487 +5


Комментарии ()

  1. Pavel Zarubin 28 февраля 2018, 04:56 # 0
    Обновление до версии 1.1.0:
    Значительно изменен front-end код дополнения
    Больше не сбрасывает метод доставки при изменении полей
    Уведомляет пользователя при обновлении цены доставки
    Производит расчет даже если страница была обновлена
    Улучшена совместимость с другими методами доставки
    Компонент теперь даже не инициализируется если метод доставки выбран НЕ сдэк
    Расчет не запускается если не заполнено ни одно из полей (индекс или город)
    Подготовка к следующему глобальному обновлению

    На самом деле обновление очень глобальное, компонент научился быть очень универсальным по части Front-End. Я знаю что некоторые из купивших допиливали его под себя самостоятельно, но теперь могу гордо заявить что скорее всего вам этого делать не надо будет, ситуаций, при котором на фронте сайта расчет не был произведен скорее всего не возникнет (если не согласны, можете потыкать демо-сайт и отписаться в комментариях в какой ситуации возникла проблема).

    Всем, кто еще не обновился, крайне рекомендую это сделать

    А в следующем обновлении добавлю выбор нужных методов доставки при установке, чтобы вам не добавлялись десятки методов, которые вы не используете
    1. Дмитрий 27 марта 2018, 17:26 # 0
      Поменяйте, пожалуйста, нынешнее содержимое чанка cdek2.status.error в сборке
      Ошибка расчета СДЭК, вашу посылку посчитает менеджер отдельно! 
      Пожалуйста, сообщите менеджеру "код ошибки {$code}"
      

      на это:

      <p> Ошибка расчета стоимости доставки,
      {switch ($code)}
          {case 0} - Внутренняя ошибка на сервере. Обратитесь к программистам компании СДЭК для исправления.
          {case 1} - Указанная вами версия API не поддерживается 
          {case 2} - Ошибка авторизации 
          {case 3} - Невозможно осуществить доставку по этому направлению при заданных условиях 
          {case 4} - Ошибка при указании параметров места 
          {case 5} - Не задано ни одного места для отправления 
          {case 6} - Не задан тариф или список тарифов 
          {case 7} - Не задан город-отправитель 
          {case 8} - Не задан город-получатель
          {case 9} - При авторизации не задана дата планируемой отправки
          {case 10} - Ошибка задания режима доставки
          {case 11} - Неправильно задан формат данных
          {case 12} - Ошибка декодирования данных. Ожидается <json или jsop>
          {case 13} - Почтовый индекс города-отправителя отсутствует в базе СДЭК
          {case 14} - Невозможно однозначно идентифицировать город-отправитель по почтовому индексу
          {case 15} - Почтовый индекс города-получателя отсутствует в базе СДЭК
          {case 16} - Невозможно однозначно идентифицировать город-получатель по почтовому индексу
      {/switch}
      </p>
      
      — проверено, работает! Негоже напрягать покупателей расшифровкой ошибок :)

      А вообще, лучше это сделать по взрослому через lexicon, для поддержки многоязычности.
      1. Максим 01 мая 2018, 18:05 # 0
        А планируется ли доработка модуля в плане отправки заказа в лк СДЕК?
        А то без этого модуль не совсем полный получается: \
        1. Pavel Zarubin 01 мая 2018, 23:49 # +1
          Планируется и для одного покупателя прямо сейчас делается, как доделаю на этой неделе, выпущу мини-заметку о том как сделать то же самое самостоятельно, к сожалению для полной интеграции так, как я ее вижу (с табом в заказе и полным управлением сдэком через админку) требуется гораздо больше времени, чем просто реализовать отправку заказа в сдэк
        2. Максим 04 мая 2018, 23:12 # 0
          И еще вопрос.
          Зависит ли как-то цена от веса?
          А то калькулятор сдека дает разные цены по тарифу, в зависимости, от веса груза
          1. Максим 04 мая 2018, 23:24 # 0
            А нет, все вопрос снимается. Вроде считает…
            1. Pavel Zarubin 05 мая 2018, 03:41 # 0
              Если у товаров заполнено поле weight, то да, вес учитывается
            Вы должны авторизоваться, чтобы оставлять комментарии.