Найти тему
СОЗДАЮ

Запретить в Битрикс повторно загружать картинки из 1С8

Добрый день. Как-то раз потребовалось запретить повторно загружать картинки из 1с8 в Битрикс по просьбе заказчика т.к. при повторной выгрузке картинкам присваивается рандомное имя и из-за этого они пропадают из поиска на какое-то время до следующей переиндексации.

Итак..приступим...

Для начала откроем файл bitrix/php_interface/init.php и в него добавим код обработчика события выгрузки из 1с8

//Событие, вызываемое до сохранения изменений в элементе инфоблока
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "OnBeforeIBlockElementUpdate");
function OnBeforeIBlockElementUpdate(&$arFields)
{
//Проверяем, нужно ли обновлять картинку.
//Это необходимо, что бы при обмене с 1С картинки товаров, которые ранее уже были загружены, не загружались заново.
//Иначе при повторной загрузке у картинок поменяется имя и старые картинки будут недоступны в поисковике.
if(is_array($arFields) && isset($arFields['IBLOCK_ID']) && ((int)$arFields['IBLOCK_ID']==26))
{
$PRODUCT_ID = (int)$arFields['ID'];
$res = CIBlockElement::GetByID($PRODUCT_ID);
if($ar_res = $res->GetNext())
{
//Анонсная картинка
if(isset($arFields['PREVIEW_PICTURE']) && is_array($arFields['PREVIEW_PICTURE']) && $arFields['PREVIEW_PICTURE']['name']!='' && isset($ar_res['PREVIEW_PICTURE']) && (int)$ar_res['PREVIEW_PICTURE']>0)
{
$rsFile = CFile::GetByID((int)$ar_res['PREVIEW_PICTURE']);
if($arFile = $rsFile->Fetch())
{
$new_file_name = $arFields['PREVIEW_PICTURE']['name'];
//Если имя старого файла совпадает с именем нового файла, тогда файл не обновляем
if($new_file_name==$arFile['ORIGINAL_NAME'])
{
unset($arFields['PREVIEW_PICTURE']);
}
}
}
//Детальная картинка
if(isset($arFields['DETAIL_PICTURE']) && is_array($arFields['DETAIL_PICTURE']) && $arFields['DETAIL_PICTURE']['name']!='' && isset($ar_res['DETAIL_PICTURE']) && (int)$ar_res['DETAIL_PICTURE']>0)
{
$rsFile = CFile::GetByID((int)$ar_res['DETAIL_PICTURE']);
if($arFile = $rsFile->Fetch())
{
$new_file_name = $arFields['DETAIL_PICTURE']['name'];
//Если имя старого файла совпадает с именем нового файла, тогда файл не обновляем
if($new_file_name==$arFile['ORIGINAL_NAME'])
{
unset($arFields['DETAIL_PICTURE']);
}
}
}
}
}
}