• twitter image
  • facebook image
  • youtube image
  • linkedin image
Language: CMS made Simple Czech Site Zur deutschsprachigen Supportseite Site francophone Sitio en Castellano CMSMS - Magyarország CMSMS -  ???????
Pages: [1] 2 3
  Print  
Author Topic: Проблема с Alias  (Read 20355 times)
0 Members and 1 Guest are viewing this topic.
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 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 Offline

Posts: 41


« Reply #2 on: 21 May 2007, 05:46 »

2) класс Convert упразднили, скачай версию 0.13  и выцепи его оттуда

можно об этом подробнее.

Я сделал всё как написано в статье, но результат был не тот. Алиасы транслитом не пишет.
Logged
ZYV
Moderator
Power Poster
*****

Karma: 8
Offline 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 Offline

Posts: 823


Russian minded, German located


WWW
« Reply #4 on: 07 Sep 2007, 15:39 »

Чтобы не долбиться с изменениями в коде и подгрузкой библиотек, я сделала так:

1. Сгрузила транслит библиотеку и скопировала в /lib
2. Потом создала тег пользователя
Code:
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 Offline

Posts: 868


« Reply #5 on: 08 Sep 2007, 16:03 »

Ого! Вот это мудрое и красивое решение с использованием системы событий, которой не было для старых версий, для которых я писал этот тег. Можешь добавить в Вики?

Только я вот чего думаю... надо бы там if дополнительный поставить, типа

Code:
if (empty($params['content']->mAlias)) $params['content']->mAlias = $alias;

А то иначе он всегда, наверное, будет перегенерировать алиасы транслитом при каждом сохранении страницы и если тебе какой-нибудь вдруг не понравится и ты решишь его исправить вручную -- уже не получится.
Logged

unsigned double ZYV;
Sonya
Power Poster
***

Karma: 23
Offline Offline

Posts: 823


Russian minded, German located


WWW
« Reply #6 on: 08 Sep 2007, 16:16 »

Можешь добавить в Вики?

Не знаю  Smiley Еще не пользовалась.

А то иначе он всегда, наверное, будет перегенерировать алиасы транслитом при каждом сохранении страницы и если тебе какой-нибудь вдруг не понравится и ты решишь его исправить вручную -- уже не получится.

Не получится Smiley Но там есть такая фишка, если mAlias пустой, то он берет mAliasOld и заменяет его еще до события, то есть по сути - пустой алиас туда уже не приходит. Надо посмотреть, как это можно обойти.
Logged

ZYV
Moderator
Power Poster
*****

Karma: 8
Offline Offline

Posts: 868


« Reply #7 on: 10 Sep 2007, 03:06 »

А что там в mAliasOld Smiley ? Может специфичную проверку сделать какую-то...
Logged

unsigned double ZYV;
Sonya
Power Poster
***

Karma: 23
Offline Offline

Posts: 823


Russian minded, German located


WWW
« Reply #8 on: 10 Sep 2007, 12:04 »

Как я поняла там такая система, если страница новая, то Alias берется из Заголовка, если же страница редактируется и при этом убирается Alias (чтобы новый сгенерировать), то там подгружается mOldAlias, то есть где-то закешированный или из базы данных старый и берется по умолчанию, что вообщем-то не только для функции транслита неудобно, но вообще как-то не очень путево сделано.

Я пока обошла проблему негениально Smiley Поставила в if сравнение 'translit'. Когда я хочу транслитерацию, то задаю в поле алиас 'translit', тогда она делается моим тегом, если же в поле что-то отличное от 'translit', то тег ничего не делает.
Logged

Sonya
Power Poster
***

Karma: 23
Offline Offline

Posts: 823


Russian minded, German located


WWW
« Reply #9 on: 29 Sep 2007, 15:13 »

Нашла один баг в своем решении - заглавные буквы "проглатывались". Теперь сделала так:

Code:
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"  - тогда транслитируется, при всех других значениях берет то, что есть Smiley
Logged

ZYV
Moderator
Power Poster
*****

Karma: 8
Offline Offline

Posts: 868


« Reply #10 on: 06 Oct 2007, 14:45 »

Вот, кстати, у меня тоже они вроде проглатывались, только я так и не сообразил в чем-же причина...
Logged

unsigned double ZYV;
hext0r
New Member


Karma: 0
Offline Offline

Posts: 1



WWW
« Reply #11 on: 10 Dec 2007, 08:26 »

Нашла один баг в своем решении - заглавные буквы "проглатывались". Теперь сделала так:
...

спасибо, заработало!
Logged

Транслит спасёт вас!
Sonya
Power Poster
***

Karma: 23
Offline Offline

Posts: 823


Russian minded, German located


WWW
« Reply #12 on: 02 Jun 2008, 04:29 »

Вот последняя версия тега. При создании новой страницы транслит делается автоматически. Если же нужно сделать translit уже существующего alias, то в поле alias нужно задать translit.

Code:
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 Offline

Posts: 127



WWW
« Reply #13 on: 02 Jul 2008, 08:29 »

Нельзя ли положить класс куда нибудь в доступное место? Сайт автора че то недоступен Cry
Logged
ZYV
Moderator
Power Poster
*****

Karma: 8
Offline Offline

Posts: 868


« Reply #14 on: 02 Jul 2008, 09:24 »

Хорошее сегодня настроение - http://zaytsev.net/misc/translit/ - хотя мог бы сам найти.
Logged

unsigned double ZYV;
Pages: [1] 2 3
  Print  
 
Jump to: