Искать  
 
   
 
Преобразование точки в ничто
Отправлено: 19 Май 2011 04:38 P.M.   [ Игнорировать ]
Студент
RankRank
Всего сообщений:  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”

Профиль
 
 
Отправлено: 19 Май 2011 07:47 P.M.   [ Игнорировать ]   [ # 1 ]
Студент
Avatar
RankRank
Всего сообщений:  113
Зарегистрирован  2010-08-30

Если я не ошибаюсь, нужно править js, который формирует url в cp.

Профиль
 
 
Отправлено: 19 Май 2011 07:51 P.M.   [ Игнорировать ]   [ # 2 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

В каком смысле править ?
Я смотрел как то js - он формируется корректно, т.е. в него добавляется инфа о том что нужно из 46 кода символа делать ничто.
Может я ошибаюсь, и точка это не “FULL STOP” ?

Профиль
 
 
Отправлено: 19 Май 2011 08:18 P.M.   [ Игнорировать ]   [ # 3 ]
Студент
Avatar
RankRank
Всего сообщений:  113
Зарегистрирован  2010-08-30

Версия 1.6.9
Нужно провить js скрипт в cp.
Который формирует из кириллицы урл и вставляет в инпут, далее вы его сабмитите.
Обрезал скрипт из-за того что лимит сообщения.

function liveUrlTitle()
        
{
            
var defaultTitle '';
            var 
NewText document.getElementById("title").value;
            
            if (
defaultTitle != '')
            
{
                
if (NewText.substr(0defaultTitle.length) == defaultTitle)
                
{
                    NewText 
NewText.substr(defaultTitle.length);
                
}    
            }
            
            NewText 
NewText.toLowerCase();
            var 
separator "_";
                
            
// Foreign Character Attempt
            
            
var NewTextTemp '';
            for(var 
pos=0pos<NewText.lengthpos++)
            
{
                
var NewText.charCodeAt(pos);
                
                if (
>= 32 && 128)
                
{
                    NewTextTemp 
+= NewText.charAt(pos);
                
}
                
else
                
{
                    
if (== '162'{NewTextTemp += 'cent'; continue;}
                
if (== '163'{NewTextTemp += 'pound'; continue;}

                
if (== '1048'{NewTextTemp += 'i'; continue;}
                
if (== '1049'{NewTextTemp += 'j'; continue;}
                
if (== '1050'{NewTextTemp += 'k'; continue;}
                
if (== '1051'{NewTextTemp += 'l'; continue;}
                
if (== '1052'{NewTextTemp += 'm'; continue;}
                
if (== '1053'{NewTextTemp += 'n'; continue;}
                
if (== '1054'{NewTextTemp += 'o'; continue;}
                
if (== '1055'{NewTextTemp += 'p'; continue;}
                
if (== '1056'{NewTextTemp += 'r'; continue;}
                
if (== '1057'{NewTextTemp += 's'; continue;}
                
if (== '1058'{NewTextTemp += 't'; continue;}
                
if (== '1059'{NewTextTemp += 'u'; continue;}
                
if (== '1060'{NewTextTemp += 'f'; continue;}
                
if (== '1061'{NewTextTemp += 'h'; continue;}
                
if (== '1062'{NewTextTemp += 'c'; continue;}
                
if (== '1063'{NewTextTemp += 'ch'; continue;}
                
if (== '1064'{NewTextTemp += 'sh'; continue;}
                
if (== '1065'{NewTextTemp += 'sch'; continue;}
                
if (== '1067'{NewTextTemp += 'y'; continue;}
                
if (== '1069'{NewTextTemp += 'e'; continue;}
                
if (== '1070'{NewTextTemp += 'yu'; continue;}
                
if (== '1071'{NewTextTemp += 'ya'; continue;}
                
                }
            }
            
            
var multiReg = new RegExp(separator '{2,}''g');
            
            
NewText NewTextTemp;
            
            
NewText NewText.replace('/<(.*?)>/g''');
            
NewText NewText.replace(/\s+/gseparator);
            
NewText NewText.replace(/\//g, separator);
            
NewText NewText.replace(/[^a-z0-9\-\._]/g,'');
            
NewText NewText.replace(/\+/gseparator);
            
NewText NewText.replace(multiRegseparator);
            
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
            
}        
        } 
Профиль
 
 
Отправлено: 19 Май 2011 10:16 P.M.   [ Игнорировать ]   [ # 4 ]
Member
Avatar
RankRankRank
Всего сообщений:  224
Зарегистрирован  2010-11-20

Если тема url_title-интерпретации актульна - присмотритесь к расширению от Caleydon Media:

http://caleydon.com/projekt/cm-strange-url-interpreter/

Под первой линейкой работает превосходно!

Под двойку, если есть у кого время - сделайте порт.

Профиль
 
 
Отправлено: 19 Май 2011 10:21 P.M.   [ Игнорировать ]   [ # 5 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

2assessor: попробуй, отпишусь
2Afgan: не знаю как в 1.х , но в 2.х по идее не требуется никаких подобных модулей, т.к. существует foreign_chars.php который выполняет работу таких модулей.

Профиль
 
 
Отправлено: 19 Май 2011 10:34 P.M.   [ Игнорировать ]   [ # 6 ]
Member
Avatar
RankRankRank
Всего сообщений:  224
Зарегистрирован  2010-11-20

MaxStoun, а вы посмотрите на содержимое конфига $foreign_characters

и сравните с $character_set функции функции char_conversion()

вышеупомянутого расширения...

Да возьмите то, что болше подходит, а остальное - долой!

Профиль
 
 
Отправлено: 20 Май 2011 04:47 P.M.   [ Игнорировать ]   [ # 7 ]
Студент
RankRank
Всего сообщений:  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

Профиль
 
 
Отправлено: 20 Май 2011 05:09 P.M.   [ Игнорировать ]   [ # 8 ]
Студент
Avatar
RankRank
Всего сообщений:  113
Зарегистрирован  2010-08-30
MaxStoun - 20 Май 2011 04:47 P.M.

2assessor: а можешь подсказать - в ЕЕ 1.х если зайти в браузере в “Исходный код HTML” для страницы на которой работает автозамена букв - то в исходном HTML есть функция liveUrlTitle ?
но я не могй найти именно тот код который отвечает за CP

Да js-функция есть.

Профиль
 
 
Отправлено: 20 Май 2011 05:21 P.M.   [ Игнорировать ]   [ # 9 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

Ок, спасибо.
Я нашел обявление функции
В /themes/javascript/compressed/cp/publish.js
Все работает ) (я изменил условия if, добавив && c!=46)
Спасибо

Профиль
 
 
Отправлено: 12 Март 2012 06:41 P.M.   [ Игнорировать ]   [ # 10 ]
Студент
Avatar
RankRank
Всего сообщений:  87
Зарегистрирован  2012-01-06
MaxStoun - 20 Май 2011 05:21 P.M.

Ок, спасибо.
Я нашел обявление функции
В /themes/javascript/compressed/cp/publish.js
Все работает ) (я изменил условия if, добавив && c!=46)
Спасибо

подскажите пожалуст как файл правили?

Профиль
 
 
Отправлено: 13 Март 2012 12:07 A.M.   [ Игнорировать ]   [ # 11 ]
Студент
RankRank
Всего сообщений:  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)”

Профиль
 
 
Отправлено: 13 Март 2012 09:46 A.M.   [ Игнорировать ]   [ # 12 ]
Студент
Avatar
RankRank
Всего сообщений:  87
Зарегистрирован  2012-01-06

блин, чет я такой проверки не нахожу(:
P.S. (ЕЕ 2.3.0)

Профиль
 
 
Отправлено: 14 Март 2012 01:22 A.M.   [ Игнорировать ]   [ # 13 ]
Студент
RankRank
Всего сообщений:  131
Зарегистрирован  2010-12-14

если я правильно думаю (я не проверял), то указанная проверка вынесена в
\themes\javascript\compressed\jquery\plugins\ee_url_title.js

попробуйте поискать по тексту всех файлов, где встречается “128”

Профиль
 
 
Отправлено: 14 Март 2012 09:33 A.M.   [ Игнорировать ]   [ # 14 ]
Студент
Avatar
RankRank
Всего сообщений:  87
Зарегистрирован  2012-01-06

вот я лошара..
огромное спасибо.

Профиль