БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Красивые имена файлов для фото товаров

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 8878
 

Все мы знаем, что при загрузки в товар изображений виртуемарт дает файлам странные имена.

Например -  _____________4dc836a978919.jpg

Очень некрасиво. Давайте разбираться с этой странностью.

Дело в том, что имя файла формируется на основании... имени товара. А так как многоуважаемые разработчики Virtuemart не подозревают от том, что в имени товара могут быть не только латинские буквы, то русские символы превращаются в "_". Значит, наша задача - при формировании имени файла транслитерировать русское название товара в латиницу.

Открываем \administrator\components\com_virtuemart\classes\imageTools.class.php, конвертируем в UTF8 без ВОМ   и в самом начале ПОСЛЕ


	function validate(&$d) {

 пишем массив транслитерации:

 	$tbl= array(

	'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z',

	'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',

	'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',

	'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I',

	'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',

	'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",

	'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",

	'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh", 'Щ'=>"Shch", 'Ъ'=>"", 'Ь'=>"",

	'Ю'=>"Yu", 'Я'=>"Ya", ' '=>"_", '-'=>"_", ';'=>"_", ','=>"_", '.'=>"_"

	);

	

 

Имя файла формируется в нескольких местах. Это строки


	$filename = substr( $d[$table_name.'_name'], 0, 16 );

substr ограничивает длину имени в 16 символов. Можно убрать это ограничение. Такая строка

встречается у нас в двух местах. В обоих случаях заменяем на:

 	$filename = strtr($d[$table_name.'_name'],$tbl );

И в итоге мы получаем что-то вроде Koltso_123_1_465_4f156aaa9ae26.jpg

Хвост из непонятных цифр - это страховка от одинаковых имен файлов. Если хотите убрать - находим


	$to_file = uniqid( $filename.'_' );

и меняем на


	$to_file = $filename; 

Тоже в двух местах. Все.

 

P.S. Решение отредактировано. Окончательный проверенный вариант.

 

Back to top