|
Glad
Guest
|
 |
« on: 15 May 2007, 09:59 » |
|
Добрый день!
Когда я создаю новый контент с русским именем, в поле Alias (имя URL) по-умолчанию пишется какая-то хрень. Но на demo-сайте когда я пытаюсь сохранить такой контент, мне выдается сообщение, что алиас может состоять только из букв и цифр. А на моем сайте, куда я поставил последнюю (1.0.6) версию CMSMS с пакетом русификации и Альбомом 0.9.1 почему-то сообщение об ошибке не появляется, эта хрень пишется в базу. В итоге получается, что в тексте меню сайта написана какая-то хрень и вся разметка съезжает.
Может быть, кто-нибудь знает, почему так случается?
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #1 on: 15 May 2007, 10:08 » |
|
Сколько раз ты употребил слово "хрень" в своём сообщении? Покури http://wiki.cmsmadesimple.org/index.php/FAQ/Installation/Cyrillic_Support - только теперь надо 1) немного подправить под последнюю версию CMSMS 2) класс Convert упразднили, скачай версию 0.13 и выцепи его оттуда Будет полноценный автоалиасинг транслитом =)
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
ofrost
Forum Members

Karma: 0
Offline
Posts: 41
|
 |
« Reply #2 on: 21 May 2007, 05:46 » |
|
2) класс Convert упразднили, скачай версию 0.13 и выцепи его оттуда
можно об этом подробнее.
Я сделал всё как написано в статье, но результат был не тот. Алиасы транслитом не пишет.
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #3 on: 23 May 2007, 00:52 » |
|
Я же говорю, к последней версии статья подходит лишь с некоторыми изменениями. Но идея верная, так что если в PHP соображаешь, то отладишь за полчаса. Если нет, то тогда, собственно, найми кого-нибудь, кто соображает, у меня, к сожалению, нет времени сейчас. Я тестировал недели две назад с предпоследней, пришлось поправить IF.
Про Convert - я по-моему, сказал достаточно конкретно - берешь старый дистрибутив - они все есть на форже, распаковываешь, и копируешь из lib класс Convert в новый дистрибутив.
Летом обновлю так, чтобы работало с последней версией.
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
Sonya
Power Poster
 
Karma: 23
Offline
Posts: 823
Russian minded, German located
|
 |
« Reply #4 on: 07 Sep 2007, 15:39 » |
|
Чтобы не долбиться с изменениями в коде и подгрузкой библиотек, я сделала так: 1. Сгрузила транслит библиотеку и скопировала в /lib 2. Потом создала тег пользователя global $gCms; require_once($_SERVER['DOCUMENT_ROOT']."/lib/translit.php"); $alias = $params['content']->mMenuText; $alias = iconv('UTF-8', 'ISO-8859-5',$alias); $alias = convert_cyr_string($alias, 'i','w'); $alias = Translit::UrlTranslit($alias); $params['content']->mAlias = $alias; 3. Вставила его в менеджере событий в ContentEditPre
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #5 on: 08 Sep 2007, 16:03 » |
|
Ого! Вот это мудрое и красивое решение с использованием системы событий, которой не было для старых версий, для которых я писал этот тег. Можешь добавить в Вики? Только я вот чего думаю... надо бы там if дополнительный поставить, типа if (empty($params['content']->mAlias)) $params['content']->mAlias = $alias; А то иначе он всегда, наверное, будет перегенерировать алиасы транслитом при каждом сохранении страницы и если тебе какой-нибудь вдруг не понравится и ты решишь его исправить вручную -- уже не получится.
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
Sonya
Power Poster
 
Karma: 23
Offline
Posts: 823
Russian minded, German located
|
 |
« Reply #6 on: 08 Sep 2007, 16:16 » |
|
Можешь добавить в Вики?
Не знаю  Еще не пользовалась. А то иначе он всегда, наверное, будет перегенерировать алиасы транслитом при каждом сохранении страницы и если тебе какой-нибудь вдруг не понравится и ты решишь его исправить вручную -- уже не получится.
Не получится  Но там есть такая фишка, если mAlias пустой, то он берет mAliasOld и заменяет его еще до события, то есть по сути - пустой алиас туда уже не приходит. Надо посмотреть, как это можно обойти.
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #7 on: 10 Sep 2007, 03:06 » |
|
А что там в mAliasOld  ? Может специфичную проверку сделать какую-то...
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
Sonya
Power Poster
 
Karma: 23
Offline
Posts: 823
Russian minded, German located
|
 |
« Reply #8 on: 10 Sep 2007, 12:04 » |
|
Как я поняла там такая система, если страница новая, то Alias берется из Заголовка, если же страница редактируется и при этом убирается Alias (чтобы новый сгенерировать), то там подгружается mOldAlias, то есть где-то закешированный или из базы данных старый и берется по умолчанию, что вообщем-то не только для функции транслита неудобно, но вообще как-то не очень путево сделано. Я пока обошла проблему негениально  Поставила в if сравнение 'translit'. Когда я хочу транслитерацию, то задаю в поле алиас 'translit', тогда она делается моим тегом, если же в поле что-то отличное от 'translit', то тег ничего не делает.
|
|
|
|
|
Logged
|
|
|
|
Sonya
Power Poster
 
Karma: 23
Offline
Posts: 823
Russian minded, German located
|
 |
« Reply #9 on: 29 Sep 2007, 15:13 » |
|
Нашла один баг в своем решении - заглавные буквы "проглатывались". Теперь сделала так: global $gCms; function cyr_strtolower($a) { $offset=32; $m=array(); for($i=192;$i<224;$i++)$m[chr($i)]=chr($i+$offset); return strtr($a,$m); } if (empty($params['content']->mAlias) || $params['content']->mAlias=='translit') { require_once($_SERVER['DOCUMENT_ROOT']."/lib/translit.php"); $alias = $params['content']->mMenuText; $alias = iconv('UTF-8', 'ISO-8859-5',$alias); $alias = convert_cyr_string($alias, 'i','w'); $alias = Translit::UrlTranslit(cyr_strtolower($alias)); $params['content']->mAlias = $alias;} Если нужно делать транслит, то пишу в поле alias "translit" - тогда транслитируется, при всех других значениях берет то, что есть 
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #10 on: 06 Oct 2007, 14:45 » |
|
Вот, кстати, у меня тоже они вроде проглатывались, только я так и не сообразил в чем-же причина...
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
hext0r
New Member
Karma: 0
Offline
Posts: 1
|
 |
« Reply #11 on: 10 Dec 2007, 08:26 » |
|
Нашла один баг в своем решении - заглавные буквы "проглатывались". Теперь сделала так: ...
спасибо, заработало!
|
|
|
|
|
Logged
|
|
|
|
Sonya
Power Poster
 
Karma: 23
Offline
Posts: 823
Russian minded, German located
|
 |
« Reply #12 on: 02 Jun 2008, 04:29 » |
|
Вот последняя версия тега. При создании новой страницы транслит делается автоматически. Если же нужно сделать translit уже существующего alias, то в поле alias нужно задать translit. if (empty($params['content']->mOldAlias) # new page || $params['content']->mAlias == 'translit' ) { global $gCms; function cyr_strtolower($a) { $offset=32; $m=array(); for($i=192;$i<224;$i++)$m[chr($i)]=chr($i+$offset); return strtr($a,$m); }
require_once($_SERVER['DOCUMENT_ROOT']."/lib/translit.php"); $alias = $params['content']->mMenuText; $alias = iconv('UTF-8', 'ISO-8859-5',$alias); $alias = convert_cyr_string($alias, 'i','w'); $alias = Translit::UrlTranslit(cyr_strtolower($alias)); $params['content']->mAlias = $alias; }
|
|
|
|
« Last Edit: 08 Sep 2008, 03:58 by Sonya »
|
Logged
|
|
|
|
Il_Burbero
Forum Members

Karma: 3
Offline
Posts: 127
|
 |
« Reply #13 on: 02 Jul 2008, 08:29 » |
|
Нельзя ли положить класс куда нибудь в доступное место? Сайт автора че то недоступен 
|
|
|
|
|
Logged
|
|
|
|
ZYV
Moderator
Power Poster
   
Karma: 8
Offline
Posts: 868
|
 |
« Reply #14 on: 02 Jul 2008, 09:24 » |
|
Хорошее сегодня настроение - http://zaytsev.net/misc/translit/ - хотя мог бы сам найти.
|
|
|
|
|
Logged
|
unsigned double ZYV;
|
|
|
|