Я не знал что в настройках главного модуля есть такая опция »
Сохранять исходные имена загружаемых файлов», и врезультате все картинки на нашем сайте имеют вот такие некрасивые адреса:
/upload/iblock/00d/00d7e1282969b7830d06e7917ea9103b.jpg
Сам PHP код не сложный, но будет выполняться довольно продолжительное время, если изображений у вас много. Обратите внимание на значения $iblock_ids, $ob[‘IBLOCK_ID’]==2, $ob[‘IBLOCK_ID’]==28, ‘MORE_PICT’, ‘MORE_PICT_TORG ‘, их нужно заменить на свои значения.
В результате у вас получится что-то вроде
/upload/iblock/00d/name_element.jpg
CModule::IncludeModule("iblock"); $arSelect = Array("ID", "IBLOCK_ID", "NAME", "CODE", "PREVIEW_PICTURE", "DETAIL_PICTURE"); $iblock_ids = array(2,28); // ID инфоблоков, у которых будем менять имена картинок // Получаем имена элементов инфоблока, именно их и будет использовать для наших картинок $arFilter = Array("IBLOCK_ID"=>$iblock_ids, "INCLUDE_SUBSECTIONS"=>"Y"); $res = CIBlockElement::GetList(Array("ID"=>"ASC"), $arFilter, false, false, $arSelect); global $DB; while($ob = $res->GetNext()){ $new_code = CUtil::translit($ob['NAME'], "ru", array()); // транслитерация имени файла // Для картинки анонса if(!empty($ob['PREVIEW_PICTURE'])) { $first_pic_orig = CFile::GetPath($ob['PREVIEW_PICTURE']); $path_file = explode('/',$first_pic_orig); $first_pic = explode('.',$path_file[4]); $file_name = $first_pic[0]; // имя файла $file_exe = $first_pic[1]; // расширение файла $NEW_NAME_FILE = $path_file[0].'/'.$path_file[1].'/'.$path_file[2].'/'.$path_file[3].'/'.$new_code.'.'.$file_exe; // новое имя с полным путем if($first_pic_orig != $NEW_NAME_FILE){ // переименовываем файл rename($_SERVER['DOCUMENT_ROOT'].$first_pic_orig, $_SERVER['DOCUMENT_ROOT'].$NEW_NAME_FILE); // Исправляем значение в базе if(!empty($ob['PREVIEW_PICTURE'])) $DB->Query('UPDATE b_file SET FILE_NAME="'.$new_code.'.'.$file_exe.'",ORIGINAL_NAME="'.$new_code.'.'.$file_exe.'" WHERE ID='.$ob['PREVIEW_PICTURE']); } } // Для детальной картинки if(!empty($ob['DETAIL_PICTURE'])) { $first_pic_orig = CFile::GetPath($ob['DETAIL_PICTURE']); $path_file = explode('/',$first_pic_orig); $first_pic = explode('.',$path_file[4]); $file_name = $first_pic[0]; // имя файла $file_exe = $first_pic[1]; // расширение файла $NEW_NAME_FILE = $path_file[0].'/'.$path_file[1].'/'.$path_file[2].'/'.$path_file[3].'/'.$new_code.'.'.$file_exe; if($first_pic_orig != $NEW_NAME_FILE){ // переименовываем файл rename($_SERVER['DOCUMENT_ROOT'].$first_pic_orig, $_SERVER['DOCUMENT_ROOT'].$NEW_NAME_FILE); // Исправляем значение в базе if(!empty($ob['DETAIL_PICTURE'])) $DB->Query('UPDATE b_file SET FILE_NAME="'.$new_code.'.'.$file_exe.'",ORIGINAL_NAME="'.$new_code.'.'.$file_exe.'" WHERE ID='.$ob['DETAIL_PICTURE']); } } // Для дополнительных фото в свойстве элемента $arFilter_prop = Array("IBLOCK_ID"=>$iblock_ids, "ID"=>$ob['ID']); $res_prop = CIBlockElement::GetList(Array(), $arFilter_prop); $MORE_PICT_VALUE = array(); if ($ob_prop = $res_prop->GetNextElement()){ $arFields = $ob_prop->GetFields(); // поля элемента $arProps = $ob_prop->GetProperties(); // свойства элемента if($ob['IBLOCK_ID']==2) $MORE_PICT_VALUE = $arProps['MORE_PICT']['VALUE']; // 'MORE_PICT' - свойство, ['VALUE'] - значение для IBLOCK_ID = 2 if($ob['IBLOCK_ID']==28) $MORE_PICT_VALUE = $arProps['MORE_PICT_TORG']['VALUE']; // 'MORE_PICT_TORG' для IBLOCK_ID = 28 $more_pic = array(); if(!empty($MORE_PICT_VALUE) && count($MORE_PICT_VALUE)>0){ for($i=0;$i<count($MORE_PICT_VALUE);$i++){ $more_pic_orig[$i] = CFile::GetPath($MORE_PICT_VALUE[$i]); $path = explode('/',$more_pic_orig[$i]); $more_pic[$i] = explode('.',$path[4]); $file_name = $more_pic[$i][0]; // имя файла $file_exe = $more_pic[$i][1]; // расширение файла $NEW_NAME_FILE_MORE = $path[0].'/'.$path[1].'/'.$path[2].'/'.$path[3].'/'.$new_code.'_'.($i+1).'.'.$file_exe; // ($i+1) - порядковый номер картинки if($NEW_NAME_FILE_MORE!=$more_pic_orig[$i]){ rename($_SERVER['DOCUMENT_ROOT'].$more_pic_orig[$i], $_SERVER['DOCUMENT_ROOT'].$NEW_NAME_FILE_MORE); // переименуем файл // Исправляем значение в базе для IBLOCK_ID = 2 if($ob['IBLOCK_ID']==2) $DB->Query('UPDATE b_file SET FILE_NAME="'.$new_code.'_'.($i+1).'.'.$file_exe.'",ORIGINAL_NAME="'.$new_code.'_'.($i+1).'.'.$file_exe.'" WHERE ID='.$arProps['MORE_PICT']['VALUE'][$i]); // Исправляем значение в базе для IBLOCK_ID = 28 if($ob['IBLOCK_ID']==28) $DB->Query('UPDATE b_file SET FILE_NAME="'.$new_code.'_'.($i+1).'.'.$file_exe.'",ORIGINAL_NAME="'.$new_code.'_'.($i+1).'.'.$file_exe.'" WHERE ID='.$arProps['MORE_PICT_TORG']['VALUE'][$i]); } } } } } |
Об авторе