Кастомное пользовательское поле, тип: привязка к чему-либо

30
Алексей,
Кастомное пользовательское поле, тип: привязка к чему-либо
Кастомное пользовательское поле, тип: привязка к чему-либо

Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".

Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".

Куда-нибудь в init.php закидываем код:

\Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'OnUserTypeBuildList', ['CUserTypePropsLink', 'GetUserTypeDescription']);
class CUserTypePropsLink extends CUserTypeIBlockElement
{
	/**
	 * @return array
	 */
	public static function GetUserTypeDescription()
	{
		return array(
			"USER_TYPE_ID" => 'propslink', // уникальный ID
			"CLASS_NAME" => __CLASS__,
			"DESCRIPTION" => 'Привязка к свойствам каталога',
			"BASE_TYPE" => \CUserTypeManager::BASE_TYPE_INT,
		);
	}

	/**
	 * @param $arUserField
	 * @return CIBlockPropertyResult
	 */
	public static function getList($arUserField)
	{
		return CIBlockProperty::GetList(
			['NAME' => 'ASC'],
			['IBLOCK_ID' => $arUserField["SETTINGS"]["IBLOCK_ID"], 'ACTIVE' => 'Y']
		);
	}
}

Где метод GetUserTypeDescription - это описание нового свойства. Вам нужно будет поменять в нем ID и описание. А в метод getList это, по сути, сам запрос данных, к которым вы хотите привязываться. В данным случае это запрос в таблицу свойств инфоблока.

На этом можно было бы закончить, но есть одна проблема. В выводе свойства, в админке, битрикс использует поле [VALUE], которого нет в таблице свойств. Поэтому нужно где-то сделать подмену на поле [NAME]. Самый простой способ это компонент main.field.enum. Копируем его в папку /local/components/bitrix/ и добавляем в class.php один метод:

/**
 * @param array $additionalParameters
 */
public function setAdditionalParameters(?array $additionalParameters): void
{
	foreach ($additionalParameters['items'] as &$item) {
		$item['VALUE'] = $item['VALUE'] ?: $item['NAME'].' ['.$item['ID'].'] ';
	}
	$this->additionalParameters = $additionalParameters;
}

В этом методе можете поэкспериментировать с выводимыми данными, чтобы было удобнее заполнять привязку. В примере выше, выводятся название и ID в квадратных скобках.

Пример вывода кастомного пользовательского поля Битрикс

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

Опубликовано 12 сентября 2022
разработчику, примеры кода, свойства
Поделиться
Комментарии
Авторизуйтесь чтобы получать уведомления об ответе
Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".