Меню

Настройка формы редактирования элемента инфоблока через API

Каждый достаточно опытный пользователь Битрикса знает что форма редактирования элементов инфоблока может быть настроена произвольным образом для каждого инфоблока. Могут быть удалены или добавлены вкладки, свойства и поля могут быть размещены на любой вкладке в любом порядке. В административном разделе это сделать достаточно просто. Здесь же мы опишем как это можно сделать программно через API Битрикса.

Сделать это достаточно просто, но информации об этом практически нет.

Информация о настройках форм редактирования элементов инфоблоков хранится в свойствах системы. Каждое свойство соответствует конкретному инфоблоку и пользователю или всем пользователям по умолчанию.

Собственно описание настроек формы заключается в создании массива, который описывает вкладки и содержащиеся в них поля. После чего этот массив записывается в свойство.

Посмотрим пример кода:
<?
use \Bitrix\Main\Loader;

Loader::includeModule("iblock");

$iblockID = 3;

// получаем свойства инфоблока
$arProps = [];
$properties = CIBlockProperty::GetList([], ["IBLOCK_ID"=>$iblockID]);
while ($arPropField = $properties->GetNext())
{
    $arProps[$arPropField["CODE"]] = $arPropField["ID"];
}

$arSettings = [
    "tabs" => implode(
        ";", [
            implode(
                ",",
                [
                    "edit1--#--Элемент--", // первая вкладка
                    "--ID--#--ID--",
                    "--DATE_CREATE--#--Создан--",
                    "--TIMESTAMP_X--#--Изменен--",          //  поля в виде   --КОД_ПОЛЯ--#--НАЗВАНИЕ_В_ФОРМЕ--
                    "--ACTIVE--#--Активность--",
                    "--ACTIVE_FROM--#--Начало активности--",
                    "--ACTIVE_TO--#--Окончание активности--",
                    "--DETAIL_PICTURE--#--Фон--",
                    "--NAME--#--*Название--",
                    "--SORT--#--Сортировка--",
                    "--PROPERTY_".$arProps["COLOR"]."--#--Цвет текста--",   //  свойства в виде   --PROPERTY_ID_СВОЙСТВА--#--НАЗВАНИЕ_В_ФОРМЕ--
                    "--PROPERTY_".$arProps["REF"]."--#--Ссылка--",
                    "--PROPERTY_".$arProps["BUTTON"]."--#--Текст кнопки--",
                    "--PROPERTY_".$arProps["WIDTH"]."--#--Ширина--",
                    "--DETAIL_TEXT--#--Текст--",
                    "--XML_ID--#--*Внешний код--",
                ]
            ),
            "--"
        ]
    )
];

\CUserOptions::SetOption("form", "form_element_".$iblockID, $arSettings, true);        // по умолчанию
\CUserOptions::SetOption("form", "form_element_".$iblockID, $arSettings, false, 5);    // для пользователя с ID 5
?>
Что мы делаем.

Сначала получаем свойства инфоблока. Это нужно для получения ID свойства по его коду. Если вы заранее знаете ID свойств, то этот шаг можно пропустить, но в некоторых случаях мы знаем только код. Например, перед этим мы создаем эти свойства и не знаем какие ID они получат.

Следующий шаг создание самого массива. Расписывать подробно необходимости нет, все понятно по комментариям. В примере описана только одна вкладка. Их может быть любое количество.

Последнее что мы делаем - кладем наш массив в свойство, указывая ID инфоблока и, при необходимости, ID пользователя.
27.01.2022

Возврат к списку

Оставаясь на этом сайте Вы соглашаетесь с использованием файлов cookie, а также принимаете все пользовательские соглашения данного сайта.