Bitrix

Создание обработчика доставки для 1С-Битрикс

Разработчики, которые делают проекты на Битрикс, хорошо знакомы с двумя типами служб доставки в этой 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 и посмотрим в список автоматизированных обработчиков. Если мы видим его в списке, то значит все сделано правильно. Нам осталось его активировать и проверить работу.

Успехов в разработке!

Комментариев: 4

  1. А в чем смысл автоматизированного обработчика, который всегда считает по 200 рублей? Это делается настраиваемым обработчиком.

    Я думаю, стоило немного помудрить, хотя бы чуть-чуть, чтобы в обработчике все-таки шел расчет.

  2. а как сделать чтобы вместо цены всегда была была надпись, к примеру: Стоимость доставки рассчитывается менеджером после оформления заказа.?

    1. Можно возвращать какую-нибудь сумму (лучше всего 0), которая в шаблоне оформления заказа для конкретного обработчика доставки будет ассоциирована с надписью.

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

три × три =