Преобразование точки в ничто |
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
При создании entry через CP настроено что бы русские буквы преобразовывались в английские.
Все работает через foreign_chars.php и строки вида
'1071' => "ya", // Я
Типа - utf код -> англ сочетание текста
Пробовал преобразовывать точку в ничто, но преобразование не работает
'46' => "", // full stop to "" (.)
Есть у кого нибуть какие то идеи ?
UPD: и еще я не понимаю -
к примеру я меняю строку
'1071' => "ya", // Я
на
'1071' => "test",
CM Nice URL выключен
Но в CP все равно Я преобразовывается в “ya”, а не в “test”
UPD2: ага.. тут просто все символы преобразовываются в нижний регистра, и нужно было описать что бы маленькая Я преобразовалась в “test”
|
|
|
|
|
|
Студент
Всего сообщений: 113
Зарегистрирован 2010-08-30
|
Если я не ошибаюсь, нужно править js, который формирует url в cp.
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
В каком смысле править ?
Я смотрел как то js - он формируется корректно, т.е. в него добавляется инфа о том что нужно из 46 кода символа делать ничто.
Может я ошибаюсь, и точка это не “FULL STOP” ?
|
|
|
|
|
|
Студент
Всего сообщений: 113
Зарегистрирован 2010-08-30
|
Версия 1.6.9
Нужно провить js скрипт в cp.
Который формирует из кириллицы урл и вставляет в инпут, далее вы его сабмитите.
Обрезал скрипт из-за того что лимит сообщения.
function liveUrlTitle() { var defaultTitle = ''; var NewText = document.getElementById("title").value; if (defaultTitle != '') { if (NewText.substr(0, defaultTitle.length) == defaultTitle) { NewText = NewText.substr(defaultTitle.length); } } NewText = NewText.toLowerCase(); var separator = "_"; // Foreign Character Attempt var NewTextTemp = ''; for(var pos=0; pos<NewText.length; pos++) { var c = NewText.charCodeAt(pos); if (c >= 32 && c < 128) { NewTextTemp += NewText.charAt(pos); } else { if (c == '162') {NewTextTemp += 'cent'; continue;} if (c == '163') {NewTextTemp += 'pound'; continue;}
if (c == '1048') {NewTextTemp += 'i'; continue;} if (c == '1049') {NewTextTemp += 'j'; continue;} if (c == '1050') {NewTextTemp += 'k'; continue;} if (c == '1051') {NewTextTemp += 'l'; continue;} if (c == '1052') {NewTextTemp += 'm'; continue;} if (c == '1053') {NewTextTemp += 'n'; continue;} if (c == '1054') {NewTextTemp += 'o'; continue;} if (c == '1055') {NewTextTemp += 'p'; continue;} if (c == '1056') {NewTextTemp += 'r'; continue;} if (c == '1057') {NewTextTemp += 's'; continue;} if (c == '1058') {NewTextTemp += 't'; continue;} if (c == '1059') {NewTextTemp += 'u'; continue;} if (c == '1060') {NewTextTemp += 'f'; continue;} if (c == '1061') {NewTextTemp += 'h'; continue;} if (c == '1062') {NewTextTemp += 'c'; continue;} if (c == '1063') {NewTextTemp += 'ch'; continue;} if (c == '1064') {NewTextTemp += 'sh'; continue;} if (c == '1065') {NewTextTemp += 'sch'; continue;} if (c == '1067') {NewTextTemp += 'y'; continue;} if (c == '1069') {NewTextTemp += 'e'; continue;} if (c == '1070') {NewTextTemp += 'yu'; continue;} if (c == '1071') {NewTextTemp += 'ya'; continue;} } } var multiReg = new RegExp(separator + '{2,}', 'g'); NewText = NewTextTemp; NewText = NewText.replace('/<(.*?)>/g', ''); NewText = NewText.replace(/\s+/g, separator); NewText = NewText.replace(/\//g, separator); NewText = NewText.replace(/[^a-z0-9\-\._]/g,''); NewText = NewText.replace(/\+/g, separator); NewText = NewText.replace(multiReg, separator); NewText = NewText.replace(/-$/g,''); NewText = NewText.replace(/_$/g,''); NewText = NewText.replace(/^_/g,''); NewText = NewText.replace(/^-/g,''); NewText = NewText.replace(/\.+$/g,''); if (document.getElementById("url_title")) { document.getElementById("url_title").value = "" + NewText; } else { document.forms['entryform'].elements['url_title'].value = "" + NewText; } }
|
|
|
|
|
|
Member
Всего сообщений: 224
Зарегистрирован 2010-11-20
|
Если тема url_title-интерпретации актульна - присмотритесь к расширению от Caleydon Media:
http://caleydon.com/projekt/cm-strange-url-interpreter/
Под первой линейкой работает превосходно!
Под двойку, если есть у кого время - сделайте порт.
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
2assessor: попробуй, отпишусь
2Afgan: не знаю как в 1.х , но в 2.х по идее не требуется никаких подобных модулей, т.к. существует foreign_chars.php который выполняет работу таких модулей.
|
|
|
|
|
|
Member
Всего сообщений: 224
Зарегистрирован 2010-11-20
|
MaxStoun, а вы посмотрите на содержимое конфига $foreign_characters
и сравните с $character_set функции функции char_conversion()
вышеупомянутого расширения...
Да возьмите то, что болше подходит, а остальное - долой!
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
2assessor: а можешь подсказать - в ЕЕ 1.х если зайти в браузере в “Исходный код HTML” для страницы на которой работает автозамена букв - то в исходном HTML есть функция liveUrlTitle ?
в 2.х такая функция описана в mod.channel.standalone , но я не уверен что это именно та функция что мне нужно
пробовал добавить в нее
alert("some test");
но окошко алерта не появляется ( т.е. функция не вызывается)
там вообще есть проверка типа
if char_code > 32 and char_code < 128 оставляем как есть else используем foreign_chars endif
т.е. точка попадает в этот промежуток, и поэтому не обрабатывается , скорее всего
но я не могй найти именно тот код который отвечает за CP
|
|
|
|
|
|
Студент
Всего сообщений: 113
Зарегистрирован 2010-08-30
|
MaxStoun - 20 Май 2011 04:47 P.M. 2assessor: а можешь подсказать - в ЕЕ 1.х если зайти в браузере в “Исходный код HTML” для страницы на которой работает автозамена букв - то в исходном HTML есть функция liveUrlTitle ?
но я не могй найти именно тот код который отвечает за CP
Да js-функция есть.
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
Ок, спасибо.
Я нашел обявление функции
В /themes/javascript/compressed/cp/publish.js
Все работает ) (я изменил условия if, добавив && c!=46)
Спасибо
|
|
|
|
|
|
Студент
Всего сообщений: 87
Зарегистрирован 2012-01-06
|
MaxStoun - 20 Май 2011 05:21 P.M. Ок, спасибо.
Я нашел обявление функции
В /themes/javascript/compressed/cp/publish.js
Все работает ) (я изменил условия if, добавив && c!=46)
Спасибо
подскажите пожалуст как файл правили?
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
Если я правильно помню
в указанном файле publish.js есть
function liveUrlTitle()
в ней есть код вида
if(m>=32&&m<128)o+=b.charAt(c);else if(m in EE.publish.foreignChars)o+=EE.publish.foreignChars[m]
модифицирова код, доравив проверку что && m!= 46
if(m>=32&&m<128)o+=b.charAt(c);else if(m in EE.publish.foreignChars)o+=EE.publish.foreignChars[m]
по идее m - это код символа в ASCII (или в какой то другой кодировке, я не совсем помню. мб это UTF)
46 - код символа ТОЧКА
т.е. в publish.js стоит проверка, что если это спецсимвол (коды от 32 до 128), то заменять его не нужно
я добавил проверку что: “это спецсимвол, но не точка (код не равен 46)”
|
|
|
|
|
|
Студент
Всего сообщений: 87
Зарегистрирован 2012-01-06
|
блин, чет я такой проверки не нахожу(:
P.S. (ЕЕ 2.3.0)
|
|
|
|
|
|
Студент
Всего сообщений: 131
Зарегистрирован 2010-12-14
|
если я правильно думаю (я не проверял), то указанная проверка вынесена в
\themes\javascript\compressed\jquery\plugins\ee_url_title.js
попробуйте поискать по тексту всех файлов, где встречается “128”
|
|
|
|
|
|
Студент
Всего сообщений: 87
Зарегистрирован 2012-01-06
|
вот я лошара..
огромное спасибо.
|
|
|
|