trackback模块

二个重要模块升级 + 一个新的模块

Spam模块的4.7版本终于发布了,在这个垃圾横飞的互联网星球上,方便人们交流的comment,trackback等功能很容易遭到垃圾信息的侵袭,一夜之间可能突然多了上千条色情网站广告的评论,让人不胜其烦。而 Drupal 的Spam 模块很好的解决了这个问题,在 4.6版本下使用起来的效果非常好,但是 4.7 版本的开发直道上周才完成,在这里可以下载,由于许可的问题,这个模块无法在Drupal的主站下载。注意安装以后需要运行 update.php 来升级旧的数据库。

另外一个今天有了新的更新的模块是 Trackback 模块。但是还没有 4.7 的正式版,我试了一下已经可以用了,但是需要自己写一个升级旧的数据库的脚本,我写了一个,如下,保存为 trackback.install 放入 trackback 的目录下即可。

但是我现在没有启动 trackback 模块,因为随着 google blog search 与 technorati 的发展,似乎自动的 backlink 要比手动的 trackback 要好用一些。

最后一个Comment Info 模块,功能不多,但是却很实用,方便匿名访客书写评论,如果一个访客在你的blog留过言,下次再留言时可以不用再重新填一遍个人信息。留言下面多出了一个Save my Comment Information for next time,如果勾选,下次留言将无需再次填写信息。

Blog分类: 

过火的spam模块及修正

前段时间为了过滤trackback spam而开启的新版spam模块不断的滤掉评论,所以只好把trackback和spam同时关掉了。昨天想到spam模块里其实是可以定义过滤那些内容的,然后看了一下,把spam模块中“Filter comments”这个选项给勾除了,以为这样“评论”的内容就不会受到影响了,但是刚才发现,“评论”还是被砍掉了,很是纳闷,再次研究了一下设定,发现除了“Filter Trackback"这个选项外,还有一个选项--Filter Spam Url 被启动了,这个选项的解释是:

Enabling this option will tell the spam filter to treat URLs embedded within comments and other contents as a special case. When URLs that were found within known spam are found in new content, the new content is automatically considered to be spam. When this option is enabled, a single spam URL found within an otherwise spam-free posting will cause the filter to mark the new content as spam.

启动这个选项将使spam过滤器把评论以及其他内容中所包含的url作为特例。当已知spam中包含的url出现在新的内容里的时候,新的内容自动的被认为是spam。当这个选项启动的时候,在即便不是spam的内容中如果发现了一个spam url,这个内容也会被标记为spam。

以前在同时过滤评论和trackback的时候,spam模块可能已经积累了一些url的信息,所以再次启动时,这一信息再次作为过滤的依据。

不过建议drupal的网站,如果启动trackback,一定要启动spam,不然关于什么 poker和Hold em的广告每分钟几百次的朝你的站点冲击,禁止IP根本不起作用,spam来源的IP似乎是随机分布的。

Blog分类: 

暂时停掉了trackback模块和spam模块

暂时停掉了Trackback模块和Spam模块,停用前者是因为现在网络上的trackback垃圾太多;停用后者是因为虽然spam能杀死所有的trackback垃圾,它同时也误伤了很多有用的评论。Drupal就像一部自动运行的机器,Spam模块通过Beyesian Rule来更新它对spam的辨识,然后cron自动把spam删除,但是在spam变得越来越聪明的时候,它也变得越来越多疑,把一些有用的评论也一并删除了。因为现在的trackback基本上也闲置不用,为了它专门再开启一个Spam模块有些浪费了,况且这个spam模块还有副作用呢?所以一并停之,这个世界也清凉了许多。

Blog分类: 

Drupal的垃圾攻防战:全新的Spam模块和更新的trackback模块

昨天又遭受了一次online poker的垃圾trackback袭击,8月2日经历过一次,那次Spam + Trackback 模块有效的阻止了垃圾trackback,而昨天, spam 和 trackback 去没有阻挡住瞬间上百条的垃圾trackback。因为Spam模块是Drupal核心模块设计的,所以它对组织垃圾留言和Blog内容非常有效,对于trackback,却一直都不支持。但是trackback的垃圾越来越严重,于是有用户更改了trackback,用一种比较笨拙的方式暂时防止了spam的袭击,后来trackback也作了更新,添加了对spam模块的支持。从逻辑上,这是一种颠倒,应该spam模块支持trackback模块才对,而不是颠倒过来,所以这种协作中存在着一个漏洞,而狡猾的垃圾trackback很快就知道该如何钻入这个漏洞,所以就出现了昨天的海量垃圾。

于是查阅解决方式。突然发现Spam模块已经被重新写过,最新的版本是今天才发布的2.0.10,但是这个版本并不在Drupal的总站上,因为Drupal总站发布的模块必须是基于GPL协议的,而新的Spam模块则是基于BSD协议的,不过我们可以在作者的网站找到这个模块。他提供了针对旧模块的数据表的升级脚本,但是我试了一下似乎有bug,升级数据库后,评论总是被全部或是部分的删除,幸好我在升级前备份了数据库,没有损失数据。所以索性彻底删除了旧的Spam模块和相关的数据表,重新安装新的Spam模块,反正原本也没有多少东西在旧的数据表里面。

新的Spam模块功能比先前强大了不少,它甚至可以扫描已有的内容,剔除杂糅其内的垃圾内容。但是美中不足的是它不能直接扫描已有的trackback,为了避免越俎代庖,不过这个版本的spam模块加强了对trackback模块的支持,在先前的几个版本中,还加入了对trackback模块的patch,以使两者能够更好的协作。8月22日,Trackback模块的作者将这个patch添加入他的模块中,所以现在只需要下在cvs版的trackback就可以了,而原先的patch文件也已经从Spam模块的正式下载文江中删除。

呵呵,希望这次可以多抵御一阵子spam的骚扰,道与魔不断的较量着技术手段,我等看热闹的就只好在被魔击中只好快些去道那里领取解药,呵呵,无奈,无奈:)

Blog分类: 

升级Trackback模块到v 1.30(Drupal 4.6)以及相关问题

对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函数来进行格式化等等,但是今天没有时间了,只改了最关紧的地方,其他的改天再改进吧。

    Blog分类: 

    Trackback Spam!

    Trackback成了垃圾信息的新场所,一晚上居然有十几条来自一个莫名其妙网站的trackback,估计是卖什么东西的。只好去翻Drupal的讨论区,发现一条相关的讨论,更改trackback模块中的function trackback_receive 函数如下: [点击观看|修改Trackback函数防止Spam] 看看效果如何。
    Blog分类: 

    做了一个显示最新的引用(trackback)的区块

    呵呵,等不及作者的升级了,我自己先土土的写一个block吧。再次说明一下,因为我没有钻研过Drupal的函数手册,所以这些block可能不是很in,不过咱们就实用主义吧,能用就行:)下面是代码,右边有一个范例,就是那个叫做“最新引用(trackback)”的区块,我还没有来得及用CSS美化那个list,所以没有缩进,看起来不是很美观,慢慢来,先实现了功能再说。另外,这是针对cvs版的trackback写的(ver 1.25),如果你使用的是4.5.x的trackback模块,需要根据数据库的结构作些调整。

    $result = db_query_range('SELECT * FROM {trackback_received} ORDER BY created DESC', 0, 10);
    //将trackback_received表格按时间降序排列,选举最新的10条。你可以按需要更改数目。
    while ($trackback = db_fetch_object($result)) {
    echo "

  • $trackback->subject
  • ";
    //这段土,不过没有办法啊,呵呵。
    }?>

    呵呵,这样就可以,其实挺简单的:)

    Blog分类: 

    Drupal 4.6的phptemplate.engine问题和trackback CVS版的问题

    成功的把数据库移植到了4.6.0版,只是作为一个测试,现在这个主版面还是4.5.2版本的,测试版本在这里。但是发现了一个问题,phptemplate.engine在4.6版下无法正常运行,在Sam这里看到他也遇到了这个问题,在Drupal的主站也有人讨论这个问题,解决的方式是下载一个CVS版的phptemplate,但是这个Drupal网站网站上至少有三个CVS版的phptemplate.engine,如果想升级成功只好一一试过了.

    另外一个比较糟糕的问题来自于CVS的Trackback,一直都觉得这是一个没有完成的module.CVS在改进了trackback的显示版本后,居然没有定义一个block或是页面来显示最新接受到的trackback,所以我根本就不知道我是否收到了新的trackback,现在唯一的办法是使用databse模块检查数据库中的trackback_received数据表,很是麻烦,这两天钻研一下看看能不能建立一个读去最新Trackback的模块或是页面,方便检阅新的引用.

    Blog分类: