Добрый день
Существует одна маленькая задача:
Необходимо в административной части сайта, при создании элемента в инфоблоке "Новости", производить его копирование в инфоблок "Архив новостей"
Привожу порядок моих действий:
1) В инфоблоках "Новости" и "Архив новостей" созданы поля с аналогичными названиями и кодами;
2) В файле init.php прописан обработчик события "OnAfterIBlockElementAdd";
3) Прописаны цифровые коды полей которые будет необходимо заполнять при копировании элемента в инфоблок "Архив новостей";
Результат:
Тем не менее после проделанных действий, элемент инфоблока "Новости" создается как и обычно, но копий элементов в инфоблоке "Архив новостей" не появляется.
Проконсультируйте пожалуйста, как возможно решить данную задачу, и какие шаги ещё необходимо предпринять для достижения желаемого результата?
Ниже привожу код обработчика события:
Существует одна маленькая задача:
Необходимо в административной части сайта, при создании элемента в инфоблоке "Новости", производить его копирование в инфоблок "Архив новостей"
Привожу порядок моих действий:
1) В инфоблоках "Новости" и "Архив новостей" созданы поля с аналогичными названиями и кодами;
2) В файле init.php прописан обработчик события "OnAfterIBlockElementAdd";
3) Прописаны цифровые коды полей которые будет необходимо заполнять при копировании элемента в инфоблок "Архив новостей";
Результат:
Тем не менее после проделанных действий, элемент инфоблока "Новости" создается как и обычно, но копий элементов в инфоблоке "Архив новостей" не появляется.
Проконсультируйте пожалуйста, как возможно решить данную задачу, и какие шаги ещё необходимо предпринять для достижения желаемого результата?
Ниже привожу код обработчика события:
| Код |
|---|
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("ObjectsAdd", "OnAfterIBlockElementAddHandler"));
class ObjectsAdd
{
// создаю обработчик события "OnAfterIBlockElementAdd"
function OnAfterIBlockElementAddHandler(&$arFields)
{
if ($arFields["ID"]>0 && (!in_array($arFields["IBLOCK_ID"], array(23,34)))) // перечисляю ИД инфоблоков элементы которых нужно копировать в "Архив"
{
$arSelectEvent = Array("ID", "NAME", "CODE", "PREVIEW_PICTURE", "PROPERTY_NAME_RU", "PROPERTY_NAME_EN", "PROPERTY_PREVIEW_TEXT_RU", "PROPERTY_PREVIEW_TEXT_EN", "DATE_ACTIVE_FROM");
$arFilterEvent = Array("ACTIVE"=>"Y", "ID"=>$arFields["ID"]);
$resEvent = CIBlockElement::GetList(Array(), $arFilterEvent, false, false, $arSelectEvent);
while($obEvent = $resEvent->GetNextElement())
{
$arFieldsEvent = $obEvent->GetFields();
$nameEvent = $arFieldsEvent["NAME"]; // Заголовок материала
$codeEvent = $arFieldsEvent["CODE"]; // Код новости
$dateEvent = $arFieldsEvent["DATE_ACTIVE_FROM"]; // Дата начала активности новости
$nameEventRu = $arFieldsEvent["PROPERTY_NAME_RU_VALUE"]; // Заголовок на русском языке
$nameEventEn = $arFieldsEvent["PROPERTY_NAME_EN_VALUE"]; // Заголовок на английском языке
$rsPreviewImgEvent = CFile::GetByID($arFieldsEvent["PREVIEW_PICTURE"]); // Картинка превью
$arPreviewImgEvent = $rsPreviewImgEvent->Fetch();
$previewTextEventRu = $arFieldsEvent["PROPERTY_PREVIEW_TEXT_RU_VALUE"]["TEXT"]; // Краткое описание на рус.языке
$previewTextEventEn = $arFieldsEvent["PROPERTY_PREVIEW_TEXT_EN_VALUE"]["TEXT"]; // Краткое описание на англ.языке
}
$elEvent = new CIBlockElement;
$PROP = array();
$PROP[187] = $nameEventRu; // Свойству с кодом 187 будет задано значение в поле "Заголовок Ru" (код из инфоблока "Архив новостей")
$PROP[211] = $nameEventEn; // Свойству с кодом 211 будет задано значение в поле "Заголовок En" (код из инфоблока "Архив новостей")
$PROP[188] = array('VALUE'=>array('TEXT'=>$previewTextEventRu, 'TYPE'=>'html')); (код из инфоблока "Архив новостей")
$PROP[212] = array('VALUE'=>array('TEXT'=>$previewTextEventEn, 'TYPE'=>'html')); (код из инфоблока "Архив новостей")
$arLoadProductArray = Array(
"MODIFIED_BY" => 1, // Элемент изменил текущий пользователь
"IBLOCK_SECTION_ID" => false,
"IBLOCK_ID" => 34, // ИД инфоблока "Архив новостей"
"DATE_ACTIVE_FROM" => $dateEvent,
"PROPERTY_VALUES" => $PROP,
"NAME" => $nameEvent,
"CODE" => $arFields["ID"].'_'.$codeEvent,
"ACTIVE" => "N", // после дублирования сделать неактивным
"PREVIEW_PICTURE" => CFile::MakeFileArray("/upload/".$arPreviewImgEvent["SUBDIR"]."/".$arPreviewImgEvent["FILE_NAME"])
);
$elEvent->Add($arLoadProductArray);
}
}
} |
