+7 495 008 8452
  • Загрузка
Выберите ваш цвет

Как скопировать разом сотню элементов из инфоблока в инфоблок?

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.

Необходимость массового копирования элементов между инфоблоками возникает регулярно. Например, при массовом заполнении каталога без импорта. Но по умолчанию «Битрикс» позволяет копировать элементы только по одному. Предлагаем решение для массового копирования.

1. Создание события "копирование"

В модуле управления инфоблоками по адресу /bitrix/modules/iblock/admin/iblock_element_admin.php надо найти фрагмент кода

$arActions = array(
   "delete" => GetMessage("MAIN_ADMIN_LIST_DELETE"),
   "activate" => GetMessage("MAIN_ADMIN_LIST_ACTIVATE"),
   "deactivate" => GetMessage("MAIN_ADMIN_LIST_DEACTIVATE"),
);


и добавить новый код, который и будет создавать новое событие

$arActions = array(
   "delete" => GetMessage("MAIN_ADMIN_LIST_DELETE"),
   "activate" => GetMessage("MAIN_ADMIN_LIST_ACTIVATE"),
   "deactivate" => GetMessage("MAIN_ADMIN_LIST_DEACTIVATE"),
   "copy_all" => 'копировать',
);


2. Добавим обработчик события "копировать"

В ранее отредактированном нами файле iblock_element_admin.php на 647 строке найдем фрагмент switch($_REQUEST['action']) и добавим после него код обработчика:

case "copy_all":
    
    $el = CIBlockElement::GetByID($ID);
    $el = $el->GetNext();
    $ibId = $el['IBLOCK_ID'];
    $new_section = intval($_REQUEST["section_to_move"]);
    
    $items = CIBlockElement::GetList(
        array(),
        array('IBLOCK_ID'  => $ibId,
              'ID' => $ID
        ),
        false,
        false,
        array('DETAIL_TEXT', 'PREVIEW_TEXT', 'PROPERTY_PRICE', 'PROPERTY_PHONE', 'PROPERTY_ADDRESS', 'PROPERTY_AREA', 'PROPERTY_LEVEL', 'PROPERTY_HOME', 'PROPERTY_REGION', 'PROPERTY_VARIANT', 'PROPERTY_BOLD', '*')
    );
    $item = $items->GetNext();
    
    $ob = new CIBlockElement();
    $PROP = array(
        'PRICE'   => $item['PROPERTY_PRICE_VALUE'],
        'PHONE'   => $item['PROPERTY_PHONE_VALUE'],
        'ADDRESS' => $item['PROPERTY_ADDRESS_VALUE'],
        'AREA'    => $item['PROPERTY_AREA_VALUE'],
        'LEVEL'   => $item['PROPERTY_LEVEL_VALUE'],
        'HOME'    => $item['PROPERTY_HOME_VALUE'],
        'REGION'  => $item['PROPERTY_REGION_VALUE'],
        'VARIANT' => $item['PROPERTY_VARIANT_VALUE'],
        'BOLD'    => $item['PROPERTY_BOLD_VALUE'],
    );
    
    $arLoadProductArray = Array(
      "MODIFIED_BY"       => $USER->GetID(),
      "IBLOCK_SECTION_ID" => $new_section,
      "IBLOCK_ID"         => $ibId,
      "NAME"              => $item['NAME'],
      "ACTIVE"            => "Y",
      "PREVIEW_TEXT"      => $item['PREVIEW_TEXT'],
      "DETAIL_TEXT"       => $item['DETAIL_TEXT'],
    );

    if(!$res = $ob->Add($arLoadProductArray)) {
       $lAdmin->AddGroupError(GetMessage("IBEL_A_UPDERR") . $ob->LAST_ERROR, $ID);
    }
    foreach ($PROP as $key => $val) {
        CIBlockElement::SetPropertyValueCode($res, $key, array('VALUE' => $val));
    }
    break;



Готово!

Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...