то ждем ваше обращение в нашей службе тех поддержки.
Добавление, редактирование, удаление пользовательских свойств и их значений
За работу с пользовательскими полями отвечает класс CUserTypeEntity.
Пример добавления пользовательского свойства типа Строка
/** * Добавление пользовательского свойства */ $oUserTypeEntity = new CUserTypeEntity(); $aUserFields = array( /* * Идентификатор сущности, к которой будет привязано свойство. * Для секция формат следующий - IBLOCK_{IBLOCK_ID}_SECTION */ 'ENTITY_ID' => 'IBLOCK_3_SECTION', /* Код поля. Всегда должно начинаться с UF_ */ 'FIELD_NAME' => 'UF_DEV2DAY_FIELD', /* Указываем, что тип нового пользовательского свойства строка */ 'USER_TYPE_ID' => 'string', /* * XML_ID пользовательского свойства. * Используется при выгрузке в качестве названия поля */ 'XML_ID' => 'XML_ID_DEV2DAY_FIELD', /* Сортировка */ 'SORT' => 500, /* Является поле множественным или нет */ 'MULTIPLE' => 'N', /* Обязательное или нет свойство */ 'MANDATORY' => 'N', /* * Показывать в фильтре списка. Возможные значения: * не показывать = N, точное совпадение = I, * поиск по маске = E, поиск по подстроке = S */ 'SHOW_FILTER' => 'N', /* * Не показывать в списке. Если передать какое-либо значение, * то будет считаться, что флаг выставлен. */ 'SHOW_IN_LIST' => '', /* * Пустая строка разрешает редактирование. * Если передать какое-либо значение, то будет считаться, * что флаг выставлен. */ 'EDIT_IN_LIST' => '', /* Значения поля участвуют в поиске */ 'IS_SEARCHABLE' => 'N', /* * Дополнительные настройки поля (зависят от типа). * В нашем случае для типа string */ 'SETTINGS' => array( /* Значение по умолчанию */ 'DEFAULT_VALUE' => '', /* Размер поля ввода для отображения */ 'SIZE' => '20', /* Количество строчек поля ввода */ 'ROWS' => '1', /* Минимальная длина строки (0 - не проверять) */ 'MIN_LENGTH' => '0', /* Максимальная длина строки (0 - не проверять) */ 'MAX_LENGTH' => '0', /* Регулярное выражение для проверки */ 'REGEXP' => '', ), /* Подпись в форме редактирования */ 'EDIT_FORM_LABEL' => array( 'ru' => 'Пользовательское свойство', 'en' => 'User field', ), /* Заголовок в списке */ 'LIST_COLUMN_LABEL' => array( 'ru' => 'Пользовательское свойство', 'en' => 'User field', ), /* Подпись фильтра в списке */ 'LIST_FILTER_LABEL' => array( 'ru' => 'Пользовательское свойство', 'en' => 'User field', ), /* Сообщение об ошибке (не обязательное) */ 'ERROR_MESSAGE' => array( 'ru' => 'Ошибка при заполнении пользовательского свойства', 'en' => 'An error in completing the user field', ), /* Помощь */ 'HELP_MESSAGE' => array( 'ru' => '', 'en' => '', ), ); $iUserFieldId = $oUserTypeEntity->Add( $aUserFields ); // int
При удачном добавлении свойства в переменную $iUserFieldId будет возвращен идентификатор нового пользовательского свойства.
Для создания пользовательских полей других типов замените значение USER_TYPE_ID:
- enumeration - Список
- double - Число
- integer - Целое число
- boolean - Да/Нет
- string - Строка
- file - Файл
- video - Видео
- datetime - Дата/Время
- iblock_section - Привязка к разделам инф. блоков
- iblock_element - Привязка к элементам инф. блоков
- string_formatted - Шаблон
- crm - Привязка к элементам CRM
- crm_status - Привязка к справочникам CRM
Пример добавления значений в пользовательские поля типа Список.
$obEnum = new CUserFieldEnum(); $obEnum->SetEnumValues($newID, $arAddEnum); //мы передаем массив, который состоит из таких элементов (наличие n в ключе обязательно) $arAddEnum['n'.$i] = array( 'XML_ID' => $key,//xml_id 'VALUE' => $value,//значение 'DEF' => 'N',//по умолчанию 'SORT' => $i*10//сортировка );
Обновление пользовательского свойства
При обновлении пользовательского свойства накладываются ограничения на изменение его типа (USER_TYPE_ID
), объекта привязки (ENTITY_ID), кода поля (FIELD_NAME). Это связано с возможными ошибками связей значений и сущностей. Если необходимо изменить одно из этих полей, то нужно сначала создать новое пользовательское свойство, привязать все значения к нему, а затем удалить старое свойство.
Пример обновления пользовательского свойства:
$oUserTypeEntity->Update( $iUserFieldId, array( 'MANDATORY' => 'Y', ) ); // boolean;
В примере установлено требование обязательности заполнения поля.
Удаление пользовательского поля
Необходимо передать идентификатор пользовательского поля:
$oUserTypeEntity->Delete( $iUserFieldId ); // CDBResult
Добавление и обновление значений пользовательских полей
Добавление и обновление реализовано также через класс CUserTypeManager и метод Update.
global $USER_FIELD_MANAGER; $aSection = CIBlockSection::GetList( array(), array( 'IBLOCK_CODE' => 'shop_news', 'CODE' => 'test_section', ) )->Fetch(); if( !$aSection ) { throw new Exception( 'Секция не найдена' ); } $USER_FIELD_MANAGER->Update( 'IBLOCK_3_SECTION', $aSection['ID'], array( 'UF_DEV2DAY_FIELD' => 'updated value' ) ); // boolean
В случае успешного обновления метод вернет true.
Добавить пользовательское свойство к разделу инфоблока
Если необходимо добавить пользовательское свойство к разделу инфоблока через механизм Битрикс-API, нужно использовать следующий код с вариациями:
$arFields = Array( "ENTITY_ID" => "IBLOCK_2_SECTION", "FIELD_NAME" => "UF_TITLE", "USER_TYPE_ID" => "string", "EDIT_FORM_LABEL" => Array("ru"=>"заголовок", "en"=>"title") ); $obUserField = new CUserTypeEntity; $obUserField->Add($arFields);
Назад в раздел