Рассмотрим частную задачу:
Необходимо при создании/обновлении элемента информационного блока сохранять детальную картинку и картинку анонса в папку сайта по маске
/bx_upload/catalog/#element_id#/#element_id#_(prw/dtl).#file extension#, при условии что два эти поля заполнены.
[spoiler]
Описание решения:
Обновление элемента будет осуществляться через обработчики событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd.
Копии изображений будем хранить в свойствах элемента типа "Привязка к файлу на сервере" с символьными кодами PREVIEW и DETAIL
Далее в init.php размещаем сам обработчик
Необходимо при создании/обновлении элемента информационного блока сохранять детальную картинку и картинку анонса в папку сайта по маске
/bx_upload/catalog/#element_id#/#element_id#_(prw/dtl).#file extension#, при условии что два эти поля заполнены.
[spoiler]
Описание решения:
Обновление элемента будет осуществляться через обработчики событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd.
Копии изображений будем хранить в свойствах элемента типа "Привязка к файлу на сервере" с символьными кодами PREVIEW и DETAIL
Далее в init.php размещаем сам обработчик
AddEventHandler("iblock", "OnAfterIBlockElementAdd","BlockAfterSave"); AddEventHandler("iblock","OnAfterIBlockElementUpdate","BlockAfterSave"); function BlockAfterSave(&$arFields) { $IBLOCK_ID = 20; $dir =$_SERVER['DOCUMENT_ROOT']."/bx_upload/catalog/"; CModule::IncludeModule('iblock'); $dbr = CIBlockElement::GetByID($arFields['ID']); $ar = $dbr->Fetch(); if($arFields["IBLOCK_ID"] == $IBLOCK_ID && $ar['DETAIL_PICTURE']>0 && $ar['PREVIEW_PICTURE']>0): $preview_img_path = $_SERVER['DOCUMENT_ROOT'].CFile::GetPath($ar['PREVIEW_PICTURE']); $detail_img_path = $_SERVER['DOCUMENT_ROOT'].CFile::GetPath($ar['DETAIL_PICTURE']); $subdir = $arFields[ID]; $file_name_prw = $subdir."_prw.".substr(strrchr(basename($preview_img_path), '.'), 1); $file_name_dtl = $subdir."_dtl.".substr(strrchr(basename($detail_img_path), '.'), 1); CopyDirFiles($preview_img_path,$dir.$subdir."/".$subdir."_prw.".substr(strrchr(basename($preview_img_path),'.'), 1)); CopyDirFiles($detail_img_path,$dir.$subdir."/".$subdir."_dtl.".substr(strrchr(basename($detail_img_path),'.'), 1)); CIBlockElement::SetPropertyValueCode($arFields[ID],"PREVIEW", "/bx_upload/catalog/$subdir/$file_name_prw"); CIBlockElement::SetPropertyValueCode($arFields[ID],"DETAIL", "/bx_upload/catalog/$subdir/$file_name_dtl"); $el = new CIBlockElement; $arLoadProductArray = Array( "IBLOCK_SECTION" => false, "IBLOCK_ID" =>$arFields["IBLOCK_ID"], "PREVIEW_PICTURE" => array("del"=>"Y","tmp_name"=>""), "DETAIL_PICTURE" => array("del"=>"Y","tmp_name"=>""), ); $PRODUCT_ID = $arFields["ID"]; $res = $el->Update($PRODUCT_ID,$arLoadProductArray); endif; } |