webarchitect609 / bitrix-user-type
Set of custom Bitrix user property types and basic auxiliary functionality to help develop new types as easy and fast as it possible.
Installs: 18 193
Dependents: 1
Suggesters: 0
Security: 0
Stars: 13
Watchers: 4
Forks: 7
Open Issues: 7
pkg:composer/webarchitect609/bitrix-user-type
Requires
- php: ^7.2 || ^8.0
 - ext-mbstring: *
 - anahkiasen/html-object: ^1.4
 - webarchitect609/bitrix-cache: ^1.6 || ^2.0
 - webarchitect609/bitrix-orm-tools: ^2.6
 
README
Набор типов пользовательских свойств, а также базовый функционал, призванный максимально упростить и ускорить разработку новых типов пользовательских свойств.
Пока нестабильная версия - будьте внимательны!
Если вы хотите создавать свои типы свойств элемента инфоблока, то вам нужен пакет webarchitect609/bitrix-iblock-property-type
Как использовать
1 Установить через composer
composer require webarchitect609/bitrix-user-type
2 В init.php как можно раньше(выше) инициализировать используемые типы пользовательских свойств (подробнее - см. "Известные проблемы" #1). Например,
\WebArch\BitrixUserPropertyType\IblockSectionLinkType::init();
Либо воспользоваться менеджером:
<?php use WebArch\BitrixUserPropertyType\HyperLinkType; use WebArch\BitrixUserPropertyType\IblockSectionLinkType; use WebArch\BitrixUserPropertyType\Utils\UserTypeManager; use WebArch\BitrixUserPropertyType\WeekDayType; use WebArch\BitrixUserPropertyType\StoreListType; (new UserTypeManager([ HyperLinkType::class, IblockSectionLinkType::class, WeekDayType::class, StoreListType::class ]))->init();
3 Теперь можно создавать новые пользовательские поля, выбрав свойство нового типа!
Список пользовательских свойств пакета
- "Гиперссылка". Пользовательское свойство, реализующее валидную гиперссылку. 
WebArch\BitrixUserPropertyType\HyperLinkType - "Привязка к разделу инфоблока(с окном поиска)". Позволяет удобно указать раздел, выбрав его из всплывающего окна. 
WebArch\BitrixUserPropertyType\IblockSectionLinkType - "День недели". Позволяет реализовать привязку к дню недели (ISO-8601). 
WebArch\BitrixUserPropertyType\WeekDayType - "Привязка к складу". Реализует привязку к складу по его XML_ID. 
WebArch\BitrixUserPropertyType\StoreListType - "Привязка к местоположению". Реализует привязку к местоположению Bitrix по его коду.
WebArch\BitrixUserPropertyType\LocationType 
Как разработать свой тип свойства
1 Наследовать свой тип от базовой реализации \WebArch\BitrixUserPropertyType\Abstraction\UserTypeBase или
самостоятельно реализовать интерфейс \WebArch\BitrixUserPropertyType\Abstraction\UserTypeInterface.
2 Определить обязательный статический метод getDBColumnType(), используя один из подходящих трейтов из namespace
WebArch\BitrixUserPropertyType\Abstraction\DbColumnType
3 Определить другие обязательные методы, такие как getBaseType(), getDescription() и т.д., которые требует
\WebArch\BitrixUserPropertyType\Abstraction\UserTypeInterface
4 При необходимости реализации других поддерживаемых методов следует рассмотреть и реализовать интерфейсы из namespace
\WebArch\BitrixUserPropertyType\Abstraction\Custom
5 Инициализировать свой тип свойства в init.php
MyUserType::init();
6 Теперь можно создавать новые пользовательские поля, выбрав свойство нового типа!
Известные проблемы
#1 Ошибка "Bitrix\Main\SystemException: Unknown field definition UF_YOUR_TYPE" при работе с HL-блоками или общая ошибка неинициализации типа пользовательского свойства.
Возможная причина
Инициализация типа пользовательского свойства в init.php происходит позже, чем сборка сущности для любого HL-блока
\Bitrix\Highloadblock\HighloadBlockTable::compileEntity(), которая в свою очередь приводит к вызову
\CUserTypeManager::GetUserType() и набору кеша в \CUserTypeManager::$arUserTypes, который больше не обновлятся и в
который не попадают никакие вновь инициализированные типы пользовательских полей.
Способ устранения
Инициализация типов пользовательских свойств должна происходить раньше, чем самый первый вызов
\Bitrix\Highloadblock\HighloadBlockTable::compileEntity() или \CUserTypeManager::GetUserType().