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

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

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

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

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

\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\EventManager::getInstance()->addEventHandler('main', 'OnUserTypeBuildList', ['CUserTypePropsLink', 'GetUserTypeDescription']);
class CUserTypePropsLink extends \Bitrix\Iblock\UserField\Types\ElementType
{
	
	public static function getDescription(): array
	{
		return array(
			"USER_TYPE_ID" => 'propslink',
			"CLASS_NAME" => __CLASS__,
			"DESCRIPTION" => 'Привязка к свойствам каталога',
			"BASE_TYPE" => \CUserTypeManager::BASE_TYPE_INT,
		);
	}

	
	public static function getList(array $userField)
	{
		$result = CIBlockProperty::GetList(
			['NAME' => 'ASC'],
			['IBLOCK_ID' => $userField["SETTINGS"]["IBLOCK_ID"], 'ACTIVE' => 'Y']
		);
		
		if($result) {
			$result = new \CIBlockElementEnum($result);
		}

		return $result;
	}
}

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

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


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 | Обновлено 15 августа 2024
разработчику, примеры кода, свойства
Поделиться
Похожие статьи
bitrix d7 получить полный путь местоположения по id/code
Пример из компонента поиска местоположения в заказе.
Читать дальше » 0
Алексей,
Bitrix d7 фильтр по дате
Выбираем заказы в определённом статусе за последний месяц. Пример кода.
Читать дальше » 0
Алексей,
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".