Разработчики, которые делают проекты на Битрикс, хорошо знакомы с двумя типами служб доставки в этой CMS — это Настраиваемые и Автоматизированные. В этой статье мы посмотрим как сделать свой Автоматизированный обработчик доставки и даже сделаем простой пример такого обработчика.
Об автоматизированном обработчике доставки
Все предустановленные обработчики располагаются в папке /bitrix/modules/sale/lang/ru/delivery/ . Свои обработчики следует располагать в папке /bitrix/php_interface/include/sale_delivery/
(этот путь можно изменить в свойствах модуля интернет-магазина). Обработчик представляет собой класс определенной структуры со строкой подключения обработчика доставки по событию onSaleDeliveryHandlersBuildList .
Класс обработчика доставки должен иметь ряд методов, типы действий которых, описываются в методе Init класса.
Эти методы такие:
1. Init — происходит инициализации основных полей.
2. DBGETSETTINGS — метод считывания значений параметров.
3. DBSETSETTINGS — метод установки значений параметров.
4. GETCONFIG — определение конфигурации настроек (их можно разбить на табы).
5. COMPABILITY — проверка совместимости профилей обработчика с заказом.
6. CALCULATOR — расчет стоимости доставки.
Также должны быть заданы поля:
1. SID — Уникальный строковой идентификатор обработчика.
2. NAME — Название обработчика.
3. DESCRIPTION — Текстовое описание обработчика
4. DESCRIPTION_INNER — Внутреннее описание обработчика, отображаемое при конфигурации обработчика в Панели Управления.
5. BASE_CURRENCY — Идентификатор базовой валюты обработчика
6. HANDLER — Путь к файлу обработчика. Нужен для корректного автоматического копирования обработчика (ещё не реализовано). В подавляющем большинстве случаев достаточно значения __FILE__
Также должны быть заданы профили доставки. Хотя бы один.
Простейший обработчик доставки.
Не будем мудрить — сделаем обработчик, который ничего не считает и всегда выдает цену одну и ту же, например 200 руб. В нем будет всего один профиль — без ограничений. В настройки вынесем цену доставки.
CModule::IncludeModule("sale"); Class CDeliveryPlain { /** * Описние обработчика */ function Init() { //настройки return array( "SID" => "Plain", // Идентификатор службы доставки "NAME" => "Пример обработчика службы доставки", "DESCRIPTION" => "Описание его для клиентов сайта", "DESCRIPTION_INNER" => "Описание для администраторов сайта", "BASE_CURRENCY" => "RUR", "HANDLER" => __FILE__, /* Определение методов */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), "GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "Compability"), "CALCULATOR" => array("CDeliveryPlain", "Calculate"), /* Список профилей */ "PROFILES" => array( "all" => array( "TITLE" => "Без ограничений", "DESCRIPTION" => "Профиль доставки без каких-либо ограничений", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0), ), ) ); } /* Установка параметров */ function SetSettings($arSettings) { foreach ($arSettings as $key => $value){ if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); } return serialize($arSettings); } /* Запрос параметров */ function GetSettings($strSettings) { return unserialize($strSettings); } /* Запрос конфигурации службы доставки */ function GetConfig() { $arConfig = array( "CONFIG_GROUPS" => array( "all" => "Параметры", ), "CONFIG" => array( "DELIVERY_PRICE" => array( "TYPE" => "STRING", "DEFAULT" => "200", "TITLE" => "Стоимость доставки", "GROUP" => "all" ) ), ); return $arConfig; } /* Проверка соответствия профиля доставки заказу */ function Compability($arOrder, $arConfig) { return array("all"); } /* Калькуляция стоимости доставки*/ function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { return array( "RESULT" => "OK", "VALUE" => $arConfig["DELIVERY_PRICE"] ); } } AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init"));
Сохраним этот обработчик в файле /bitrix/php_interface/include/sale_delivery/delivery_plain.php и посмотрим в список автоматизированных обработчиков. Если мы видим его в списке, то значит все сделано правильно. Нам осталось его активировать и проверить работу.
Успехов в разработке!
А в чем смысл автоматизированного обработчика, который всегда считает по 200 рублей? Это делается настраиваемым обработчиком.
Я думаю, стоило немного помудрить, хотя бы чуть-чуть, чтобы в обработчике все-таки шел расчет.
Я старался показать максимально простой пример.
а как сделать чтобы вместо цены всегда была была надпись, к примеру: Стоимость доставки рассчитывается менеджером после оформления заказа.?
Можно возвращать какую-нибудь сумму (лучше всего 0), которая в шаблоне оформления заказа для конкретного обработчика доставки будет ассоциирована с надписью.