Пример создания нового способа доставки

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 20

Задача

Создать новый тип доставки который расчитывает стоимость доставки с учетом цены заказа.

Решение

Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:
1. Открыть модуль Шаблоны данных и найти там тип данных "Способ доставки". Добавить в него дочерний шаблон, назвав его например, так "Доставка стоимость + процент от заказа".

Russian01.png

2. В созданном шаблоне добавим новую группу полей Свойства доставки [delivery_props] и добавим в нее два поля:

Процент [procent] - тип число с точкой, видимое.

Стоимость заказа, после которой доставка бесплатна [order_min_price] - тип число с точкой, видимое.

Russian02.png

Запоминаем id шаблона из адресной строки браузера:

/admin/data/type_edit/659/ - то есть у меня id=659

Russian03.png

3. В этом же модуле, на вкладке Справочники, находим справочник "Типы доставки" и нажимаем кнопку Посмотреть, чтобы открыть содержимое справочника.

Добавляем новое наименование.

В поле "Название" напишем тоже самое "Доставка стоимость + процент от заказа", в поле "Тип данных (id)" наш запомненный ранее id "135", в поле "Идентификатор типа доставки" напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется exampledelivery.

Russian04.png

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. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ доставки "Доставка стоимость + процент от заказа", заполните поля Стоимость доставки, Процент и Стоимость заказа, после которой доставка бесплатна:

Russian05.png

7. Проверим работу нового способа доставки.

Наш заказ:

Russian06.png

Russian07.png

Так как общая сумма заказа больше 500 рублей то стоимость доставки включает только процент от стоимости заказа.

Итого: 0 + (32893 * 1%) = 328.93 руб.