Чтобы добавить собственную службу доставки, следует создать файл 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 описывает параметры, которые необходимо спросить в интерфейсе у администратора.
function addCustomDeliveryServices() { return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS, array( '\Sale\Handlers\Delivery\CustomHandler' => '/ваш_путь_до_обработчика/имя_обработчика.php' ) ); } $eventManager->addEventHandler('sale', 'onSaleDeliveryHandlersClassNamesBuildList', 'addCustomDeliveryServices');