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

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

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

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

Куда-нибудь в 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 | Обновлено 2 октября 2022
разработчику, примеры кода, свойства
Поделиться
Комментарии
Авторизуйтесь чтобы получать уведомления об ответе
Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".