Создание своих типов доставки — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 1: Строка 1:
 +
'''Актуально для версии 20'''
  
'''Актуально для версии 2.9'''
+
В этой статье мы рассмотрим создание своего типа доставки.
  
Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:
+
Для создания нового типа доставки нужно проделать ряд несложных действий:
  
<source lang="php">
+
'''1.'''<ul>
<?php
+
<li>В модуле “Шаблоны данных” создаём новый тип данных, дочерний к типу “Тип доставки”.</li>
$className = "my";
+
<li>В поле “Системный идентификатор” вписываем идентификатор нашей доставки, в нашем примере это будет new</li>
$deliveryName = "Моя доставка";
+
<li>В поле “Назначение” выбираем “Тип доставки”</li>
 +
<li>Запоминаем идентификатор созданного типа данных (можно посмотреть в адресной строке браузера - последнее числовое значение в строке)</li>
 +
<li>Сохраняем</li>
 +
</ul>
 +
'''2'''
 +
<ul>
 +
<li>Открываем справочник “Типы данных”, нажимаем на “Добавить наименование справочника”.
 +
<li>Вводим название, идентификатор, в нашем случае идентификатор будет deliveryNew
 +
<li>В поле “Тип данных(id) вводим запомненный нами в пункте 1 идентификатор типа данных
 +
<li>Сохраняем
 +
</ul>
 +
'''3'''
 +
<ul>
 +
<li>Открываем справочник “Способ доставки”, нажимаем на “Добавить наименование справочника”.
 +
<li>Вводим название нашей доставки, у нас это будет “Новая доставка”
 +
<li>В поле “Тип доставки” выбираем созданный нами новый тип доставки
 +
<li>Настраиваем другие поля необходимым нам образом
 +
<li>Сохраняем
 +
</ul>
  
include "standalone.php";
+
Теперь необходимо написать реализацию функционала доставки.<br/>
 +
Создаём файл с именем, которое должно быть равно идентификатору типа доставки, который мы выбрали в пункте 1. Т.е. у нас это будет файл new.php
 +
Копируем код из стандартного файла доставки delivery.php, который находится в папке ~/classes/components/emarket/classes/delivery/
 +
Название класса новой доставки должно быть названием файла с кодом + Delivery. Т.е. в нашем случае это будет newDelivery
  
$objectTypesCollection = umiObjectTypesCollection::getInstance();
+
На этом создание нового типа доставки окончено. Далее нам необходимо описать нужную нам реализацию функционала этого типа доставки на основе кода, который мы скопировали из стандартного файла доставки.
$objectsCollection = umiObjectsCollection::getInstance();
 
 
 
// получаем родительский тип
 
$parentTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-delivery");
 
 
 
// Тип для внутреннего объека, связанного с публичным типом
 
$internalTypeId = $objectTypesCollection->getTypeIdByGUID("emarket-deliverytype");
 
$typeId = $objectTypesCollection->addType($parentTypeId, $deliveryName);
 
 
 
// Создаем внутренний объект
 
$internalObjectId = $objectsCollection->addObject($deliveryName, $internalTypeId);
 
$internalObject = $objectsCollection->getObject($internalObjectId);
 
$internalObject->setValue("class_name", $className); // имя класса для реализации
 
 
 
// связываем его с типом
 
$internalObject->setValue("delivery_type_id", $typeId);
 
$internalObject->setValue("delivery_type_guid", "user-emarket-delivery-" . $typeId);
 
$internalObject->commit();
 
 
 
// Связываем внешний тип и внутренний объект
 
$type = $objectTypesCollection->getType($typeId);
 
$type->setGUID($internalObject->getValue("delivery_type_guid"));
 
$type->commit();
 
 
 
echo "Готово!";
 
?>
 
</source>
 
 
 
Мы добавили новый '''тип''' доставки с именем "Моя доставка", теперь необходимо реализовать '''способ''' доставки.
 
Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php.
 
Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.
 
 
 
<source lang="php">
 
<?php
 
class myDelivery extends delivery {
 
 
 
/**
 
* Определяем, возможен ли данный способ доставки для заказа
 
* @param order $order заказ
 
* @return bool
 
*/
 
public function validate(order $order) {
 
return ($order->getActualPrice() > 1200);
 
}
 
 
 
/**
 
* Стоимость доставки для заказа
 
* @param order $order заказ
 
* @return int стоимость
 
*/
 
public function getDeliveryPrice(order $order) {
 
return 500;
 
}
 
 
 
};
 
?>
 
</source>
 
  
 
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:
 
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:
Строка 77: Строка 42:
 
}
 
}
 
</source>
 
</source>
 
 
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.
 
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.
  
 
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.
 
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.
 
[[Категория:Модуль Интернет магазин]][[Категория: API]]
 

Версия 14:21, 10 апреля 2019

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

В этой статье мы рассмотрим создание своего типа доставки.

Для создания нового типа доставки нужно проделать ряд несложных действий:

1.

  • В модуле “Шаблоны данных” создаём новый тип данных, дочерний к типу “Тип доставки”.
  • В поле “Системный идентификатор” вписываем идентификатор нашей доставки, в нашем примере это будет new
  • В поле “Назначение” выбираем “Тип доставки”
  • Запоминаем идентификатор созданного типа данных (можно посмотреть в адресной строке браузера - последнее числовое значение в строке)
  • Сохраняем

2

  • Открываем справочник “Типы данных”, нажимаем на “Добавить наименование справочника”.
  • Вводим название, идентификатор, в нашем случае идентификатор будет deliveryNew
  • В поле “Тип данных(id) вводим запомненный нами в пункте 1 идентификатор типа данных
  • Сохраняем

3

  • Открываем справочник “Способ доставки”, нажимаем на “Добавить наименование справочника”.
  • Вводим название нашей доставки, у нас это будет “Новая доставка”
  • В поле “Тип доставки” выбираем созданный нами новый тип доставки
  • Настраиваем другие поля необходимым нам образом
  • Сохраняем

Теперь необходимо написать реализацию функционала доставки.
Создаём файл с именем, которое должно быть равно идентификатору типа доставки, который мы выбрали в пункте 1. Т.е. у нас это будет файл new.php Копируем код из стандартного файла доставки delivery.php, который находится в папке ~/classes/components/emarket/classes/delivery/ Название класса новой доставки должно быть названием файла с кодом + Delivery. Т.е. в нашем случае это будет newDelivery

На этом создание нового типа доставки окончено. Далее нам необходимо описать нужную нам реализацию функционала этого типа доставки на основе кода, который мы скопировали из стандартного файла доставки.

Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:

public function getDeliveryPrice(order $order) {
	return $this->object->getValue('price');
}

Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.

На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.