Сюрприз от VirtueMart 2.6.6 - при сохранении товара в поле альяса (псевдоним) не происходит транслитерация русских букв.

Поиск в интернете дал такой результат:

нужно в файле

administrator/components/com_virtuemart/helpers/vmtable.php

найти

$unicodeslugs = VmConfig::get('transliterateSlugs',false);

и заменить на

$unicodeslugs = VmConfig::get('transliterateSlugs',true);

или в таблице #__virtuemart_configs в поле config добавить:

|transliterateSlugs=s:1:"1";

После этого транслитерация работает, но в альясе остаются точки и запятые и твердый знак похоже преобразуется в #, которое записывается в альяс уже кодированным.

Поэтому я добавил еще две строки в файл vmtable.php

$this->$slugName = str_replace(array(',','.'),'-',$this->$slugName);
$this->$slugName = str_replace(array('ъ','Ъ'),'',$this->$slugName);

после

// Trim white spaces at beginning and end of alias and make lowercase
$this->$slugName = trim(JString::strtolower($this->$slugName));
$this->$slugName = str_replace(array('`','´',"'"),'',$this->$slugName);

В таком варианте транслитерация работает, другие нетранслитерируемые символы пока не попадались..

На случай, если есть альясы с точками, запятыми, можно сделать такой запрос на обновление поля slug:

UPDATE #__virtuemart_products_ru_ru
SET slug=REPLACE(slug, '.', '-')

Если нужно заменить запятую во втором параметре replace указываем запятую.

Комментарии   

#1 Андрей 31.03.2015 14:15
Спасибо за полезное решение.
Все работает.

Чтобы сделать комментарий, нужно авторизоваться на сайте!