webarchitect609/bitrix-user-type

一组自定义Bitrix用户属性类型以及基本的辅助功能,旨在最大程度地简化并加速新类型的开发。

v0.9.0 2024-09-03 12:34 UTC

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() 的第一次调用之前发生。