Делаем ЧПУ картинок у Bitrix

Автор:Alex

Делаем ЧПУ картинок у Bitrix

Я не знал что в настройках главного модуля есть такая опция »
Сохранять исходные имена загружаемых файлов», и врезультате все картинки на нашем сайте имеют вот такие некрасивые адреса:

/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]);
				}
			}
		}
	}
}

Об авторе

Alex administrator

Оставить ответ

Enter the text from the image below