Xoops
Thursday, April 1st, 2004好几天没Blogging了,今天简单说说这几天的收获。这几天做了一个Xoops的模组(Module)的改进工作,之前也花了一些时间简单研究了一下Xoops的结构,虽然只是管窥蠡测,但还是很有感触。
Xoops使用PHP和MySQL数据库,不过使用了类似于ADODB那样的数据库抽象层,看起来以后连接postgreSQL或者其他数据库也没什么问题。完全采用了面向对象结构,虽然程序结构复杂,但是层次很清晰,能和他有一拼的也就是IPB了。面向对象目前对PHP来说确实还有点超前,执行效率也受制于语言本身(目前对象不编译,效率…等PHP5以后就好了)。在显示上,使用了强悍的Smarty模版引擎。程序设计的理念也不错,模组可以很方便的安装/卸载/升级。多语言支持机制也不错。缺点呢,就是感觉有点占资源,打开调试模式就可以看到,一个页面的显示动辄就是30多条的数据库查询,不过还好Smarty有页面缓存机制,也许可以有所缓解。
首先是如何调试模版(Template)。改好了直接上传到/templates下?不好用的,因为Smarty将模版读入了数据库中做缓存了,你需要在xoops_tplfile中根据文件名找到模版ID,然后根据ID把缓存在xoops_tplsource中的模版内容也改了。或者通过Admin中的模组设置将整个模组更新也可以。之后还要清空templates_c中的内容才能看到你修改的效果。这么麻烦怕了吧?
再就是一些有用的小技巧:
1. 取得uid:
$xoopsUser->getVar(’uid’)
当然前提是这个用户对象$xoopsUser是从上面继承过来的…一般都会有 :)
2. 根据uid取得用户对象:
$u=$member_handler->getUser($uid);
然后就可以使用 $u->getVar(’uname’)取得用户的uname之类的了。
3. 根据uid取得用户组别:
$member_handler->getGroupsByUser($uid, false);
(第二个参数是是否用class方式返回)
4. 数据库操作一般步骤:
$DBLink = &Database::getInstance();
$sql = “SELECT * FROM emp”;
$result = $DBLink->query($sql); //DELETE等需要queryF()
while ($emp = $DBLink->fetchArray($result)) {
//用Array的形式取回一行,在$emp中…处理
}
$DBLink->freeRecordSet($result);
5. 数据库表前缀添加
$DBLink->prefix(”name”);