Массовое копирование элементов ИБ в админке
Появилась необходимость копировать элементы внутри ИБ в другой раздел. В Битриске можно копировать только по одному элементу, и это не удобно когда надо скопировать более ста элементов в другой раздел.
Для начала нам надо добавить в список действий новое новое действие – «копировать».
Открываем файл - /bitrix/modules/iblock/admin/iblock_element_admin.php, находим строку 1895. Там объявляет массив с событиями:
Добавляем наше событие и получаем следующее:
Теперь нам необходимо добавить обработчик для данного события. В этом же файле перемещаемся на строку 647, там мы увидим следующее:
switch($_REQUEST['action'])
Ниже добавляем наш обработчик:
В данном коде жесткая привязка к определенным свойствам ИБ, можно переписать код для динамического определения свойств информационного блока. И даже не которые моменты модно оптимизировать.
Источник мой персональныйблог .
Появилась необходимость копировать элементы внутри ИБ в другой раздел. В Битриске можно копировать только по одному элементу, и это не удобно когда надо скопировать более ста элементов в другой раздел.
Для начала нам надо добавить в список действий новое новое действие – «копировать».
Открываем файл - /bitrix/modules/iblock/admin/iblock_element_admin.php, находим строку 1895. Там объявляет массив с событиями:
$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" => 'копировать', ); |
Теперь нам необходимо добавить обработчик для данного события. В этом же файле перемещаемся на строку 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; |
В данном коде жесткая привязка к определенным свойствам ИБ, можно переписать код для динамического определения свойств информационного блока. И даже не которые моменты модно оптимизировать.
Источник мой персональный