Розробка модулів доставки PrestaShop PrestaShop Wiki
Базовий функціонал Prestashop дозволяє створювати способи доставки з розрахунком вартості в залежності від ваги замовлення та зони, в якій розташований одержувач. Все це можна задати у вигляді таблиці у бек офісі. Однак іноді виникає необхідність розрахунку вартості доставки через зовнішні сервіси (EMS, UPS, …), або виходячи з будь-яких власних умов (кількість товару в замовленні, обсяг товару). В цьому випадку потрібна розробка спеціального модуля доставки.
Модулі доставки з'явилися у версії 1.4 і раніше не працюватимуть. Розробка цих модулів потребує знання структури модулів, механізму хуків та основних принципів роботи з об'єктною моделлю PrestaShop.
Базовий каркас модуля доставки
Каркас модуля доставки практично ідентичний звичайному модулю. Основна відмінність полягає в тому, що він є нащадком класу CarrierModule.
Встановлення та видалення
Функції установки та видалення аналогічні функціям у стандартних модулях: встановлюємо, що потрібно і видаляємо весь мотлох за собою.
Установка модуля полягає у створенні способу доставки, прив'язаного до модуля та додавання хука updateCarrier.
Програмне створення способу доставки
Додавання способу доставки не становить складності, для того хто знайомий з об'єктною моделлю прести.
Видаляємо спосіб доставки, і якщо він за умовчанням, то ставимо щось інше.
Оновлення способу доставки
Такий незрозумілий хук зроблений через те, що при ручній зміні інформації про доставку відбувається видалення способу доставки, що редагується, і створення нового з вже відредагованими параметрами. Це потрібно для того, щоб зміни в способі доставки не торкнулися вже зроблених замовлень.
Тут просто зберігаємо новий ідентифікатор конфіг.
Розрахунок вартості доставки
У модулі може бути два способи розрахунку вартості доставки. Перший getOrderShippingCost викликається якщо конфігу параметр need_range поставлений як true. В інших випадках використовується getOrderShippingCostExternal.
Параметр $params містить у вигляді масиву cart, customer та address. $shipping_cost - вартість доставки розрахована стандартним методом (через таблиці залежно від регіону та діапазонів)
Обговорення
Скажіть, будь ласка,а для версії 1.3 це не працює?
Чи є інший варіант написання модуля доставки?
у версії 1.4 не працює – все робив у точності.
в адмінці пише «помилка парсера»
Підкажіть, будь ласка, як додати % від вартості товару в кошику?
Запитання, уточнення. У вартість доставки потрібно додати % від вартості товару в кошику (тобто дані з іншого модуля). Як додати цей % вартості товару у кошику?
Підкажіть як організували таке - + відсоток вартості товару.