Под плагином доставки будем понимать, плагин который интегрирует в Moguta.CMS какой либо сервис службы доставки, такие как СДЕК, Деловые линии, PicKPoint и другие аналогичные. Такие сервисы позволяют расчитать стоимость доставки товаров клеинту еще на этапе оформления заказа.
Каждый плагин для добавления нового способа доставки, должен уметь следующее:
Далее рассмотрим алгоритм разработки.
В первую очередь, необходимо изучить документацию по разработке более простых плагинов, чтобы понять как все устроено.
Также вы должны понимать как хранятся записи заказов и доставок в таблицах базы данных Moguta.CMS. Для этого откройте базу данных и изучите структуру таблиц заказов и доставок.
Первое, что должен делать плагин при активации - это добавить метод доставки в таблицу mg_delivery. Значение заданное в столбце "plugin" будет являться шорткодом для вывода формы плагина на странице оформления заказа должно совпадать с названием папки с плагином. Так же можно задать и остальные настройки для добавляемого способа доставки, если есть необходимость (например: описание, активность и т.д.)
Шорткод для вывода виджета плагина будет выводиться автоматически под необходимой доставкой в списке. Плагин должен вместо шорткода подставить форму виджета для расчёта стоймости по вводимым пользователем данным (город, тариф и т.д.).
Для расчёта стоимости доставки используйте AJAX-запросы к файлу Pactioner.php плагина (см. пример в заготовке плагина). Во время расчётов сохраняйте результат в $_SESSION, чтобы применить его при сохранении заказа. На случай, когда расчёт стоимости зависит от веса или габаритов товара, важно пересчитать стоимость доставки при изменении состава заказа. Используйте для этого в JS следующую конструкцию:
$(document).ajaxComplete(function (event, jqXHR, ajaxOptions) {
if (ajaxOptions.url == mgBaseDir + '/cart') {
//Место для кода пересчёта
}
});
Данный код будет срабатывать каждый раз, когда пользователь будет менять что-нибудь в корзине. Само содержимое оформляемого заказа на PHP будет хранится в $_SESSION['cart'], используйте его при расчёте доставки в Pactioner.php.
После клика по кнопке "Оформить заказ" сначала срабатывает хук Models_Order_isValiddata, в этот момент идёт проверка заполненных данных пользователем в форме заказа. На данном этапе можно вывести ошибку, если в форме вашего плагина будет чего-то не хватать. Если же всё в порядке, то запускается хук Models_Order_addOrder после создания заказа. В этот момент необходимо найти заказ и добавить полученную стоимость доставки. Если есть определенные опции, которые хотелось бы сохранить вместе с данными заказа, запишите значения в поле "delivery_options".
Так как в Moguta.CMS работа с заказами может не только осуществляется со стороны публичной части, но и в панели администратора, на этот случай предусмотрены инструменты для вывода формы расчёта доставки в окне редактирования заказа. При выборе вашей доставки в окне администратора будет происходить вызов метода getAdminDeliveryForm() для запроса верстки формы доставки и метода getPriceForParams() для получения цены доставки, если уже все необходимые данные для расчёта имеются.
При расчёте доставки корзина будет отсутствовать, так как администратор работает непосредственно с заказом, поэтому в JS-скрипте плагина, чтобы получить список товаров, можно обратится к переменной orderItems объекта order и передать его AJAX-запросом в плагин.
Помимо обработки создания заказа хуками Models_Order_isValiddata и Models_Order_addOrder как в публичной части интернет-магазина, так же можно предусмотреть пересчёт редактируемого заказа хуком Models_Order_updateOrder. Обратите внимание, что полученные аргументы функции, пойманной хуком, могут отличаться от тех, что были получены в публичной части сайта.
Для примера вы можете установить наши бесплатные плагины доставок в маркетплейсе:
Они помогут получить представление о том, как в Moguta.CMS работает интеграция стороннего расчёта стоимости доставки заказа клиента.