skeef Posted April 9, 2013 Share Posted April 9, 2013 (edited) Всем привет! Надоело набивать руками ЧПУ, особенно если языков много. Вот решил поправить недоработку разработчиков. Опишу логику, чтобы любой из вас мог применять это решение не зависимо от выхода новых версий PrestaShop. Необходимо найти файл: www/js/admin.js. На всякий случай, сделайте копию файла admin_old.php В файле есть функция: str2url, вот ее и поправим. function str2url(str, encoding, ucfirst) ~30 строка Все что надо сделать, это добавить недостающие символы кириллицы в соответствующие условия замены. При отсутствии буквы латиницы - будем создавать новое условие. Символы кириллицы русского и украинского алфавитов начинаются с \u410 (заглавная А) и заканчиваются \u044F (маленькая я) см. таблицу символов Исходный код: str = str.replace(/[\u00E7\u010D\u0107\u0106]/g,'c'); работает следующим образом: в тексте ищутся символы с кодировкой \u00E7 или \u010D или \u0107 или \u0106 и заменяются на символ "с". Заменяются ВСЕ символы в тексте. Как видите, символы кириллицы здесь не опрашиваются. Исправим код таким образом: str = str.replace(/[\u00E7\u010D\u0107\u0106\u0426\u0446]/g,'c'); Мы добавили большую и маленькую буквы "Ц" (\u0426 и \u0446 соответственно). Теперь они будут преобразовываться в латинскую "с". Как видите, заодно происходит и транслитерация. В заключение приведу исправленную часть кода функции str2url (PrestaShop 1.5.4): if (PS_ALLOW_ACCENTED_CHARS_URL) str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]\\u00A1-\\uFFFF/g,''); else { str = str.replace(/[\u0105\u0104\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u0410\u0430]/g,'a'); str = str.replace(/[\u0411\u0431]/g,'b'); str = str.replace(/[\u00E7\u010D\u0107\u0106\u0426\u0446]/g,'c'); str = str.replace(/[\u0427\u0447]/g,'ch'); str = str.replace(/[\u010F\u0414\u0434]/g,'d'); str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u011B\u0119\u0118\u0117\u0401\u0404\u0415\u0435\u0451\u0454\u042D\u044D]/g,'e'); str = str.replace(/[\u0424\u0444]/g,'f'); str = str.replace(/[\u0413\u0433\u0490\u0491]/g,'g'); str = str.replace(/[\u0425\u0445]/g,'h'); str = str.replace(/[\u00EC\u00ED\u00EE\u00EF\u012F\u0406\u0407\u0456\u0457\u0418\u0438\u042B\u044B]/g,'i'); str = str.replace(/[\u0419\u0439]/g,'j'); str = str.replace(/[\u041A\u043A]/g,'k'); str = str.replace(/[\u0142\u0141\u041B\u043B]/g,'l'); str = str.replace(/[\u041C\u043C]/g,'m'); str = str.replace(/[\u00F1\u0148\u041D\u043D]/g,'n'); str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00D3\u041E\u043E]/g,'o'); str = str.replace(/[\u041F\u043F]/g,'p'); str = str.replace(/[\u0159\u0155\u0420\u0440]/g,'r'); str = str.replace(/[\u015B\u015A\u0161\u0421\u0441]/g,'s'); str = str.replace(/[\u0428\u0448]/g,'sh'); str = str.replace(/[\u0429\u0449]/g,'sch'); str = str.replace(/[\u00DF]/g,'ss'); str = str.replace(/[\u0165\u0422\u0442]/g,'t'); str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u016F\u016B\u0173\u0423\u0443]/g,'u'); str = str.replace(/[\u0412\u0432]/g,'v'); str = str.replace(/[\u00FD\u00FF]/g,'y'); str = str.replace(/[\u042E\u044E]/g,'yu'); str = str.replace(/[\u042F\u044F]/g,'ya'); str = str.replace(/[\u017C\u017A\u017B\u0179\u017E\u0417\u0437]/g,'z'); str = str.replace(/[\u0416\u0436]/g,'zh'); str = str.replace(/[\u00E6]/g,'ae'); str = str.replace(/[\u0153]/g,'oe'); str = str.replace(/[\u013E\u013A]/g,'l'); str = str.replace(/[\u0155]/g,'r'); str = str.replace(/[\u042A\u044A\u042C\u044C]/g,''); str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,''); } Надеюсь мое решение пригодилось. Всем успехов Edited April 23, 2013 by skeef (see edit history) 1 Link to comment Share on other sites More sharing options...
nextfriday Posted April 22, 2013 Share Posted April 22, 2013 Отличное дополнение! А можно добавить эту транслитерацию к производителям,? А то на страницы с русскоязычными производителями отображаюстя только артикул и черточка /35_- И вручную их поправить тоже не представляется возможным. 1 Link to comment Share on other sites More sharing options...
kafelby Posted May 25, 2013 Share Posted May 25, 2013 Присоединяюсь к вопросу Link to comment Share on other sites More sharing options...
kafelby Posted May 25, 2013 Share Posted May 25, 2013 (edited) Найдено следующее решение http://prestadev.ru/forum/tema-6401.html , ссылки отображаются с транслитерацией, но выдает 404 ошибку при переходе по ним. Edited May 25, 2013 by kafelby (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 27, 2013 Share Posted May 27, 2013 Всем привет! Надоело набивать руками ЧПУ, особенно если языков много. Вот решил поправить недоработку разработчиков. Опишу логику, чтобы любой из вас мог применять это решение не зависимо от выхода новых версий PrestaShop. Необходимо найти файл: www/js/admin.js. На всякий случай, сделайте копию файла admin_old.php В файле есть функция: str2url, вот ее и поправим. function str2url(str, encoding, ucfirst) ~30 строка Все что надо сделать, это добавить недостающие символы кириллицы в соответствующие условия замены. При отсутствии буквы латиницы - будем создавать новое условие. Символы кириллицы русского и украинского алфавитов начинаются с \u410 (заглавная А) и заканчиваются \u044F (маленькая я) см. таблицу символов Исходный код: str = str.replace(/[\u00E7\u010D\u0107\u0106]/g,'c'); работает следующим образом: в тексте ищутся символы с кодировкой \u00E7 или \u010D или \u0107 или \u0106 и заменяются на символ "с". Заменяются ВСЕ символы в тексте. Как видите, символы кириллицы здесь не опрашиваются. Исправим код таким образом: str = str.replace(/[\u00E7\u010D\u0107\u0106\u0426\u0446]/g,'c'); Мы добавили большую и маленькую буквы "Ц" (\u0426 и \u0446 соответственно). Теперь они будут преобразовываться в латинскую "с". Как видите, заодно происходит и транслитерация. В заключение приведу исправленную часть кода функции str2url (PrestaShop 1.5.4): if (PS_ALLOW_ACCENTED_CHARS_URL) str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]\\u00A1-\\uFFFF/g,''); else { str = str.replace(/[\u0105\u0104\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u0410\u0430]/g,'a'); str = str.replace(/[\u0411\u0431]/g,'b'); str = str.replace(/[\u00E7\u010D\u0107\u0106\u0426\u0446]/g,'c'); str = str.replace(/[\u0427\u0447]/g,'ch'); str = str.replace(/[\u010F\u0414\u0434]/g,'d'); str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u011B\u0119\u0118\u0117\u0401\u0404\u0415\u0435\u0451\u0454\u042D\u044D]/g,'e'); str = str.replace(/[\u0424\u0444]/g,'f'); str = str.replace(/[\u0413\u0433\u0490\u0491]/g,'g'); str = str.replace(/[\u0425\u0445]/g,'h'); str = str.replace(/[\u00EC\u00ED\u00EE\u00EF\u012F\u0406\u0407\u0456\u0457\u0418\u0438\u042B\u044B]/g,'i'); str = str.replace(/[\u0419\u0439]/g,'j'); str = str.replace(/[\u041A\u043A]/g,'k'); str = str.replace(/[\u0142\u0141\u041B\u043B]/g,'l'); str = str.replace(/[\u041C\u043C]/g,'m'); str = str.replace(/[\u00F1\u0148\u041D\u043D]/g,'n'); str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00D3\u041E\u043E]/g,'o'); str = str.replace(/[\u041F\u043F]/g,'p'); str = str.replace(/[\u0159\u0155\u0420\u0440]/g,'r'); str = str.replace(/[\u015B\u015A\u0161\u0421\u0441]/g,'s'); str = str.replace(/[\u0428\u0448]/g,'sh'); str = str.replace(/[\u0429\u0449]/g,'sch'); str = str.replace(/[\u00DF]/g,'ss'); str = str.replace(/[\u0165\u0422\u0442]/g,'t'); str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u016F\u016B\u0173\u0423\u0443]/g,'u'); str = str.replace(/[\u0412\u0432]/g,'v'); str = str.replace(/[\u00FD\u00FF]/g,'y'); str = str.replace(/[\u042E\u044E]/g,'yu'); str = str.replace(/[\u042F\u044F]/g,'ya'); str = str.replace(/[\u017C\u017A\u017B\u0179\u017E\u0417\u0437]/g,'z'); str = str.replace(/[\u0416\u0436]/g,'zh'); str = str.replace(/[\u00E6]/g,'ae'); str = str.replace(/[\u0153]/g,'oe'); str = str.replace(/[\u013E\u013A]/g,'l'); str = str.replace(/[\u0155]/g,'r'); str = str.replace(/[\u042A\u044A\u042C\u044C]/g,''); str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,''); } Надеюсь мое решение пригодилось. Всем успехов Другое решение: в admin.js добавить функцию: String.prototype.translit = (function(){ var L = { 'А':'A','а':'a','Б':'B','б':'b','В':'V','в':'v','Г':'G','г':'g', 'Д':'D','д':'d','Е':'E','е':'e','Ё':'Yo','ё':'yo','Ж':'Zh','ж':'zh', 'З':'Z','з':'z','И':'I','и':'i','Й':'Y','й':'y','К':'K','к':'k', 'Л':'L','л':'l','М':'M','м':'m','Н':'N','н':'n','О':'O','о':'o', 'П':'P','п':'p','Р':'R','р':'r','С':'S','с':'s','Т':'T','т':'t', 'У':'U','у':'u','Ф':'F','ф':'f','Х':'Kh','х':'kh','Ц':'Ts','ц':'ts', 'Ч':'Ch','ч':'ch','Ш':'Sh','ш':'sh','Щ':'Sch','щ':'sch','Ъ':'_','ъ':'_', 'Ы':'Y','ы':'y','Ь':"_",'ь':"_",'Э':'E','э':'e','Ю':'Yu','ю':'yu', 'Я':'Ya','я':'ya', ' ':'-', ',':'_' }, r = '', k; for (k in L) r += k; r = new RegExp('[' + r + ']', 'g'); k = function(a){ return a in L ? L[a] : ''; }; return function(){ return this.replace(r, k); }; })(); затем переименовать функцию str2url в str2url_old и добавить сл. функцию: function str2url(str,encoding,ucfirst) { return str2url_old(str,encoding,ucfirst).translit(); } Все Link to comment Share on other sites More sharing options...
kafelby Posted May 27, 2013 Share Posted May 27, 2013 Другое решение: в admin.js добавить функцию: String.prototype.translit = (function(){ var L = { 'А':'A','а':'a','Б':'B','б':'b','В':'V','в':'v','Г':'G','г':'g', 'Д':'D','д':'d','Е':'E','е':'e','Ё':'Yo','ё':'yo','Ж':'Zh','ж':'zh', 'З':'Z','з':'z','И':'I','и':'i','Й':'Y','й':'y','К':'K','к':'k', 'Л':'L','л':'l','М':'M','м':'m','Н':'N','н':'n','О':'O','о':'o', 'П':'P','п':'p','Р':'R','р':'r','С':'S','с':'s','Т':'T','т':'t', 'У':'U','у':'u','Ф':'F','ф':'f','Х':'Kh','х':'kh','Ц':'Ts','ц':'ts', 'Ч':'Ch','ч':'ch','Ш':'Sh','ш':'sh','Щ':'Sch','щ':'sch','Ъ':'_','ъ':'_', 'Ы':'Y','ы':'y','Ь':"_",'ь':"_",'Э':'E','э':'e','Ю':'Yu','ю':'yu', 'Я':'Ya','я':'ya', ' ':'-', ',':'_' }, r = '', k; for (k in L) r += k; r = new RegExp('[' + r + ']', 'g'); k = function(a){ return a in L ? L[a] : ''; }; return function(){ return this.replace(r, k); }; })(); затем переименовать функцию str2url в str2url_old и добавить сл. функцию: function str2url(str,encoding,ucfirst) { return str2url_old(str,encoding,ucfirst).translit(); } Все Не работает на 1.5.4.1 Link to comment Share on other sites More sharing options...
absent Posted June 1, 2013 Share Posted June 1, 2013 у орса готовое решение в локализаторе) Link to comment Share on other sites More sharing options...
nextfriday Posted June 1, 2013 Share Posted June 1, 2013 Так кто-нибудь имеет представление о том, как сделать чтобы списки производителей, да и вообще все свойства и атрибуты, которые попадают в урл переводились в латиницу? Если нужно, то отблагодарю, если нужно то финансово. Link to comment Share on other sites More sharing options...
absent Posted June 2, 2013 Share Posted June 2, 2013 вот я предложил решение http://www.prestashop.com/forums/index.php?/topic/250023-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d1%81-%d1%87%d0%bf%d1%83-manufacturer/ Link to comment Share on other sites More sharing options...
Alex-on2 Posted August 13, 2013 Share Posted August 13, 2013 (edited) У меня Преста 1,5,4,1 описанный выше способ не работает - получаются киррилические урлы. В чем может быть дело? Символы в URL как-то связаны с языками в настройках админки? У меня там только русский. Edited August 13, 2013 by Alex-on2 (see edit history) Link to comment Share on other sites More sharing options...
absent Posted August 13, 2013 Share Posted August 13, 2013 У меня Преста 1,5,4,1 описанный выше способ не работает - получаются киррилические урлы. В чем может быть дело? Символы в URL как-то связаны с языками в настройках админки? У меня там только русский. Не связаны. И для корректной работы нужны ещё правки Link to comment Share on other sites More sharing options...
se007 Posted August 15, 2013 Share Posted August 15, 2013 Помогите мне пожалуйста .... ЧПУ ??? http://www.prestashop.com/forums/topic/250023-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D1%81-%D1%87%D0%BF%D1%83-manufacturer/page__st__20 Link to comment Share on other sites More sharing options...
se007 Posted August 16, 2013 Share Posted August 16, 2013 По ходу форум больше мертв чем жифф Link to comment Share on other sites More sharing options...
absent Posted August 16, 2013 Share Posted August 16, 2013 По ходу форум больше мертв чем жифф за вознаграждение настрою всё что связано с чпу и не только. Link to comment Share on other sites More sharing options...
sors Posted August 16, 2013 Share Posted August 16, 2013 В локализаторе все это уже есть. Link to comment Share on other sites More sharing options...
v3t3r Posted August 17, 2013 Share Posted August 17, 2013 (edited) Подскажите, пожалуйста, как поправить отображение символов вот таким образом? <a href="http://site.ru/153-ружья-для-подводной-охоты" title="">Ружья для подводной охоты</a> Ни локализатор, ни описанные выше способы, как я понимаю, не затрагивают проблемы и ума не приложу, как решить. Edited August 17, 2013 by v3t3r (see edit history) Link to comment Share on other sites More sharing options...
se007 Posted August 17, 2013 Share Posted August 17, 2013 за вознаграждение настрою всё что связано с чпу и не только. Сколько стоит ? В локализаторе все это уже есть. Я же обьяснил, локализатор скачал и что с ним дальше делать я не в курсе !!! (новичок) я ..... как поставить локализатор ?? Link to comment Share on other sites More sharing options...
absent Posted August 17, 2013 Share Posted August 17, 2013 Сколько стоит ? Я же обьяснил, локализатор скачал и что с ним дальше делать я не в курсе !!! (новичок) я ..... как поставить локализатор ?? Локализатор не исправит этого. тк тут модуль чпу без id а по цене в скайп. Link to comment Share on other sites More sharing options...
websprint Posted November 9, 2013 Share Posted November 9, 2013 Не работает на 1.5.4.1 http://www.prestashop.com/forums/topic/250023-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D1%81-%D1%87%D0%BF%D1%83-manufacturer/ Метод от Absent на 100% работает! (presta 1.5.6) Чтоб ссылки не были битыми и не было 404 ошибки - надо после дописки в tools.php зайти в настройку модуля многоуровневой навигации и переиндексить всё и будет всем счастье! Ура, заработало!!! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now