273  /  330

Пример создания собственной службы доставки

Просмотров: 2580 (Статистика ведётся с 06.02.2017)

Чтобы добавить собственную службу доставки, следует создать файл handler.php и в нем написать класс <Ваше_название>Handler для вашей службы доставки. Файл должен быть размещен в отдельной директории <ваше_название> в /local/php_interface/include/sale_delivery/ или в том разделе, который задан в настройках модуля Интернет-магазин с помощью параметра Путь к собственным обработчикам расширенных систем доставки (по умолчанию используется /bitrix/php_interface/include/sale_delivery/). Из данного файла система подключает вашу службу доставки автоматически.

Например, добавим службу доставки, зависящую от веса.

Для этого файл handler.php расположим в директории /bitrix/php_interface/include/sale_delivery/custom/ и в нем составим описание для класса соответственно CustomHandler. Класс наследуем от базового класса служб доставки:

<?
namespace Sale\Handlers\Delivery;

use Bitrix\Sale\Delivery\CalculationResult;
use Bitrix\Sale\Delivery\Services\Base;

class CustomHandler extends Base
{
	public static function getClassTitle()
		{
			return 'Доставка по весу';
		}
		
	public static function getClassDescription()
		{
			return 'Доставка, стоимость которой зависит только от веса отправления';
		}
		
	protected function calculateConcrete(\Bitrix\Sale\Shipment $shipment)
		{
			$result = new CalculationResult();
			$price = floatval($this->config["MAIN"]["PRICE"]);
			$weight = floatval($shipment->getWeight()) / 1000;
		
			$result->setDeliveryPrice(roundEx($price * $weight, 2));
			$result->setPeriodDescription('1 день');
		
			return $result;
		}
		
	protected function getConfigStructure()
		{
			return array(
				"MAIN" => array(
					"TITLE" => 'Настройка обработчика',
					"DESCRIPTION" => 'Настройка обработчика',"ITEMS" => array(
						"PRICE" => array(
									"TYPE" => "NUMBER",
									"MIN" => 0,
									"NAME" => 'Стоимость доставки за грамм'
						)
					)
				)
			);
		}
		
	public function isCalculatePriceImmediately()
		{
			return true;
		}
		
	public static function whetherAdminExtraServicesShow()
		{
			return true;
		}
}
?>

В классе определяем необходимые нам методы. Так, методы getClassTitle и getClassDescription содержат название и описание службы доставки. Метод calculateConcrete вызывается при расчете стоимости доставки, принимая в качестве параметра отгрузку. Метод getConfigStructure описывает параметры, которые необходимо спросить в интерфейсе у администратора.


Примечание: если класс с вашей службой доставки имеет произвольное название, лежит в произвольном файле, то для подключения вашей службы в файл init.php необходимо добавить следующий код:
function addCustomDeliveryServices()
{
    return new \Bitrix\Main\EventResult(
        \Bitrix\Main\EventResult::SUCCESS,
        array(
            '\Sale\Handlers\Delivery\CustomHandler' => '/ваш_путь_до_обработчика/имя_обработчика.php'
        )
    );
}

$eventManager->addEventHandler('sale', 'onSaleDeliveryHandlersClassNamesBuildList', 'addCustomDeliveryServices');



5
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии