Розробка модулів доставки 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 не працює – все робив у точності.

в адмінці пише «помилка парсера»

Підкажіть, будь ласка, як додати % від вартості товару в кошику?

Запитання, уточнення. У вартість доставки потрібно додати % від вартості товару в кошику (тобто дані з іншого модуля). Як додати цей % вартості товару у кошику?

Підкажіть як організували таке - + відсоток вартості товару.