Цитата |
---|
Евгений написал: Подскажите пожалуйста ещё вот что, функция CFile::ResizeImageGet тоже меняет пути к картинкам, как она это делает при каждом обновлении страницы, при каждом обмене с 1с или просто один раз? |
Путь меняется, если изменился адрес картинки или параметры функции ResizeImageGet.
У нас на сайте менялись картинки после 1С обмена и поэтому сделал функцию, которая сохраняет старую картинку, если новая картинка имеет такое же название как оригинал имени текущей картинки. Это позволяет сохранять текущую картинку и экономить ресурсы (система не перезаписывает файл и не обновляет записи в БД). Функция работает только для детальной и анонсной картинки товара и не работает для дополнительных картинок (как правило, это свойство MORE_PHOTO). Для дополнительных картинок товара нужна дополнительная функция. И для картинок категорий тоже самое - нужна отдельная функция.
Для сохранения исходной картинки товара нужно добавить нижний код в файл /корень-сайта/php_interface/init.php
В коде нужно поменять ID инфоблоков (фрагмент (int)$arFields['IBLOCK_ID']==4 || (int)$arFields['IBLOCK_ID']==11). В примере 4 и 11 - это ID инфоблоков с товарами и торговыми предложениями. Для вашего сайта нужно указать свои ID
Код |
---|
//Событие, вызываемое до сохранения изменений в элементе инфоблока
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "vova_OnBeforeIBlockElementUpdate");
function vova_OnBeforeIBlockElementUpdate(&$arFields)
{
//Проверяем, нужно ли обновлять картинку.
//Это необходимо, что бы при обмене с 1С картинки товаров, которые ранее уже были загружены, не загружались заново.
//Иначе при повторной загрузке у картинок поменяется имя и старые картинки будут недоступны в поисковике.
if(is_array($arFields) && isset($arFields['IBLOCK_ID']) && ((int)$arFields['IBLOCK_ID']==4 || (int)$arFields['IBLOCK_ID']==11))
{
$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']);
}
}
}
}
}
}
|