Пример создания нового способа доставки — различия между версиями
Aposio (обсуждение | вклад) |
Vitaliks (обсуждение | вклад) (Отмена правки 9180, сделанной Aposio (обсуждение)) (Метка: отмена) |
||
Строка 1: | Строка 1: | ||
− | '''Актуально для версии | + | '''Актуально для версии 20''' |
− | |||
− | + | == Задача == | |
− | + | ||
+ | Создать новый тип доставки который расчитывает стоимость доставки с учетом цены заказа. | ||
+ | |||
+ | == Решение == | ||
Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:<br/> | Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:<br/> | ||
− | 1. Открыть модуль '''Шаблоны данных''' и найти там "''' | + | 1. Открыть модуль '''Шаблоны данных''' и найти там тип данных "'''Способ доставки'''". Добавить в него дочерний шаблон, назвав его например, так "''Доставка стоимость + процент от заказа''". |
− | [[Файл:Russian01.png]] | + | |
− | 2. В созданном шаблоне | + | [[Файл:Russian01.png]] |
− | ''' | + | |
− | ''' | + | 2. В созданном шаблоне добавим новую группу полей Свойства доставки [delivery_props] и добавим в нее два поля: |
− | [[Файл:Russian02.png]] | + | |
− | Запоминаем id шаблона из адресной строки браузера: | + | '''Процент [procent]''' - тип число с точкой, видимое. |
− | '''/admin/data/type_edit/659/''' - то есть у меня id=659 | + | |
− | [[Файл:Russian03.png]] | + | '''Стоимость заказа, после которой доставка бесплатна [order_min_price]''' - тип число с точкой, видимое. |
− | 3. В этом же модуле, на вкладке Справочники, находим справочник "'''Типы доставки'''" и нажимаем | + | |
− | Добавляем новое наименование. | + | [[Файл:Russian02.png]] |
− | В поле "'''Название'''" напишем тоже самое "'' | + | |
− | [[Файл:Russian04.png]] | + | Запоминаем id шаблона из адресной строки браузера: |
− | 4 | + | |
− | + | '''/admin/data/type_edit/659/''' - то есть у меня id=659 | |
− | + | ||
− | + | [[Файл:Russian03.png]] | |
− | + | ||
− | + | 3. В этом же модуле, на вкладке Справочники, находим справочник "'''Типы доставки'''" и нажимаем кнопку '''Посмотреть''', чтобы открыть содержимое справочника. | |
− | + | ||
− | + | Добавляем новое наименование. | |
− | + | ||
− | ''' | + | В поле "'''Название'''" напишем тоже самое "''Доставка стоимость + процент от заказа''", в поле "'''Тип данных (id)'''" наш запомненный ранее id "''135''", в поле "'''Идентификатор типа доставки'''" напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется ''exampledelivery''. |
− | + | ||
− | + | [[Файл:Russian04.png]] | |
− | название класса courierDelivery на ''' | + | |
− | + | 4. Заходим на сайт по FTP, открываем директорию: | |
+ | |||
+ | '''/classes/components/emarket/classes/delivery/systems/''' | ||
+ | |||
+ | там копируем файл courier.php и переименовываем его в ''exampledelivery.php'' - у Вас может быть другое название, которое Вы указали в 3 шаге. | ||
+ | |||
+ | 5. Открываем файл на редактирование и изменяем: | ||
+ | |||
+ | название класса courierDelivery на '''exampledeliveryDelivery''' (у вас может быть другое название, указанное на 3 шаге). | ||
+ | |||
+ | Файл должен получиться примерно такой: | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | class | + | |
+ | /** | ||
+ | * Способ доставки типа "Доставка стоимость + процент от заказа". | ||
+ | * Подходит ко всем заказам. | ||
+ | * Стоимость доставки берет из объекта-источника + процент от стоимости заказа. | ||
+ | * Доставка может быть бесплатной, если стоимость заказа превысила значение соответствующей настройки объекта-источника. | ||
+ | */ | ||
+ | class exampledeliveryDelivery extends delivery { | ||
+ | |||
+ | /** @inheritdoc */ | ||
public function validate(order $order) { | public function validate(order $order) { | ||
return true; | return true; | ||
} | } | ||
+ | /** @inheritdoc */ | ||
public function getDeliveryPrice(order $order) { | 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; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Проверьте, что файл в кодировке utf-8 (без BOM). | ||
+ | |||
+ | 6. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ доставки "''Доставка стоимость + процент от заказа''", заполните поля Стоимость доставки, Процент и Стоимость заказа, после которой доставка бесплатна: | ||
+ | |||
+ | [[Файл:Russian05.png]] | ||
+ | |||
+ | 7. Проверим работу нового способа доставки. | ||
+ | |||
+ | Наш заказ: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Файл:Russian06.png]] | [[Файл:Russian06.png]] | ||
− | |||
− | + | [[Файл:Russian07.png]] | |
+ | |||
+ | Так как общая сумма заказа больше 500 рублей то стоимость доставки включает только процент от стоимости заказа. | ||
+ | |||
+ | Итого: 0 + (32893 * 1%) = 328.93 руб. | ||
+ | |||
[[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]] | [[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]] |
Текущая версия на 07:34, 17 мая 2019
Актуально для версии 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 руб.