b24 / devtools
dev-main
2025-06-01 16:15 UTC
Requires
- php: >=8.1.0
- phpoffice/phpspreadsheet: 1.19
This package is auto-updated.
Last update: 2025-06-01 16:16:05 UTC
README
- Установка
- Подключение
- Регистрация библиотеки как Модуль в системе Bitrix
- Смарт-процессы
- Работа с денежными полями
- Пользовательские поля
Установка
composer require b24/devtools
Подключение
Для использования инструментов необходимо подключить автозагрузчик Composer. Пример подключения:
local/php_interface/init.php
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
Регистрация библиотеки как Модуль в системе Bitrix
С помощью этого можно регистрировать свои контроллеры не создавая модуль. В init.php добавить:
new \B24\Devtools\Application\Application( new \B24\Devtools\Application\Configuration([ 'controllers' => [ 'namespaces' => [ '\\Some\\Namespace' => 'custom' ] ] ]) ); // ИЛИ new \B24\Devtools\Application\Application( (new \B24\Devtools\Application\Configuration()) ->setController('\\Some\\Namespace', 'custom') ->setController(...) ); \CModule::IncludeModule('b24.devtools'); // Вернёт true
Из js будет доступна отправка запроса в контроллер:
BX.ajax.runAction('b24:devtools.custom.ControllerName.actionName')
Смарт-процессы
Подмена сервис контейнера
Пример использования:
use Module\Helpers\Crm\Replacement\Container; new Container([ 'TEST' => FactoryTest::class ]);
Аргументом в конструктор передаётся массив, где ключом CODE смарт-процесса, значением неймспейс его фабрики. Позволяет вызывать события ДО и ПОСЛЕ на элементе смарт-процесса.
Пример фабрики
use Bitrix\Crm\Item; use Bitrix\Crm\Service; use Bitrix\Crm\Service\Context; use Bitrix\Crm\Service\Operation; class FactoryTest extends Service\Factory\Dynamic { public function getAddOperation(Item $item, Context $context = null): Operation\Add { $operation = parent::getAddOperation($item, $context); $operation->addAction( Operation::ACTION_BEFORE_SAVE, new AddHandler() ); return $operation; } }
Обработчик события на Добавление элемента
use Bitrix\Crm\Service\Operation; use Bitrix\Main\Result; class AddHandler extends Operation\Action { public function process(\Bitrix\Crm\Item $item): Result { $result = new Result(); $result->addError(new \Bitrix\Main\Error('Ошибка 1')) $result->addError(new \Bitrix\Main\Error('Ошибка 2')) return $result; } }
Работа с денежными полями
$moneyField = '155|USD'; $rateUsdToRub = 93.22; // либо $money = new \B24\Devtools\Data\MoneyField(155, 'USD'); $money = \B24\Devtools\Data\MoneyField::parse($moneyField) ->math(function (&$price) use ($rateUsdToRub) { $price = $price * $rateUsdToRub; }) ->setCurrency('RUB') ->round(2); echo (string) $money; // 14449.1|RUB
Пользовательские поля
Упрощённая работа с пользовательскими полями. Получение EntityId для какой то сущности, получение информации о пользоватеском поле, получение Enum спискового поля.
EntityName
use B24\Devtools\UserField\EntityName; $entityId = EntityName::byHlBlockId($hlBlockId); $entityId = EntityName::byEntityTypeId(\CCrmOwnerType::Deal); $entityId = EntityName::byHlBlockName($hlBlockName); $entityId = EntityName::bySmartProcessName($smartProcessName); $entityId = EntityName::bySmartProcessCode($smartProcessCode);
UserFieldService
$service = \B24\Devtools\UserField\UserFieldService::getInstance(); /** * @var \B24\Devtools\UserField\UserField $field */ $field = $service->getField($entityId, $fieldName); $field = $service->getFieldByHlBlockId($hlBlockId, $fieldName); $field = $service->getFieldByEntityTypeId($entityTypeId, $fieldName); $field = $service->getFieldByHlBlockName($hlBlockName, $fieldName); $field = $service->getFieldBySmartProcessCode($smartProcessCode, $fieldName); $field = $service->getFieldBySmartProcessName($smartProcessName, $fieldName);
UserField
use B24\Devtools\UserField\UserFieldService; $service = UserFieldService::getInstance(); $field = $service->getField($entityId, $fieldName); $field->entityId; $field->fieldCode; $field->id; $field->isMandatory; $field->isMultiple; $field->settings; $field->userTypeId; $field->xmlId; $field->getEnums(); $field->getLang(); $field->isBooleanType(); $field->isEnumType(); $field->isFileType(); // .....
EnumCollection
use B24\Devtools\UserField\UserFieldService; $service = UserFieldService::getInstance(); $field = $service->getField($entityId, $fieldName); $enumsCollection = $field->getEnums(); $enums = $enumsCollection->get(); $enum = $enumsCollection->findByValue($value); $enum = $enumsCollection->findByXmlId($xmlId); $enumDefault = $enumsCollection->findDefault();
Enum
use B24\Devtools\UserField\Enum; use B24\Devtools\UserField\UserFieldService; $service = UserFieldService::getInstance(); $field = $service->getField($entityId, $fieldName); $enum = $field->getEnums()->findDefault(); $enum->xmlId; $enum->id; $enum->isDefault; $enum->userFieldId; $enum->value; $enum = Enum::get($entityId, $fieldName, $xmlId); $enum = Enum::getByEntityTypeId($entityTypeId, $fieldName, $xmlId); $enum = Enum::getByHlBlockId($hlBlockId, $fieldName, $xmlId); $enum = Enum::getByHlBlockName($hlBlockName, $fieldName, $xmlId); $enum = Enum::getBySmartProcessCode($smartProcessCode, $fieldName, $xmlId); $enum = Enum::getBySmartProcessName($smartProcessName, $fieldName, $xmlId);