XOOPS

内容管理软件XOOPS 2粗评

前两天答应给大温莎华人协会维护网站5后,初步考虑使用一款内容管理系统(CMS,content management system)来管理、维护整个网站。

几种著名的基于PHP的CMS中,php-nuke名头最响、最老牌了,但现在收费了,而且基础架构好像没有postnuke好;但postnuke这个后期之秀开发了几年了,好像还是没什么明显的突破;另一个CMS产品phpWebSite是美国Appalachian州立大学开发的,一直就像大学里的实验产品,虽然开发了N年,但总是让人用起来感觉不爽(我一直觉得这个产品让人期望之余很失望);tiki给人的感觉不是最恰当的选择,更像一个信息、数据管理中心;Exponent Content Management System是这几者中最年轻的,也曾在sf.net上火过一把,但此后好像也没什么再出彩的地方了。

这样子算下来,XOOPS似乎应该是比较好的选择了。XOOPS的模块很多,功能完善,能和大名鼎鼎的Blog系统WordPress结合起来,而且还有中文的技术支持网站,所以乍看起来,不选XOOPS都不行了。

于是中午就下载了一份XOOPS v2.2.3安装、测试了一下。测试的结果只能用生气、呕血来形容。我本来不愿意浪费时间来写这个评测的,但是为了让我以后能够清晰地记住这个软件如何让人生气、失望,我还是详细地写写我的感受。

首先,安装v2.2.3后我发现该版本的官方语言包比较少,大概10来个,没有中文。于是,我用了个v2.0的中文简体语言包。此后,别的小瑕疵不说,单说选择语言为中文简体后,就会出现很多个程序运行警告信息。切换回英文错误信息少了很多,但还是有好几个,而且是核心程序里面出现的错误信息。也就是说,这个官方最新(稳定)版还是有明显的bug的。

因此,这时候我考虑用CVS下载最新的更新程序,然后对应地覆盖出错文件。可惜这般改动后错误信息依旧出现。无奈之余我就打开出错的这4、5个文件,发现了几个近乎白痴级别的程序设计错误:

1. /kernel/block.php里,getByModule()、getAllByGroupModule()、getAdminBlocks()、assignBlocks()被重复定义了2次,估计是开发人员复制、粘贴时候出的错。但是这种错误一测试就可以发现了呀,难道XOOPS的开发人员程序修改了之后都不测试就更新到CVS服务器里面去了??呕血。

2. /modules/newbb/language/english/modinfo.php里,用define重复定义"_MI_TEXT",这也是一测试就能测试出来的错误。

3. /kernel/module.php里,重复定义变量$_msg两次,而且这2次紧挨着,又是一个一测试就能测试出来的错误。

4. /class/theme.php里,在函数loadGlobalVars()里,用“if ($xoopsUser != '') {”,这里$xoopsUser是一个对象(object)。正确写法应该是“if (!empty($xoopsUser)) {1

5. 在某文件中,在定义某call by reference的函数的时候,返回布尔值,“return false”。正确写法应该返回某变量2

待把这几个错误修正了之后,英文版的XOOP终于可以正常运行了。但是一但切换到中文,由于语言包兼容性等问题,仍然出现一大堆错误。XOOPS虽然的确支持多语言,但这方面做得并不很好,对语言处理过于生硬3。这直接导致的后果就是:我根本无法通过官方网站提供的资料使用中文版的XOOPS。

好在有国人搞了XOOPS中文版。但我对中国程序员改造后的程序向来感冒,看了中文版XOOPS网站的下载介绍后,我根本无意从那里下载中文版的XOOPS,因为我觉得如果使用了这个中文版,我就被这个“狭隘”的中文版套牢了,以后想要解套也许还要看那些中文版程序员的脸色行事,不妥。

其实当XOOPS设计成支持多语言后,那么所有的针对XOOPS某一特定语言的语言包的开发都应该归到XOOPS这一个旗号下,而不要脱裤子放屁——多此一举地另立一旗号出来(就像osCommerce日文版一样)。但问题是XOOPS的开发、管理、测试看起来在某些方面做得比较烂4,导致有些语言包根本无法在XOOPS下正常使用(这点也可以用来解释为什么XOOPS v2.2.3的官方语言包只有可怜的10来个)。在这种情况下,某些语言的开发者(例如中国的开发者)另立旗号也是可以理解的。

其实,XOOPS的确是个很好的产品。但一个团队中,良莠不齐也是很正常的事情,偏偏有几个菜鸟级的开发人员坏了XOOPS这锅鲜汤。无奈之余,XOOPS的fans们也只能静待下一版本(也许是v2.3)的XOOPS尽快出台了。

暂别XOOPS。

[注1] 这个错误在低版本的PHP中也许能够通过。我用的是PHP5。

[注2] 这个错误在低版本的PHP中也许能够通过。我用的是PHP5。

[注3] 举两个例子。首先,在XOOPS 2中,若某一语言文件缺失,则马上报错,但语言文件缺失在这种系统中是非常常见的一个现象。其次,在设置为中文简体后,页面标题是非正常显示的编码。

[注4] XOOPS中文版开发者曾就此抱怨过

[补充说明5] 这里实际上不是为大温莎华人协会维护网站,而是要为温莎的中国艺术学院(义务)做一个新网站,特此澄清。2006-02-23 19:55:45

类别: