Доработки магазина Simpla: транслитерация в URL
Дата: 03 Ноя ' 10 Автор: mart Рубрики: Программирование
Продолжая статьи по совершенствованию движка магазина Симпла делаем транслитерацию ЧПУ, т.к. разработчик к сожалению не увидел в этом необходимости (судя по ответу в Реформале на запрос). А сделать данную полезную вещь достаточно просто. Читаем далее…Итак, править нам надо будет шаблоны панели администратора. Для этого надо зайти в папку [ваш_сайт]/admin/templates. Необходимо будет править файлы
- product.tpl
- article.tpl
- brand.tpl
- category.tpl
- news_item.tpl
- section.tpl
Находим в каждом из этих файлов JavaScript-функцию generate_url() и заменяем ее содержимое на следующее (на примере шаблона для products.tpl)
// generating meta_title function generate_url(category, brand, name) { var ru_str = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var en_str = ['A','B','V','G','D','E','JO','ZH','Z','I','J','K','L','M','N','O','P','R','S','T', 'U','F','H','C','CH','SH','SHH','','I','','JE','JU', 'JA','a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f', 'h','c','ch','sh','shh','','i','','je','ju','ja']; url = name; if(brand != '') url = brand+' '+url; if(category != '') url = category+' '+url; url = url.replace(/[\s]+/gi, '_'); url = url.replace(/[^0-9a-zа-я_]+/gi, ''); var tmp_str = ""; for(var i = 0, l = url.length; i < l; i++) { var s = url.charAt(i), n = ru_str.indexOf(s); if(n >= 0) { tmp_str += en_str[n]; } else { tmp_str += s; } } return tmp_str; } |
Это самая «сложная» из функций. Сложность заключается в передаваемых в функцию параметрах. В функцию в products.tpl передается наибольшее количество параметров. Та же функция для section.tpl будет выглядеть следующим образом
// generating meta_title function generate_url(url) { var ru_str = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"; var en_str = ['A','B','V','G','D','E','JO','ZH','Z','I','J','K','L','M','N','O','P','R','S','T', 'U','F','H','C','CH','SH','SHH','','I','','JE','JU', 'JA','a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f', 'h','c','ch','sh','shh','','i','','je','ju','ja']; url = url.replace(/[\s]+/gi, '_'); url = url.replace(/[^0-9a-zа-я_]+/gi, ''); var tmp_str = ""; for(var i = 0, l = url.length; i < l; i++) { var s = url.charAt(i), n = ru_str.indexOf(s); if(n >= 0) { tmp_str += en_str[n]; } else { tmp_str += s; } } return tmp_str; } |
Т.е. в данном шаблоне передается только заголовок, так что формировать строку (как это делается в шаблоне продукта из категории, бренда и товара не надо делать).
В остальных шаблонах по аналогии вышеприведенного кода заменяем функции формирования транслитерированного адреса.
Всем Удачи!
2 комментария
-
Александр
13|Ноя|2010 1БольшоесСпасибо автору за помощь!
Весьма удобный скрипт, избавляет от лишних действий при добавлении товаров! -
Михаил
14|Мар|2011 2Уважаемый автор ! Эта доработка работает только при вновь добавляемом товаре ? Если да то как можно переделать базу данных ? А то весь товар по новой вбивать нехочется