webarchitect609 / bitrix-user-type
一组自定义Bitrix用户属性类型以及基本的辅助功能,旨在最大程度地简化并加速新类型的开发。
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 在处理HL块时出现错误 "Bitrix\Main\SystemException: Unknown field definition UF_YOUR_TYPE
" 或其他用户属性类型未初始化的通用错误。
可能原因
在init.php中初始化用户属性类型发生在对任何HL块 \Bitrix\Highloadblock\HighloadBlockTable::compileEntity()
的实体编译之后,后者又会导致调用 \CUserTypeManager::GetUserType()
并在 \CUserTypeManager::$arUserTypes
中缓存集合,该集合不再更新,并且不会包含任何新初始化的用户属性字段类型。
解决方法
用户属性类型的初始化应该在 \Bitrix\Highloadblock\HighloadBlockTable::compileEntity()
或 \CUserTypeManager::GetUserType()
的第一次调用之前发生。