Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как скопировать элемент

00 голосов
6
Можно ли как-то при добавлении одного элемента сделать так, чтобы этот элемент автоматом скопировался в другой инфоблок? Или только повесив событие на него?
спросил 02 Сен, 13 от BAGIRA (560 баллов)

6 Ответы

00 голосов
Возник похожий вопрос, есть инфоблок, в нем разделы, как импортировать файл *.csv, чтобы элементы инфорблока загрузились в конкретный раздел указанного инфоблока?
ответил 02 Сен, 13 от NexTZooL (140 баллов)
00 голосов
Игорь,мне кажется только событием. Чем вам этот вариант не нравится?:)
Алла Мирошниченко, там при импорте есть вкладочка поля и в списке поле надо выбирать "Группа уровня". Допустим надо создать товар в "Женская одежда->Юбки", тогда в CSV-файле надо прописать два поля "Женская одежда" и "Юбки" и в настройках импорта поставить им соответствие "Группа уровня 1" и "Группа уровня 2" соответственно.
ответил 23 Ноя, 13 от Almaz (140 баллов)
00 голосов
Евгений Дорохов, тем, что я не особо представляю как это на практике реализуется). Но раз по другому никак - придётся.
ответил 05 Март, 14 от BAGIRA (560 баллов)
00 голосов
Игорь, если получится, отпишитесь как. Я действительно сглупил,теоретически использовать функцию добавления внутри обработчика на добавлении элемента нелепо и не должно сработать.
Я как-то пытался сделать обработчик, который во время изменения элемента, менял бы параметры данного элемента как товара, но у меня не получилось.
ответил 25 Июнь, 14 от Almaz (140 баллов)
00 голосов
Евгений Дорохов, не знаю, я другого способа не вижу. Создал, только вот добавляет два раза Вот код.
Код
// регистрируем обработчик
  AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("Copy_news", "OnAfterIBlockElementAddHandler"));

  class Copy_news
       {
         // создаем обработчик события "OnAfterIBlockElementAdd"
         function OnAfterIBlockElementAddHandler(&$arFields)
                 {

                   if ($arFields["ID"]>0 && $arFields["IBLOCK_ID"] == 116)
                     {
                       if (!CModule::IncludeModule("iblock"))
                         {
                             AddMessage2Log("Не найден модуль инфоблоков.");
                          }
                          else
                          {
                            $copy_el = new CIBlockElement;
                            $arLoadProductArray = Array(
                            "CREATED_BY"    => $arFields["CREATED_BY"],
                            "IBLOCK_SECTION" => false,          // элемент лежит в корне раздела
                            "IBLOCK_ID"      => 121,            // Номер информационного блока, куда будет скопирован элемент
                            "NAME"           => $arFields["NAME"],
                            "ACTIVE"         => $arFields["ACTIVE"],            // активен
                            "DATE_ACTIVE_FROM"         => $arFields["DATE_ACTIVE_FROM"],            // активен
                            "PREVIEW_TEXT"        => $arFields["PREVIEW_TEXT"],
                            "PREVIEW_TEXT_TYPE"   => $arFields["PREVIEW_TEXT_TYPE"],
                            "DETAIL_TEXT"         => $arFields["DETAIL_TEXT"],
                            "DETAIL_TEXT_TYPE"    => $arFields["DETAIL_TEXT_TYPE"],
                            "DETAIL_PICTURE"      => $arFields["DETAIL_PICTURE"],
                            "DETAIL_PAGE_URL"      => $arFields["DETAIL_PAGE_URL"]
                             );
                           if(!$PRODUCT_ID = $copy_el->Add($arLoadProductArray))AddMessage2Log("Ошибка добавления записи (".$copy_el->LAST_ERROR.").");
                             }

                           }


                  }


        }

Обработчик срабатывает на любое добавление элемента, я постарался избежать этого с помощью проверки идентификатора инф блока, но всё равно нужно ещё как-то доработать, так как срабатывает два раза, пир создании в исходном инфоблоке, и при копировании в нужный. Долго мучился, может подскажет кто как решить?
P.S. Поля не все, только те, которые нужно конкретно мне..
ответил 25 Окт, 14 от BAGIRA (560 баллов)
00 голосов
Что интересно, иногда всё таки добавляются по одному разу.
Код
----------
2009-04-13 17:14:25 -  - Запись с кодом 116 Не соревнование, а праздник добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-13 17:15:58 -  - Запись с кодом 116 Весенний кросс добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-13 17:15:58 -  - Запись с кодом 116 Весенний кросс добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-13 17:17:17 -  - Запись с кодом 116 Молодежь выбирает здоровый образ жизни добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-13 17:17:17 -  - Запись с кодом 116 Молодежь выбирает здоровый образ жизни добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-14 16:15:41 -  - Запись с кодом 116 Традиционный парад гимнастики добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-14 16:17:08 -  - Запись с кодом 116 Произошло столкновение добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent
----------
2009-04-14 16:17:08 -  - Запись с кодом 116 Произошло столкновение добавлена.
    Copy_news::OnAfterIBlockElementAddHandler < call_user_func_array < ExecuteModuleEvent

Я вывел результаты в лог и вот что получилось.
ответил 23 Фев, 15 от BAGIRA (560 баллов)

Похожие вопросы

0 голосов
2 ответов
0 голосов
2 ответов
спросил 21 Апр, 14 от BAGIRA (560 баллов)
0 голосов
2 ответов
спросил 20 Апр, 14 от Lisica (900 баллов)
0 голосов
2 ответов
0 голосов
4 ответов