设计思路:利用原Joomla/Mambo的“触发器”原理,在对用户表进行相应操作时均做一触发器事件,其中包括:
1.注册
2.登录
3.注销
4.更新
5.删除
6.检查重名
7.获取最小可用的用户ID值
下面开始详述上述功能的实现方法(注:此方法同样适用于Mambo)。为避免叙述重复,请在下文中所列的函数名的global里包含一条$_MAMBOTS,即global (...),$_MAMBOTS;,其中,(...)代表的是原语句。
Mambo/Joomla!下实现多系统桥接的一点思路
关于Joomla! 1.5.x搜索奇数汉字导航乱码的解决方案
今天看到有网友提到cnsearch组件的一个BUG:当搜索奇数个汉字时会导致乱码(最后一个汉字错误)。想了一下,这个是IE下的问题,如果没有开启“以UTF传递URL”(好像是这样,具体不大记得了)时,确实会出现汉字传递上的问题。
虽然知道问题的解决办法,但是我不能去强制的要求每一个来访的用户去设置自己的浏览器吧?所以,就只好从代码上解决了。知道问题,也知道引起问题的原因,解决起来就容易得多了。嘿嘿,我只需要在cnsearch跳转页面之前将汉字处理一下就好了。
关于Joomla性能提升的建议:搜索
早就想写一些关于这方面的文字了 ,最近因为个人需要在搞中文分词以及中文的全文索引,就先拿搜索来开刀了。
Joomla!的搜索效率确实是有点低了,这样来说吧,如果定义的最大搜索结果是50,但是每页只显示10条的话,那么,常规的作法应该是每次只读取10条符合条件的记录就行了,但是Joomla!不,它是每次都读出(50X搜索种类)条,然后在搜索结果的处理里这样做一下:{pre xml:lang="php"}//文件:components/com_search/models/search.php
$this->_total = count($rows);
if($this->getState('limit') > 0) {
$this->_data = array_splice($rows, $this->getState('limitstart'), $this->getState('limit'));
} else {
$this->_data = $rows;
}{/pre}
Joomla! 1.5中的一点BUG的修正
if ( $offset >= 0 && $length >= 0 ) {
if ( $length === NULL ) {
$length = '*';
} else {
if ( !preg_match('/^[0-9]+$/', $length) ) {
trigger_error('utf8_substr expects parameter 3 to be long', E_USER_WARNING);
return FALSE;
}
$strlen = strlen(utf8_decode($str));
if ( $offset > $strlen ) {
return '';
}
if ( ( $offset + $length ) > $strlen ) {
$length = '*';
} else {
$length = '{'.$length.'}';
}
}
if ( !preg_match('/^[0-9]+$/', $offset) ) {
trigger_error($str.' utf8_substr expects parameter 2 to be long ['.$offset.']', E_USER_WARNING);
return FALSE;
}
$pattern = '/^.{'.$offset.'}(.'.$length.')/us';
preg_match($pattern, $str, $matches);
if ( isset($matches[1]) ) {
return $matches[1];
}
return FALSE;
} else {
// Handle negatives using different, slower technique
// From: http://www.php.net/manual/en/function.substr.php#44838
preg_match_all('/./u', $str, $ar);
if( $length !== NULL ) {
return join('',array_slice($ar[0],$offset,$length));
} else {
return join('',array_slice($ar[0],$offset));
}
}
}{/pre}在我当前的服务器环境,如果$offset未赋值的话,就容易报错,所以,我在此函数的第一行加上了{pre xml:lang="php"}$offset = intval($offset);{/pre}在运算之前,先将它强制转换成整型,这样在底下的正则判断中就不会报错了。
文章阅读权限控制插件
本插件的功能是:保护你的Joomla! 1.5.x 网站上的文章,只能让注册会员阅读全文,未注册访客只能看到内容摘要(IntroText)及一个提醒他注册的链接。
如果网站上使用的注册链接不是 Joomla! 1.5 默认的 URL,用户还可以自定义注册链接,这个特色对于安装了其它注册组件或者使用了论坛桥接器之后的网站比较方便。
另外,本插件还允许用户指定要保护的文章单元及类别。默认是全部保护,如果用户只需要保护个别单元和类别,可以在后台参数中明确指出。
第 3 页/共 5 页