|
|
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
Зарегистрирован: 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
Зарегистрирован: 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
Зарегистрирован: 2008-07-15
Сообщений: 666
|
Кстати, неплохо было бы еще и проверять на уникальность кейворд
|
|
|
16.01.2012, 03:58
|
|
Гость
Гость
|
при изменение объекта ключевое слово меняется на буквы nnn, nmn и тд.
|