Пользовательское поле: текст с описанием

11
Алексей,
Пользовательское поле: текст с описанием
Пользовательское поле: текст с описанием

Через наследование \Bitrix\Main\UserField\Types\StringType

Через наследование \Bitrix\Main\UserField\Types\StringType

\Bitrix\Main\EventManager::getInstance()->addEventHandler("main", "OnUserTypeBuildList", ['propStringDesc', "getUserTypeDescription"]);

class propStringDesc extends \Bitrix\Main\UserField\Types\StringType
{

	
	public static function getDescription(): array
	{
		return array(
			"USER_TYPE_ID" => 'PropStringDesc',
			"CLASS_NAME" => __CLASS__,
			"DESCRIPTION" => 'Строка с описанием',
			"BASE_TYPE" => 'string',
		);
	}

	
	public static function checkFields(array $userField, $value): array
	{
		return [];
	}

	
	public static function OnBeforeSave($arUserField, $value): string
	{
		$value = \Bitrix\Main\Web\Json::encode($value);
		return $value;
	}

	
	public static function OnAfterFetch($arProperty, $arValue): array
	{
		if (!empty($arValue["VALUE"])) {
			$arValue = \Bitrix\Main\Web\Json::decode(html_entity_decode($arValue["VALUE"]));
		}

		return $arValue;
	}
}

Помимо класса, понадобится кастомизация шаблона компонента main.field.string:main.edit_form, нужно закинуть его в дефолтный шаблон и изменить вывод поля редактирования:

if ($value['tag'] === 'input') {
	$attList = $value['attrList'];
	if ($arResult["userField"]["USER_TYPE_ID"] === 'PropStringDesc') {
		$attList["value"] = $value['attrList']["value"]['NAME'];
		$attList['placeholder'] = 'Текст';
		$attList["name"] .= '[NAME]';
	}
	?>
	<input
		<?= $component->getHtmlBuilder()->buildTagAttributes($attList) ?>
	>
	<?php if ($arResult["userField"]["USER_TYPE_ID"] === 'PropStringDesc') {
		$attList = $value['attrList'];
		$attList["value"] = $value['attrList']["value"]['DESC'];
		$attList["name"] .= '[DESC]';
		$attList['placeholder'] = 'Ссылка';
		?>
		<input
			<?= $component->getHtmlBuilder()->buildTagAttributes($attList) ?>
		>
		<?php
	}
}

Другие компоненты (вывод и редактирование в списке) тоже нужно кастомизировать. Но проще запретить выводить в свойство списке =)

Пользовательское поле: текст с описанием

Есть вопрос или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 9 декабря 2025
админка, uf, кастом, примеры кода, костыли
Поделиться
Похожие статьи
Кастомное пользовательское поле, тип: привязка к чему-либо
Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере ...
Читать дальше » 0
bitrix d7 получить пользовательские поля раздела
Пример кода для получения пользовательских полей раздела. Пригодится когда нужно быстро получить нем...
Читать дальше » 0
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Через наследование \Bitrix\Main\UserField\Types\StringType