Создание модуля доставки

Опубликовано Опубликовано в рубрике prestashop, Руководство разработчика PrestaShop, Русская документация PrestaShop 1.6, Создание модулей PrestaShop

Создание модуля доставки

Принципы

Модуль доставки является обычным модулем PrestaShop, за исключением того, что он расширяет CarrierModule класс вместо классаModule :

class MyOwnCarrier extends CarrierModule

Он может быть прикреплен к следующим хукам:

  • extraCarrier: для отображения цены доставки в зависимости от диапазонов, установленных в бэк-офисе.

Модуль доставки должен использовать следующие методы:

  • getOrderShippingCost(): для расчета цены доставки в зависимости от диапазонов, установленных в бэк-офисе.
  • getOrderShippingCostExternal(): рассчитать стоимость доставки без использования диапазонов.

getOrderShippingCost() метод также может использоваться для вычисления цены доставки в зависимости от продуктов:

$shipping_cost = $module->getPackageShippingCost($cart, $shipping_cost, $products);

Один модуль может использоваться для создания нескольких доставок.

Установка и удаление модуля

Модуль должен обрабатывать:

  • Его собственная установка и установка одного или нескольких служб доставки.
  • Его собственная деинсталляция и «удаление» одного или нескольких своих служб доставки.

Примечание об удалении:

  • Удаление доставки просто означает ее деактивацию (deleted=true).
  • Модуль должен поддерживать связь между старым заказом и доставкой, которая больше не доступна.
  • Осторожно: доставка по умолчанию должна существовать и включаться.

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

Чтобы контролировать изменение идентификатора несущей (id_carrier), модуль должен использовать updateCarrier хук.

Например:

public function hookUpdateCarrier($params)
{
  $id_carrier_old = (int)($params['id_carrier']);
  $id_carrier_new = (int)($params['carrier']->id;
  if ($id_carrier_old == (int)(Configuration::get('MYCARRIER_CARRIER_ID')))
    Configuration::updateValue('MYCARRIER_CARRIER_ID', $id_carrier_new);
}

Вычисление цены доставки

Чтобы вычислить стоимость доставки, PrestaShop необходимо вызвать модуль getOrderShippingCost() или getOrderShippingCostExternal().

Возвращаемое значение должно иметь float тип.

Например:

public function getOrderShippingCost($params, $shipping_cost)
{
  if ($this->id_carrier == (int)(Configuration::get('MYCARRIER_CARRIER_ID'))
      && Configuration::get('MYCARRIER_OVERCOST') > 1)
    return (float)(Configuration::get('MYCARRIER1_OVERCOST'));
  return false// carrier is not known
}