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

Материал из Umicms
Перейти к:навигация, поиск
Строка 78: Строка 78:
  
 
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.
 
На основе данной статьи можно также создавать и модифицировать типы оплаты, модификаторы и правила скидок, валюты и другой функционал модуля Интернет-Магазин.
 +
 +
[[Категория:Модуль Интернет магазин]][[Категория: API]]

Версия 13:30, 21 февраля 2013

Чтобы создать свой тип доставки, нужно сперва создать в корне сайта файл, поместить в него и выполнить следующий код:

<?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');
}

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

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