Регистрация
Вход через соцсети
Восстановление пароля

Автоматическая транскрипция названия в ключевое слово для объектов

Новый топик
Страницы: 1  |  2
13.01.2012, 16:59
Ответить | Цитировать
Гость
Гость

Нашел вот такой код на фрилансе

Нужно добавить компонент в Действия после добавления следующий код:
";
$kw =$f_Title;
$kw =strtr($kw, "абвгдеёзийклмнопрстуфхыэ№", "abvgdeeziyklmnoprstufhien");
$kw =strtr($kw, "АБВГДЕЁЗИЙКЛМНОПРСТУФХЫЭ", "abvgdeeziyklmnoprstufhie");
$kw =strtr($kw, array(" "=>"-", "-"=>"", "'"=>"", "."=>"", ","=>"", ":"=>"", "+"=>"", "="=>"", "("=>"", ")"=>"", ";"=>"", "%"=>"", "&"=>"", "?"=>"", ">"=>"", "<"=>"", "#"=>"", "@"=>"", "$"=>"", "!"=>"", "*"=>"", "^"=>"", "&"=>"", "№"=>"", "["=>"", "]"=>"", "{"=>"", "}"=>""));
$kw =strtr($kw, array("«"=>"", "»"=>"", "’"=>"", "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "ъ"=>"", "щ"=>"shch","ь" =>"", "ю"=>"yu", "я"=>"ya","Ж" =>"zh", "Ц"=>"ts", "Ч"=>"ch", "Ш"=>"sh", "Щ"=>"shch","Ь" =>"", "Ю"=>"yu", "Я"=>"ya","ї" =>"i", "Ї"=>"yi", "є"=>"ie", "Є"=>"ye"));
$kw =strip_tags($kw);
$result =mysql_query("UPDATE Message".$classID." SET Keyword ='".$kw."' WHERE Message_ID=".$msgID);
echo "

Естественно поле $f_Title заменить на свое поле компонента которое надо транслить в кейвордс.

Почему то не работает, может кто объяснить?
13.01.2012, 17:25
Ответить | Цитировать
ev009

Зарегистрирован:
2010-05-25
Сообщений: 60

и за одно угадать что не работает, угадал?
в неткат есть функция
nc_transliterate($text)
и не совсем понятно вот это место
WHERE Message_ID=".$msgID
обычно пишут
WHERE Message_ID=".$message
во всяком случае $message индентификатор текущей записи
13.01.2012, 18:10
Ответить | Цитировать
Гость
Гость

nc_transliterate($text) а где подробнее можно прочитать? хотелось бы сделать чтобы после добавления продукта ссылка автоматически внос в ключевое слово!
13.01.2012, 21:29
Ответить | Цитировать
resident
Веб-группа «Дабл Ю»

Зарегистрирован:
2005-01-10
Сообщений: 336

nc_transliterate не подходит для данной задачи, нужно еще пробелы заменять
подробнее можно прочитать в документации

есть такой вариант:
<input name='f_Title' type='text' maxlength='255' size='50' value='$f_Title' onkeyup='document.getElementsByName(\"f_Keyword\")[0].value=translit(this.value);'>


var rusChars = new Array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','\я',' ');
var transChars = new Array('a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','shch','','y','','e','yu','ya','a','b','v','g','d','e','yo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','shch','','y','','e','yu','ya','-');

Код:
function translit(from){
var to = new String();
var len = from.length;
var character, isRus;
for(i=0; i < len; i++){
character = from.charAt(i,1);
isRus = false;
for(j=0; j < rusChars.length; j++){
if(character == rusChars[j]){
isRus = true;
break;
}
}
to += (isRus) ? transChars[j] : character;
}
return to;
}
13.01.2012, 21:29
Ответить | Цитировать
Denis
Denis

Зарегистрирован:
2008-07-15
Сообщений: 666

Попробуйте так:
Код:
";
$keyword = $db->escape(nc_transliterate($f_Title));
$db->query("UPDATE `Message".$classID."` SET Keyword ='".$keyword."' WHERE `Message_ID`=".$message);
$db->debug(); // убрать, если все верно
echo "


Ксю доставляет...
13.01.2012, 21:31
Ответить | Цитировать
Denis
Denis

Зарегистрирован:
2008-07-15
Сообщений: 666

Но надо учитывать, что напрямую f_Keyword могут задавать только администраторы

Ксю доставляет...
14.01.2012, 14:30
Ответить | Цитировать
Гость
Гость

Цитата:
Попробуйте так:
Код:
";
$keyword = $db->escape(nc_transliterate($f_Title));
$db->query("UPDATE `Message".$classID."` SET Keyword ='".$keyword."' WHERE `Message_ID`=".$message);
$db->debug(); // убрать, если все верно
echo "


все нормально, вот только пробелы не заменяются -nazvanie%20razdela.html, переход по этой ссылки грозит: страница не найдена
14.01.2012, 18:43
Ответить | Цитировать
ev009

Зарегистрирован:
2010-05-25
Сообщений: 60

Условия добавления объекта:
Код:
$f_Keyword = preg_replace('~[^-a-z0-9а-яА-ЯA-Z_]+~u', '-', $f_head);
$f_Keyword = trim($f_Keyword, "-");
$f_Keyword=nc_transliterate($f_Keyword); //транслитерацию не тестировал использую русские урлы в которых буква ё вызывать может ошибку в таком случае


$f_head строка из которой все это городится
код из реально работающего проекта

Условия добавления объекта (сгенерировать код условия):

if(!$f_head) {
$posting = 0;
#information text
$warnText = NETCAT_MODERATION_INFO_REQFIELDS;
}
else
{
$f_Keyword=str_replace("ё","е",$f_head);//ё на е меняем
$f_Keyword = preg_replace('~[^-a-z0-9а-яА-ЯA-Z_]+~u', '-', $f_Keyword); // все что не нужно меняем на -
$f_Keyword = trim($f_Keyword, "-"); // убираем в начале и в конце -

}
все работает,
ЛИРИЧЕСКОЕ ОТСТУПЛЕНИЕ:
кроме пробелом еще куча знаков не нужных может быть, о которых мы можем ничего не знать, поэтому используем только то, что точно можно использовать.
А функция транслитерации предназначена для… транслитерации, а не для адаптации url :-)
15.01.2012, 20:15
Ответить | Цитировать
Гость
Гость

$f_Keyword=str_replace("ё","е",$f_Name);
$f_Keyword = preg_replace('~[^-a-z0-9а-яА-ЯA-Z_]+~u', '-', $f_Keyword);
$f_Keyword = trim($f_Keyword, "-");
русский урл
и

$f_Keyword = preg_replace('~[^-a-z0-9а-яА-ЯA-Z_]+~u', '-', $f_Name);
$f_Keyword = trim($f_Keyword, "-");
$f_Keyword=nc_transliterate($f_Keyword);
с использованием транскрипции

но в любом случае после изменения получается: nhn
добавил в изменение тож самое
15.01.2012, 22:05
Ответить | Цитировать
Denis
Denis

Зарегистрирован:
2008-07-15
Сообщений: 666

Кстати, неплохо было бы еще и проверять на уникальность кейворд

Ксю доставляет...
16.01.2012, 03:58
Ответить | Цитировать
Гость
Гость

при изменение объекта ключевое слово меняется на буквы nnn, nmn и тд.
198 196 2012-01-16 16:43:17 11817
Страницы: 1  |  2
Описание проекта