Drupal

关于Drupal的安装、使用、问题、修改等的讨论。也是目前唯一的Drupal中文交流论坛。

无孔不入的Trackback Spam

前几天因为发现有Trackback的Spam,于是更改了Trackback模块的一个函数,还好,不再有Spam了。可是昨天升级Drupal,用了新的4.6.0版的Trackback,一时忘记了去修改那个函数,结果一夜之间居然涌进500多条Spam!手动删不过来,只好在phpMyadmin里临时编写了一段脚本,虽然删干净了,不过可惜的是不小心删掉了昨天的一条来自老康的Trackback,罪过,罪过,sigh,无法恢复了:( 现在又连忙按照[Trackback Spam!]那篇帖子里的更改,重新修改了trackback模块,估计这次应该没有问题了。所以建议凡是启用trackback的Drupal最好还是事先作一下修改,不然到了一夜之间出现上千条spam的时候可真的是麻烦to death了。:)
Blog分类: 

升级至Drupa 4.6.0!

花了二十分钟的时间,将Blog升级为最新的Drupal 4.6.0!

其实升级挺简单的,由于我的Host不限制数据库的数量(hoho,免费空间还不限制,不错,赞一下),所以我把数据全部导入一个新的数据库,然后在在一个文件夹先装了一遍4.6.0主要想利用它来升级一下4.5.0的数据库,数据库升级完毕后,再尝试添加了一些必须的模块和主题,一切没有问题后,才升级这里的Blog。你现在看到的已经是最新版本了,尽管乍一看似乎还一样:)

发现BBcode的4.5.0的版本其实可以用在4.6.0上,Trackback其实也已经支持4.6.0了,但是还没有写出来。另外一些重要的模块基本上都已经完成了对4.6.0的支持,只有两个例外,一个是 awtags,现在正在研究4.6.0的版本,所以这段时间没有tag用了。还有一个更重要的就是trip_search模块 (泪水装,中文搜索全靠你了啊!)

Drupal 4.6.0声称支持UTF-8编码的搜索,但是事实上一实用UTF-8搜索就出现重要错误,不知何故[e=red]![/] 所以trip_search仍然是替代的选择,可惜trip_search现在还没有退出最新版,所以,暂时本Blog不能提供搜索服务了,要么,就先拿google搜索凑和一下:(

不过不管怎样,现在已经成功地升级为Drupal 4.6.0了,体验全新Druapl!

Blog分类: 

修改Trackback函数防止Spam

...
function trackback_receive(&$node) {
// 处理TrackBack post 数据.
$trackback->url = check_url($_REQUEST['url']);
// 阻止trackback的spam.
$evil_words = array( 'poker', 'psxtreme', 'ramandrom', 'viagra ', 'freaky', 'howtoplay', 'holdem', 'casino', 'terashells', 'phentermine' );
//设置过滤词。
$is_not_spam = 1;
foreach ($evil_words as $reject_word) {
// 如果trackback的url,内容或是标题含有这些词汇,这个trackback将被过滤掉。
if (stristr($trackback->url, $reject_word) ||
stristr($_REQUEST['excerpt'], $reject_word) ||

Taxonomy upgrade extras: 

Trackback Spam!

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

Drupal 4.6.0正式版下周推出

根据Drupal网站的消息,Drupal 4.6.0的正式版下周即可推出,拭目以待。RC使用了很长一段时间了,用RC建立了两个网站,一个为了测试这个Blog的升级,另一个为了测试主题的试验网站。总得来说一切还都挺不错的。在后台管理上面RC做得要比现在的4.5.0好,对于新手来说更容易上手。RC的中文搜索还多少有些问题,希望能够在新的版本中改正。

另外一些核心的模块基本上都完成了向4.6.0的升级,虽然有些模块的“最新版本”(Latest Version)显示的还是4.5.0,但是他们的CVS版都已经完成了升级,主题的升级稍微慢一些,至少我测试了nexgen主题,在对RC的兼容上有些问题。

还有,很高兴看到Hiweed的drupal站点又回来了,不过等了很久都没有见到动静。上个月在Drupal的总论坛看到hiweed向Killes抱怨作出了新的汉化文件却无法登陆CVS帐户,无法更新,看来hiweed仍然在做汉化,赞一下:)

不过4.6.0已经即将推出,法语、德语、意大利语等语种的翻译已经开始了,不知道汉语的什么时候可以上马。其实Drupal为了方便翻译,已经把核心文件的Po分成了小份儿,大家可以一起来作,等待hiweed的网站恢复,向他建议一下。

Blog分类: 

正在写一个Drupal的module/filter

试着自己写一个Drupal的Module,其实是一个filter,也就是前阵子讨论过的数学符号过滤器,用来显示数学表达式。看了一下Drupal的函数手册,帮助挺大的,基本上这个模块已经完成了,可以在 管理->模块 中显示,也可以在输入方式中显示,并且没有出错的提示,so far so good, 但是最重要的地方却是:这个过滤器不能过滤显示数学符号 !(peng,被一棒子打到)

不管怎样,先把这个失败的模块/过滤器贴在这里吧,和大家讨论一下,看看问题出在什么地方。

function math_help($section) {
//让模块显示在模块列表中。这部分没有问题。
switch($section) {
case "admin/modules#description":
return t("A filter module that converts ascii to math symbols");
break;
case "filter#long-tip":
return t("useful math filter");
break;
case "filter#short-tip":
return t("math filter");
}
}
function ASCIIMathCallback($mtch_arr){
//估计问题出在这里,我直接按照ascii to math的作者定义的函数超过来没有仔细研究它的引用的两个页面的函数。
$txt = trim($mtch_arr[1]);
include('modules/ASCIIMathPHP.cfg.php');
require_once('modules/ASCIIMathPHP.class.php');
static $asciimath;
if (!isset($asciimath)) {
$asciimath = new ASCIIMathPHP($symbol_arr);
}
$math_attr_arr = array( 'displaystyle' => 'true' );
$asciimath->setExpr($txt);
$asciimath->genMathML($math_attr_arr);
return($asciimath->getMathML());
}
function math_filter($op, $delta = 0, $format = -1, $text = '') {
//这部分也没有问题,可以在输入方式中正确显示。
switch($op) {
case "list":
return array(t("math"));
break;
case 'description':
return t('math symbols.');
break;
case "process":
return preg_replace_callback('/`(.*?)`/s', 'ASCIIMathCallback', $text);
break;
default:
return $text;
}
}
?>

关于ascii math php的介绍

Free Tags: 
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分类: 

    做一个简单的计数区块

    昨天有人问的,研究了一下,因为对Drupal本身的函数结构不是很熟悉,所以到Drupal函数手册那里去钻研了一下,可惜里面的东西太复杂,所以就用了一种比较土的方式解决了,如下。呵呵,同时还想试一下新安装的编码过滤器,因为昨天发现没有这个过滤器的时候,所有的php代码的前提示符都会被滤掉。

    $n_of_comments= db_result(db_query('SELECT count(*) FROM comments'));
    $n_of_posts=db_result(db_query('SELECT count(*) FROM node'));
    $n_of_blogs=db_result(db_query("select count(*) from node where type='blog'"));
    print "本站共有blog $n_of_blogs 篇
    ";
    print "本站共有文章 $n_of_posts 篇
    ";
    print "本站共有评论 $n_of_comments 篇"; ?>

    当然,如果你嫌这个显示出来的效果比较土,还可以加style,譬如输出时

    print "本站共有blog $n_of_blogs 篇
    ";

    我的站点的右下角有一个没有加修饰的例子。

    其他的数据可以列出,譬如一共有多少论坛话题,一共有多少tag,一共有多少用户,只需要稍微修改一下上面这段代码就可以了:)


    update:做了一个小小的更改,max(nid)不等于你所有的node的总数,而是等于曾经有过的node的最大值,因为你即便是删除了一个node,这个id已经被它占有,后边的node id不会再发生变化,所以应该使用 count(*),呵呵,刚才秀豆了。

    Blog分类: 

    域名与空间

    首先,需要一个域名。网上有不少地方提供免费的支持DNS的域名,譬如我先前用过的www.ipchina.org,还有看到别人用的uni.cc。当然最好可以有一个自己的域名,现在一个域名也不是很贵,特别是以.info .ws 做后缀的域名经常在打折,当然,我们最希望的是有一天能够推出一个.blog 为后缀的域名:)

    选好了域名, 接着就要选择空间了。选择空间一定要慎重,切不可贪图一时的便宜,被不负责的空间商欺骗,这个我有亲身体验的。那次事件之后,在网上仔细查了各个服务商的反馈意见,并且用whois查看了相对稳定的非常大米的空间服务商^_^,然后才选择了Site5 提供的空间,用了这么久,可以打95分。

    Taxonomy upgrade extras: