Цитата |
---|
Евгений написал: Подскажите пожалуйста ещё вот что, функция CFile::ResizeImageGet тоже меняет пути к картинкам, как она это делает при каждом обновлении страницы, при каждом обмене с 1с или просто один раз? |
У нас на сайте менялись картинки после 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']); } } } } } } |