对Trackback模块最新版本的追求充分体现了“时髦”的代价。Drupal4.5.0推出的时候,Trackback 推出了与之匹配的v1.14,这个版本的问题多多,譬如把trackback和评论混同起来,在每篇blog文章里凭空添加一个多余的"trackback" tab等等,在被多人诟病之后,作者作出了升级,但是这次升级并未作为Drupal 4.5.0的正式版本,正式版本仍然是v 1.14,升级版只是可以从CVS那里下载到,这次升级的最大变动就是数据库结构的更改,因为作者没有把这次升级作为最终升级版,所以并没有提供升级数据库的脚本。当时我为了紧追潮流,立刻升级为CVS,但是由于前后两个数据库的差别非常之大,我就放弃了手动升级数据库(表),而是删除了旧的,直接使用新的,好在当时没有几条Trackback,所以也不是一个问题。
从那以后我紧跟Trackback的CVS,好处是修正了一个又一个小错误,譬如不能直接删除trackback,在没有trackback的时候在blog的摘要下面显示"0 trackback",发送成功后无法显现成功发送的站点等等,终于我跟到了v 1.28,这个v1.28已经支持Drupal 4.6.0,所以就拿来用了 。值得注意的是,从v1.15到v1.28,trackback的数据库结构都没有发生改变。
终于,Trackback推出Drupal 4.6.0的正式版了,第一个版本是v1.29,本来要升级,但是一看,God,数据库结构又变了,正在吃惊之余,v1.30推出了,支持了Spam模块,提供了数据库升级脚本,但是只提供了从v1.14直接升级到v1.30的脚本,并没有其他版本升级的脚本,把俺这个铁杆的粉丝搁在了v1.28,进退两难了, 55~~。
懒了一段时间没去管它,但是想到最终这个问题还是要解决的,还是趁早吧,恰好又看到intertia贴的一条评论,所以花了点功夫把Trackback从v1.28升级到v1.30,主要是数据库的升级,步骤如下:
首先,建立一个Spam_trackbacks表:
CREATE TABLE spam_trackbacks (
trid int(10) unsigned NOT NULL default '0',
rating int(2) unsigned default '0',
spam tinyint(1) unsigned default '0',
last int(11) unsigned default '0',
PRIMARY KEY trid (trid),
KEY rating (rating),
KEY spam (spam),
KEY last (last)
);
然后,在原来trackback_received表格中添加一个新的叫做Status的column(主要是用于设置trackback是否publish):
ALTER TABLE `trackback_received` ADD `status` TINYINT( 1 ) UNSIGNED DEFAULT '0' AFTER `excerpt`
数据库的更改搞定(希望以上就是1.28与1.30数据库不同的地方,如果还有其他的不同,那可要哭死了~~),然后上传新的trackback模块,更改设定,设置spam,blah blah blah。。。按照惯例就行了。 到此搞定一切。
下面是其他几个问题:
首先关于显示最新trackback的block的问题,初步更改如下,主要解决了显示Unpublished的问题,和如何直接显示到Trackback的问题:
$result = db_query_range('SELECT * FROM {trackback_received} where status=1 ORDER BY created DESC', 0, 10);
//添加 status=1
while ($trackback = db_fetch_object($result)) {
echo "
$trackback->subject
";
//添加锚点,但是似乎只在firefox下有效,在IE下没有太大作用
}
?>
更进一步,这个区块可以用user_access函数来写,更优化一些,另外可以加入发布时间,利用theme函数来进行格式化等等,但是今天没有时间了,只改了最关紧的地方,其他的改天再改进吧。