Blue Flower

Joomla!的标题当然就是整个文章的标题了,可以是任何中文或者其他的语言,但是Joomla!的别名是和SEF有关系的,其实就是相当于一个网页/文章的文件名,但是Joomla!本来是不支持识别中文名称的别名,会自动把其他非英语系的别名转换成为日期形式或者标题里面的某些英语系文字。看看这个例子:

1.标题是纯中文,别名自动转换成为日期形式!
2.标题是中英文混合的,别名自动转换成为标题里面的某些英语系文字!

当然,Joomla!的别名不支持中文语系会产生一些问题,看看这个例子:

1.标题:Joomla 2008 教程,标准的Joomla!别名,joomla-2008,显示形式是(id1)-joomla-2008
2.标题:Joomla 教程 2008,标准的Joomla!别名,joomla-2008,显示形式是(id2)-joomla-2008

这个时候当然是没有任何问题了,但是如果开启了某些SEF扩展程序功能的时候,(id1)和(id2)是不会出现在URL里面的,所以两个文章在URL里面显示的都是 joomla-2008(.html),这样就会把不同的文章都使用了同一个文件名了,当然是会出错了,所以说Joomla!的标准 别名/Alias 对中文语系的网站支持的不太友好!

但是现在已经有两个方法可以让Joomla!的别名更好的支持中文SEF了!

1.Joomla!将空的别名自动转换成为汉语拼音形式:
http://www.cnmos.cn/code/component/4961-joomlazhongjiangkongdebiaotibiemingzhuanhuanweihanyupinyin

hoping的文章:Joomla!在前台添加文章时,是不用输入标题别名的,它会自动的以当前时间做为别名。这样,当开启了SEF时,前台的内容链接看起来不太好看,后面一大堆的数字,当然,这只是针对您的文章的标题为全汉字而言。所以就想着能把空的别名自动转换成为汉语拼音,让它看起来舒服一些。这时候,需要添加一个常见的汉字处理类 Chinese.inc.php 。

修改方法:打开 /libraries/joomla/database/table/content.php 并且搜索

if(empty($this->alias)) {
$this->alias = $this->title;
}

替换为

if(empty($this->alias)) {
include_once(JPATH_ROOT."/includes/Chinese.class.php");
$chs = new Chinese('UTF-8', 'PINYIN');
$this->alias = $chs->convert($this->title);
}

这样,当用户在前台提交文章的时候或者在后台添加文章没有输入别名的时候,会自动把标题里面的所有中文汉字转换成为汉语拼音。另外 Chinese.class.php 文件可以自己下载!

2.Joomla!直接支持中文别名:
http://www.joomla.org.tw/phpbb3/viewtopic.php?f=39&t=3437

kochin的文章:Joomla!的连结其实是用 Alias 字段。然而这 Alias 字段并不一定是你输入的文字或由 Title 字段复制过来,它是经过转换的结果,这转换过程会把 Alias 字段变成只有英文、数字与破折号的形式。

当你储存一篇文章、单元、分类或选单时,Joomla!会把 Alias 字段(可能是由 Title 字段复制过来)送交给 JFilterOutput::stringURLSafe() 处理。而 stringURLSafe() 函式则把这字符串喂给 JLanguage::transliterate(),在那里用上函式 utf8_decode(),然后 htmlentities()。接下来字符串中所有奇怪的字符(对英文语系的人来说)都以正常的字符取代,中文或日文语系无法通过这些处理过程。

回到 stringURLSafe(),所有的空格以及非英文数字符号被以破折号取代或被移除。任何中文或日文字都从字符串里面消失了,并且故事还未结束。

因为在经过了这些虐待后字符串极可能只剩下破折号或完全空白,函式 check() (在几个地方出现)在叫用 stringURLSafe() 后,最后把只剩下破折号或完全空白的字符串用时间戳记来取代。

如果要使用中文的 别名/Alias/链接 (也就是在 Alias 字段里使用中文),需要修改两个文件。首先修改 /libraries/joomla/filter/filteroutput.php 里面的 stringURLSafe() 函式,搜索

$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'),array('-',''),$str);

替换为

$str = preg_replace(array('/\s+/','/\./'),array('-','_'),$str);

接下来修改 /libraries/joomla/language/language.php 搜索

$string = htmlentities(utf8_decode($string));

替换为

$string = htmlentities($string, ENT_COMPAT, 'UTF-8');


ok了,现在Joomla!的别名已经更好的支持中文语系的网站了,kochin和hoping的方法一个是直接使用中文别名,另外的是转换成为拼音别名,喜欢使用哪个方法当然是随便你的喜欢了,最好的方法当然是没有输入别名的情况里面使用拼音别名,在输入中文别名的情况里面使用中文别名。如果都不喜欢的话,转换成为日期的形式也不错,打开 /libraries/joomla/database/table/content.php 并且搜索

$this->alias = $this->title;

替换为

$this->alias = $datenow->toFormat("%Y%m%d%H%M%S");

现在还不知道 Google/Baidu/Yahoo 等的搜索引擎对哪个方法的SEF支持比较好一些!大家可以尝试一下这些方法