Пример создания нового способа доставки
Актуально для версии 20
Задача
Создать новый тип доставки который расчитывает стоимость доставки с учетом цены заказа.
Решение
Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:
1. Открыть модуль Шаблоны данных и найти там тип данных "Способ доставки". Добавить в него дочерний шаблон, назвав его например, так "Доставка стоимость + процент от заказа".
2. В созданном шаблоне добавим новую группу полей Свойства доставки [delivery_props] и добавим в нее два поля:
Процент [procent] - тип число с точкой, видимое.
Стоимость заказа, после которой доставка бесплатна [order_min_price] - тип число с точкой, видимое.
Запоминаем id шаблона из адресной строки браузера:
/admin/data/type_edit/659/ - то есть у меня id=659
3. В этом же модуле, на вкладке Справочники, находим справочник "Типы доставки" и нажимаем кнопку Посмотреть, чтобы открыть содержимое справочника.
Добавляем новое наименование.
В поле "Название" напишем тоже самое "Доставка стоимость + процент от заказа", в поле "Тип данных (id)" наш запомненный ранее id "135", в поле "Идентификатор типа доставки" напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется exampledelivery.
4. Заходим на сайт по FTP, открываем директорию:
/classes/components/emarket/classes/delivery/systems/
там копируем файл courier.php и переименовываем его в exampledelivery.php - у Вас может быть другое название, которое Вы указали в 3 шаге.
5. Открываем файл на редактирование и изменяем:
название класса courierDelivery на exampledeliveryDelivery (у вас может быть другое название, указанное на 3 шаге).
Файл должен получиться примерно такой:
<?php
/**
* Способ доставки типа "Доставка стоимость + процент от заказа".
* Подходит ко всем заказам.
* Стоимость доставки берет из объекта-источника + процент от стоимости заказа.
* Доставка может быть бесплатной, если стоимость заказа превысила значение соответствующей настройки объекта-источника.
*/
class exampledeliveryDelivery extends delivery {
/** @inheritdoc */
public function validate(order $order) {
return true;
}
/** @inheritdoc */
public function getDeliveryPrice(order $order) {
$deliveryPrice = $this->getValue('price');
$deliveryProcent = $this->getValue('procent');
$minOrderPrice = $this->getValue('order_min_price');
$orderPrice = $order->getActualPrice() - $order->getDeliveryPrice();
if ($minOrderPrice === null) {
return $deliveryPrice + ($orderPrice / 100) * $deliveryProcent;
}
$returnPrice = $orderPrice < $minOrderPrice ? $deliveryPrice : 0;
return $returnPrice + ($orderPrice / 100) * $deliveryProcent;
}
}
Проверьте, что файл в кодировке utf-8 (без BOM).
6. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ доставки "Доставка стоимость + процент от заказа", заполните поля Стоимость доставки, Процент и Стоимость заказа, после которой доставка бесплатна:
7. Проверим работу нового способа доставки.
Наш заказ:
Так как общая сумма заказа больше 500 рублей то стоимость доставки включает только процент от стоимости заказа.
Итого: 0 + (32893 * 1%) = 328.93 руб.