• twitter image
  • facebook image
  • youtube image
  • linkedin image
Language: CMS Made Simple Czech CMS Made Simple France CMS Made Simple Spain CMS Made Simple Hungary CMS Made Simple Russia CMS Made Simple Netherlands

All times are UTC




Post new topic Reply to topic  [ 36 posts ]  Go to page 1, 2, 3  Next
Author Message
 Post subject: Проблема с Alias
PostPosted: Tue May 15, 2007 1:59 pm 
Добрый день!

Когда я создаю новый контент с русским именем, в поле Alias (имя URL) по-умолчанию пишется какая-то хрень. Но на demo-сайте когда я пытаюсь сохранить такой контент, мне выдается сообщение, что алиас может состоять только из букв и цифр. А на моем сайте, куда я поставил последнюю (1.0.6) версию CMSMS с пакетом русификации и Альбомом 0.9.1 почему-то сообщение об ошибке не появляется, эта хрень пишется в базу. В итоге получается, что в тексте меню сайта написана какая-то хрень и вся разметка съезжает.

Может быть, кто-нибудь знает, почему так случается?


Top
  
 
 Post subject: Re: Проблема с Alias
PostPosted: Tue May 15, 2007 2:08 pm 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
Сколько раз ты употребил слово "хрень" в своём сообщении? Покури http://wiki.cmsmadesimple.org/index.php ... ic_Support - только теперь надо

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

Будет полноценный автоалиасинг транслитом =)

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Mon May 21, 2007 9:46 am 
Offline
Forum Members
Forum Members

Joined: Tue May 01, 2007 8:52 pm
Posts: 47
2) класс Convert упразднили, скачай версию 0.13  и выцепи его оттуда

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

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


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Wed May 23, 2007 4:52 am 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
Я же говорю, к последней версии статья подходит лишь с некоторыми изменениями. Но идея верная, так что если в PHP соображаешь, то отладишь за полчаса. Если нет, то тогда, собственно, найми кого-нибудь, кто соображает, у меня, к сожалению, нет времени сейчас. Я тестировал недели две назад с предпоследней, пришлось поправить IF.

Про Convert - я по-моему, сказал достаточно конкретно - берешь старый дистрибутив - они все есть на форже, распаковываешь, и копируешь из lib класс Convert в новый дистрибутив.

Летом обновлю так, чтобы работало с последней версией.

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Fri Sep 07, 2007 7:39 pm 
Offline
Power Poster
Power Poster
User avatar

Joined: Fri May 25, 2007 10:57 am
Posts: 1137
Location: Germany
Чтобы не долбиться с изменениями в коде и подгрузкой библиотек, я сделала так:

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

_________________
CMS Made Simple 1.6: Beginner's Guide
Overview of modules, themes, tutorials and websites made with CMS Made Simple
Webseiten mit CMS erstellen


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Sat Sep 08, 2007 8:03 pm 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
Ого! Вот это мудрое и красивое решение с использованием системы событий, которой не было для старых версий, для которых я писал этот тег. Можешь добавить в Вики?

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

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


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

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Sat Sep 08, 2007 8:16 pm 
Offline
Power Poster
Power Poster
User avatar

Joined: Fri May 25, 2007 10:57 am
Posts: 1137
Location: Germany
ZYV wrote:
Можешь добавить в Вики?


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

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


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

_________________
CMS Made Simple 1.6: Beginner's Guide
Overview of modules, themes, tutorials and websites made with CMS Made Simple
Webseiten mit CMS erstellen


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Mon Sep 10, 2007 7:06 am 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
А что там в mAliasOld :) ? Может специфичную проверку сделать какую-то...

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Mon Sep 10, 2007 4:04 pm 
Offline
Power Poster
Power Poster
User avatar

Joined: Fri May 25, 2007 10:57 am
Posts: 1137
Location: Germany
Как я поняла там такая система, если страница новая, то Alias берется из Заголовка, если же страница редактируется и при этом убирается Alias (чтобы новый сгенерировать), то там подгружается mOldAlias, то есть где-то закешированный или из базы данных старый и берется по умолчанию, что вообщем-то не только для функции транслита неудобно, но вообще как-то не очень путево сделано.

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

_________________
CMS Made Simple 1.6: Beginner's Guide
Overview of modules, themes, tutorials and websites made with CMS Made Simple
Webseiten mit CMS erstellen


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Sat Sep 29, 2007 7:13 pm 
Offline
Power Poster
Power Poster
User avatar

Joined: Fri May 25, 2007 10:57 am
Posts: 1137
Location: Germany
Нашла один баг в своем решении - заглавные буквы "проглатывались". Теперь сделала так:

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

_________________
CMS Made Simple 1.6: Beginner's Guide
Overview of modules, themes, tutorials and websites made with CMS Made Simple
Webseiten mit CMS erstellen


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Sat Oct 06, 2007 6:45 pm 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
Вот, кстати, у меня тоже они вроде проглатывались, только я так и не сообразил в чем-же причина...

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Mon Jun 02, 2008 8:29 am 
Offline
Power Poster
Power Poster
User avatar

Joined: Fri May 25, 2007 10:57 am
Posts: 1137
Location: Germany
Вот последняя версия тега. При создании новой страницы транслит делается автоматически. Если же нужно сделать 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;
}

_________________
CMS Made Simple 1.6: Beginner's Guide
Overview of modules, themes, tutorials and websites made with CMS Made Simple
Webseiten mit CMS erstellen


Last edited by Sonya on Mon Sep 08, 2008 7:58 am, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Wed Jul 02, 2008 12:29 pm 
Offline
Forum Members
Forum Members
User avatar

Joined: Tue Apr 15, 2008 10:36 am
Posts: 128
Нельзя ли положить класс куда нибудь в доступное место? Сайт автора че то недоступен :'(


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Wed Jul 02, 2008 1:24 pm 
Offline
Language Partners
Language Partners

Joined: Tue Nov 15, 2005 9:08 pm
Posts: 868
Хорошее сегодня настроение - http://zaytsev.net/misc/translit/ - хотя мог бы сам найти.

_________________
unsigned double ZYV;


Top
 Profile  
 
 Post subject: Re: Проблема с Alias
PostPosted: Fri Jul 04, 2008 10:09 am 
Offline
Forum Members
Forum Members
User avatar

Joined: Tue Apr 15, 2008 10:36 am
Posts: 128
Ну вот не нашел.
Кстати скачал. Че то не вштырило (или лыжи не едут или я тормоз), нашел другой метод. Но он предполагает запись в ядро, что на сам деле не есть хорошо.
Итак есть другой класс транслитерации (далее Транслит). Вообще есть клад классов здесь http://www.phpclasses.org, правда для скачивания библиотек надо регистрироваться. Так вот там есть http://www.phpclasses.org/browse/package/2650.html класс. На всякий случай привожу код (класс маленький и еще поэтому он понра).
Code:
<?
// (c) YURiQUE (Yuriy Malchenko), 2005
// jmalchenko@gmail.com
//
// A very simple class with more natural cyrillic to latin transliteration.
//
// function Transliterate() takes 3 arguments - the string to transliterate itself,
// an encoding of the input string and an encoding of the result to get.
//
  class Translit {
    var $cyr=array(
    "Щ",  "Ш", "Ч", "Ц","Ю", "Я", "Ж", "А","Б","В","Г","Д","Е","Ё","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ь","Ы","Ъ","Э","Є","Ї",
    "щ",  "ш", "ч", "ц","ю", "я", "ж", "а","б","в","г","д","е","ё","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х", "ь","ы","ъ","э","є","ї");
    var $lat=array(
    "Shh","Sh","Ch","C","Ju","Ja","Zh","A","B","V","G","D","Je","Jo","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","Kh","'","Y","`","E","Je","Ji",
    "shh","sh","ch","c","ju","ja","zh","a","b","v","g","d","je","jo","z","i","j","k","l","m","n","o","p","r","s","t","u","f","kh","'","y","`","e","je","ji"
    );
   
    function Transliterate($str, $encIn, $encOut){
      $str = iconv($encIn, "utf-8", $str);
      for($i=0; $i<count($this->cyr); $i++){
        $c_cyr = $this->cyr[$i];
        $c_lat = $this->lat[$i];
        $str = str_replace($c_cyr, $c_lat, $str);
      }
      $str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $str);
      $str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}'", $str);
      $str = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $str);
      $str = preg_replace("/^kh/", "h", $str);
      $str = preg_replace("/^Kh/", "H", $str);
     
      return iconv("utf-8", $encOut, $str);
    }
  }
?>


В ходе ковыряния в коде (каламбур) нашел что все не латиники прогоняются через munge_string_to_url определенную в файле lib/misc.functions.php. Как всегда кракозябры типа кириликов меняют, а сами наши кирилики нет. Обидно.
В общем функцию приводим к виду:
Code:
function munge_string_to_url($alias, $tolower = false)
{
   // replacement.php is encoded utf-8 and must be the first modification of alias
   include(dirname(__FILE__) . '/replacement.php');
        include_once(dirname(__FILE__) . '/class.translit.php');  //путь к классу Транслит
   
    $alias = str_replace($toreplace, $replacement, $alias);      //эту строку можно вообще закомментировать/удалить!
    $translit = new Translit();                                             //вызов класса   
    $alias = $translit->Transliterate($alias, "utf-8", "utf-8");    //транслитерация

    !!!далее без изменений


В защиту метода:
1. Латиники остаются на месте (на точном месте, т.е. пошел Windows будет poshel-Windows)
2. Меньше колебаний и меньше строк (против Сониного где нужно еще что то мутить).
3. Дополнительные функции не требуются.
Минусы
ХА нашел... В общем в классе рекомендую заменить "`" на другой знак или пусто "", т.к. в последствии он отсечется и получится два слова вместо одного.

Вроде работает и на простом контенте и на Новостях.


Last edited by Il_Burbero on Fri Jul 04, 2008 10:27 am, edited 1 time in total.

Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 36 posts ]  Go to page 1, 2, 3  Next

All times are UTC


Who is online

Users browsing this forum: guro


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Arvixe - A CMSMS Partner