Создание своих типов доставки
Актуально для версии 2.9
Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:
<?php
$className = "my";
$deliveryName = "Моя доставка";
include "standalone.php";
$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 "Готово!";
?>
Мы добавили новый тип доставки с именем "Моя доставка", теперь необходимо реализовать способ доставки. Для этого нам потребуется создать класс myDelivery в файле /classes/modules/emarket/classes/delivery/systems/my.php. Пусть наш способ доставки действует только для заказов на сумму от 1200р и сама доставка будет стоить 500р.
<?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;
}
};
?>
Также мы можем расширить созданный ранее тип доставки, отредактировав тип данных. Например, через модуль Шаблоны Данных добавим новое поле "Стоимость" с идентификатором "price" в наш тип доставки. Теперь изменим метод getDeliveryPrice, чтобы он использовал созданное поле price:
public function getDeliveryPrice(order $order) {
return $this->object->getValue('price');
}
Таким образом, при создании способа доставки можно будет указать значения для полей, которые были созданы.
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.