Инструкция по разработке плагина доставки

Под плагином доставки будем понимать, плагин который интегрирует в Moguta.CMS какой либо сервис службы доставки, такие как СДЕК, Деловые линии, PicKPoint и другие аналогичные. Такие сервисы позволяют расчитать стоимость доставки товаров клеинту еще на этапе оформления заказа.

Обязательные возможности плагина

Каждый плагин для добавления нового способа доставки, должен уметь следующее: 

  • Вывод виджета калькулятора стоимости доставки на странице оформления заказа;
  • Расчёт стоимости доставки на основе содержимого корзины и введенных пользователем данных в виджет плагина;
  • Валидация введенных пользователем данных при нажатие кнопки "Оформить заказ";
  • Сохранения стоимости доставки в заказе после его оформления.

Далее рассмотрим алгоритм разработки.

Необходимые знания для разработки плагина доставки

В первую очередь, необходимо изучить документацию по разработке более простых плагинов, чтобы понять как все устроено.

Также вы должны понимать как хранятся записи заказов и доставок в таблицах базы данных Moguta.CMS. Для этого откройте базу данных и изучите структуру таблиц заказов и доставок.

(1 шаг) Создание нового способа доставки

Первое, что должен делать плагин при активации - это добавить метод доставки в таблицу mg_delivery. Значение заданное в столбце "plugin" будет являться шорткодом для вывода формы плагина на странице оформления заказа должно совпадать с названием папки с плагином. Так же можно задать и остальные настройки для добавляемого способа доставки, если есть необходимость (например: описание, активность и т.д.)


phpmyadmin


Шорткод для вывода виджета плагина будет выводиться автоматически под необходимой доставкой в списке. Плагин должен вместо шорткода подставить форму виджета для расчёта стоймости по вводимым пользователем данным (город, тариф и т.д.).


страница заказа

(2 шаг) Пересчет стоимости доставки при изменении состава корзины

Для расчёта стоимости доставки используйте AJAX-запросы к файлу Pactioner.php плагина (см. пример в заготовке плагина). Во время расчётов сохраняйте результат в $_SESSION, чтобы применить его при сохранении заказа. На случай, когда расчёт стоимости зависит от веса или габаритов товара, важно пересчитать стоимость доставки при изменении состава заказа. Используйте для этого в JS следующую конструкцию:

 
    
    $(document).ajaxComplete(function (event, jqXHR, ajaxOptions) {
        if (ajaxOptions.url == mgBaseDir + '/cart') {
            //Место для кода пересчёта
        }
    }); 
    

Данный код будет срабатывать каждый раз, когда пользователь будет менять что-нибудь в корзине. Само содержимое оформляемого заказа на PHP будет хранится в $_SESSION['cart'], используйте его при расчёте доставки в Pactioner.php.

Пример содержимого $_SESSION['cart']
 

(3 шаг) Валидация введенных данных

После клика по кнопке "Оформить заказ" сначала срабатывает хук Models_Order_isValiddata, в этот момент идёт проверка заполненных данных пользователем в форме заказа. На данном этапе можно вывести ошибку, если в форме вашего плагина будет чего-то не хватать. Если же всё в порядке, то запускается хук Models_Order_addOrder после создания заказа. В этот момент необходимо найти заказ и добавить полученную стоимость доставки. Если есть определенные опции, которые хотелось бы сохранить вместе с данными заказа, запишите значения в поле "delivery_options".

Оформление заказов через панель администратора

Так как в Moguta.CMS работа с заказами может не только осуществляется со стороны публичной части, но и в панели администратора, на этот случай предусмотрены инструменты для вывода формы расчёта доставки в окне редактирования заказа. При выборе вашей доставки в окне администратора будет происходить вызов метода getAdminDeliveryForm() для запроса верстки формы доставки и метода getPriceForParams() для получения цены доставки, если уже все необходимые данные для расчёта имеются.

Окно редактирования заказа в панели администратора


При расчёте доставки корзина будет отсутствовать, так как администратор работает непосредственно с заказом, поэтому в JS-скрипте плагина, чтобы получить список товаров, можно обратится к переменной orderItems объекта order и передать его AJAX-запросом в плагин.

Пример содержимого order.orderItems
 

Помимо обработки создания заказа хуками Models_Order_isValiddata и Models_Order_addOrder как в публичной части интернет-магазина, так же можно предусмотреть пересчёт редактируемого заказа хуком Models_Order_updateOrder. Обратите внимание, что полученные аргументы функции, пойманной хуком, могут отличаться от тех, что были получены в публичной части сайта.

Примеры плагинов

Для примера вы можете установить наши бесплатные плагины доставок в маркетплейсе:

  1. PickPoint
  2. DDelivery
  3. «Деловые линии»
  4. Marschroute.ru
  5. Почта России (Postcalc)

Они помогут получить представление о том, как в Moguta.CMS работает интеграция стороннего расчёта стоимости доставки заказа клиента.