Создание копии формы редактирования BITRIX

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    13.10.2019
  • Категория
    1С-Битрикс
Копирование формы редактирования элемента битрикс
Задача:Быстро скопировать сложную форму в административном разделе 1С-Битрикс

Довольно часто необходимо создать копию инфоблока и его формы редактирования. Для решения первой задачи есть специальные модули на маркетплейсе, а вот что делать с формами редактирования?

Необходимо сделать полную копию инфоблока, со всем содержимым и формой админ панели.

1. Копируем инфоблок

Можно воспользоваться стандартным импортом/экспортом с заменой ID. Однако данный путь довольно долог, особенно,когда необходимо по очереди все инфоблоки копировать, поэтому предлагаю воспользоваться модулем «Модуль быстрое копирование инфоблоков со свойствами» от nBrains. Модуль ведет себе корректно и без ошибок.

2. Копируем форму редактирования в админ панели

Как оказалось, простое копирование настроек в БД не даст ничего, так как ID свойств инфоблока будут разным даже при копировании, из-за чего и возникают проблемы. Я написал небольшую шпаргалку для этого момента. Т.к. делали сайт с довольно большим количеством св-в, и делать каждый раз новые формы — очень долго.

Создаем файлик, кидаем туда код, меняем переменные $iblock_from и $iblock_to и все!

Могут быть проблемы, если уже в БД есть настройки этой формы, для этого — надо их убить через БД (таблица b_user_option, где name = form_element_26) и запустить скрипт снова.

<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
CModule::IncludeModule("iblock");
//Форму какого инфоблока копируем и в какой. У меня из 4 в 26
$iblock_from = 4;
$iblock_to = 26;
//Получаем все св-ва инфоблоков
$res = CIBlock::GetProperties($iblock_from);
while($res_arr = $res->Fetch()){
	$iblock_from_properties[] = $res_arr;
}

$res = CIBlock::GetProperties($iblock_to);
while($res_arr = $res->Fetch()){
	$iblock_to_properties[] = $res_arr;
}
//Делаем массивы с соответствием св-в для замены
foreach ($iblock_from_properties as $key => $iblock_property) {
	 $arSearch[]='PROPERTY_'.$iblock_property['ID'];
	 $res = CIBlock::GetProperties($iblock_to, Array(), Array("CODE"=>$iblock_property['CODE']));
	 while($res_arr = $res->Fetch()){
	 	$arReplace[] = 'PROPERTY_'.$res_arr['ID'];
	 }
}
//
//получаем табы формы из копируемого инфоблока
$tabs = CAdminFormSettings::getTabsArray('form_element_'.$iblock_from);
//У полученного массива меняем ID PROPERTY, чтобы все нормально работало.
$str_tabs = json_encode($tabs);
$new_tabs = str_replace($arSearch,$arReplace,$str_tabs);
$arTabs = json_decode($new_tabs,true);
//Применяем настройки инфоблока
CAdminFormSettings::setTabsArray('form_element_'.$iblock_to, $arTabs, $common = true, $userID);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>

Если нашли вариант улучшить скрипт — буду только рад. Пишите — обсудим.

Еще нет коммментариев. Будь первым!

Оформить заказ в Devstages