Поддержка дробного количества и единиц измерения товаров Shop-Script в плагинах оплаты и доставки
В Shop-Script начиная с версии 9.0.0 доступны поддержка дробного количества и настраиваемых складских единиц измерения товаров (в дополнением к стандартным штукам).
Базовые единицы измерения, настроенные в Shop-Script, в работе плагинов доставки и оплаты не участвуют, поэтому их поддержку декларировать не нужно.
Поддержка этих возможностей доступна только для лицензии «ПРЕМИУМ» и недоступна для лицензии «ПРО». Подробнее о лицензиях Shop-Script.
Объявление поддержки расширенных возможностей
Для того чтобы правильно взаимодействовать с расширенными возможностями лицензии Shop-Script «ПРЕМИУМ», в исходном коде плагинов доставки и оплаты должна быть объявлена поддержка этих возможностей. Поддержку каждой из возможностей нужно объявить с помощью записей в конфигурационном файле plugin.php:
'fractional_quantity' => ..., // дробное количество 'stock_units' => ..., // складские единицы измерения
Для каждого из этих ключей доступны 3 возможных значения:
true
: возможность поддерживается плагином;false
: возможность не поддерживается плагином;null
(либо запись с ключом отсутствует в файле): разработчик плагина не определился с поддержкой, ситуация остаётся на усмотрение пользователя.
Взаимодействие плагина с Shop-Script
В зависимости от объявленного значения для каждой из расширенных возможностей в конфигурационном файле Shop-Script ведёт себя следующим образом при взаимодействии с плагином:
true
:- Shop-Script передаёт плагину обработку всех заказов.
false
:- Если в заказе есть позиции, требующие поддержки новой возможности, то заказ не передаётся на обработку в плагин.
- В противном случае заказ передаётся, как обычно.
null
:- Если в заказе есть позиции, требующие поддержки новой возможности, то Shop-Script ориентируется на настройку совместимости плагинов.
- В противном случае заказ передаётся, как обычно.
Настройка совместимости плагинов
Если у пользователя установлены плагины доставки и оплаты, возвращающие значение null
для расширенных возможностей лицензии «ПРЕМИУМ», то на странице совместимости в настройках Shop-Script пользователь может выбрать, каким образом интернет-магазин
должен взаимодействовать с такими плагинами.
Варианты настройки для дробного количества товаров
- Не передавать заказ в плагин, если в заказе есть позиции, требующие поддержки дробного количества.
- Передавать заказ как есть.
- Передавать заказ с конвертацией количества заказанных товаров в целочисленные значения: дробное количество будет изменено на 1 (штуку), а стоимость 1 штуки станет равна суммарной стоимости товара в заказе.
Варианты настройки для единиц измерения товаров
- Не передавать заказ в плагин, если в заказе есть позиции, требующие поддержки настраиваемых единиц измерения (кроме стандартных штук).
- Передавать заказ как есть.
Описание поддержки расширенных возможностей лицензии Shop-Script «ПРЕМИУМ»
Помимо указания поддержки дробного количества и единиц измерения количества товаров в конфигурационном файле, плагин доставки или оплаты может содержать специальным образом оформленную информацию о поддержке расширенных возможностей лицензии «ПРЕМИУМ» с текстовым описанием. Эта информация поможет пользователям точнее определить, каким образом плагин взаимодействует с разными лицензиями Shop-Script.
Работа с классом waOrder
- Если в настройках Shop-Script включена поддержка дробного количества товаров, то в поле
['items'][]['quantity']
экземпляра классаwaOrder
может содержаться дробное значение. В противном случае — только целочисленное. - Если в настройках Shop-Script включено использование разных единиц измерения количества товаров, то в экземпляре класса
waOrder
доступно поле['items'][]['stock_unit']
. Если оно заполнено, то содержит отформатированную для чтения строку с обозначением единицы измерения позиции заказа. Например, «кг» или «кв. м.». Если оно не заполнено, то по умолчанию используются штуки. - В классе
waOrder
доступны публичные методы для определения доступности расширенных возможностей лицензии Shop-Script «ПРЕМИУМ».Для их аккуратного использования нужно:
- либо проверять минимальную версию фреймворка Webasyst в конфигурационном файле requirements.php,
- либо (если нужно поддерживать более старые версии фреймворка) использовать в коде плагина функцию
method_exists()
.
hasFractionalQuantity()
: возвращает флаг, обозначающий наличие в заказе позиций с дробным количеством;repackFractionalQuantity()
:- Если в заказе есть позиции с дробным количеством, то метод создаёт и возвращает новый экземпляр класса, в котором изменяет информацию о позициях заказа с дробным количеством так, чтобы превратить их количество в целочисленные значения: дробное количество будет изменено на 1 шт., а стоимость 1 штуки станет равна суммарной стоимости товара в заказе.
- В противном случае метод ничего не делает и просто возвращает текущий экземпляр класса.
hasStockUnits()
: возвращает флаг, обозначающий наличие в заказе позиций с настроенными пользователем единицами измерения (кроме стандартных штук).