Все мы знаем, что при загрузки в товар изображений виртуемарт дает файлам странные имена.
Например - _____________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. Решение отредактировано. Окончательный проверенный вариант.