Discuz一直以来都是国内站长使用最多的论坛程序,发展到X系列之后,更是变得非常强大了。现在最新版本为X2.5,金华也搞了个论坛,也一直在抽时间研究Discuz,以前写过一篇关于Discuz X2.5的优化小记,是对Discuz优化的一点记录,现在给大家汇报下,里面提到的屏蔽重复URL规则,从目前的测试情况来看,一切正常,大家可以放心使用。
言归正传,看看如何为DiscuzX2 X2.5添加PING功能
什么是Ping服务
百度Ping是基于XML_RPC标准协议的更新通告服务,一般广泛用于博客中把内容更新快速通知给百度,像Wordpress、Zblog都有Ping功能,以便百度及时进行抓取和更新。其它搜索引擎也有其PING服务,原理一样,这里只用百度为例。
Ping服务一般分为两种,一种是自动Ping,一种是手动Ping,百度ping服务的地址为:http://ping.baidu.com/ping/RPC2 了解更多Ping功能的知识请点击:http://zhanzhang.baidu.com/tools/ping
Discuz本身是不支持Ping功能的,我们现在就来实现这样一个功能,让你论坛每产生一个新帖后,都自动的通知百度有新内容了,让其过来抓取,这样可以达到最快的速度收录论坛的内容。
添加PING功能
首先新建一个PHP文件,文件名自定义,如:ping.php 最好用Dreamweaver之类的工具,不会有编码问题。
然后视论坛情况而定,分为两种情况,一种是开启了伪静态,一种是没开伪静态
开启了伪静态就把以下代码加到你创建的PHP文件当中:
<?php if(isset($_GET['action'])) { $canshu=$_GET['action']; } function postUrl($url, $postvar) { $ch = curl_init(); $headers = array( "POST ".$url." HTTP/1.0", "Content-type: text/xml; charset=\"utf-8\"", "Accept: text/xml", "Content-length: ".strlen($postvar) ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar); $res = curl_exec ($ch); curl_close ($ch); return $res; } $baiduXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <methodCall> <methodName>weblogUpdates.extendedPing</methodName> <params> <param><value><string>你的站名</string></value></param> <param><value><string>http://你的网址/</string></value></param> <param><value><string>http://你的网址/thread-$canshu-1-1.html</string></value></param> <param><value><string>http://你的网址/forum.php?mod=rss</string></value></param> </params> </methodCall>"; $res = postUrl('http://ping.baidu.com/ping/RPC2', $baiduXML); if ( strpos($res, "<int>0</int>") ) { header ("Location:http://你的网址/thread-$canshu-1-1.html"); } else { header ("Location:http://你的网址/thread-$canshu-1-1.html#"); } ?>
PS:注意标红的地方换成你自己的网址,另外-1-1这个是要根据后台伪静态规则的改变,如是默认则无须更改,如果像金华一样改过了,则后面去掉一个-1即可,如何知道:http://www.domain.com/thread-123-1.html 这种就是改过的,没改过就是http://www.domain.com/thread-123-1-1.html这种格式,.html前多了一个-1而已。添加好代码后保存,将文件上传到论坛根目录下即可。
如果没开启伪静态,则在新建的PHP文件中添加以下代码:
<?php if(isset($_GET['action'])) { $canshu=$_GET['action']; } function postUrl($url, $postvar) { $ch = curl_init(); $headers = array( "POST ".$url." HTTP/1.0", "Content-type: text/xml; charset=\"utf-8\"", "Accept: text/xml", "Content-length: ".strlen($postvar) ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $postvar); $res = curl_exec ($ch); curl_close ($ch); return $res; } $baiduXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <methodCall> <methodName>weblogUpdates.extendedPing</methodName> <params> <param><value><string>你的站名</string></value></param> <param><value><string>http://你的网址/</string></value></param> <param><value><string>http://你的网址/forum.php?mod=viewthread&tid=$canshu</string></value></param> <param><value><string>http://你的网址/forum.php?mod=rss</string></value></param> </params> </methodCall>"; $res = postUrl('http://ping.baidu.com/ping/RPC2', $baiduXML); if ( strpos($res, "<int>0</int>") ) { header ("Location:http://你的网址/forum.php?mod=viewthread&tid=$canshu"); } else { header ("Location:http://你的网址/forum.php?mod=viewthread&tid=$canshu#"); } ?>
原理同上,就不再解释了。
接下来还要修改一个文件,登陆FTP,找到source\include\post\post_newthread.php 这个文件:
如果是Discuz X2,则搜索代码:
showmessage('post_newthread_succeed', "forum.php?mod=viewthread&tid=$tid&extra=$extra", $param);
替换为:
showmessage('post_newthread_succeed', "ping文件的名称.php?action=$tid", $param);
红色地方改为你自定义的PHP文件名即可。
如果是Discuz X2.5,则搜索代码:
showmessage('post_newthread_succeed', $returnurl, $values, $param);
替换为:
showmessage('post_newthread_succeed', "ping文件的名称.php?action=$tid", $values, $param);
修改同上,保存后,覆盖source\include\post\post_newthread.php文件即可。
Ping功能验证
文件都修改添加好之后,需要验证一下我们的功能是否添加成功,一种简单的验证方法就是发布一个新帖,然后看看发布后该帖子的URL链接最后有没有个#号,如果没有,则表示成功了,如果有#号,则表示出错了,需要再检查一下自己的操作。
另外还可以通过访问http://你的网址/ping文件的名称.php?action=任意新帖子ID,这样的链接格式,不成功的话,网址后面同样会有#号。
经金华测试成功,共享给大家。
Ping功能的好处在于可以实时的通知搜索引擎进行爬行,如果帖子符合搜索引擎的要求,则会第一时间收录。Ping功能也不再是博客专享了,有兴趣的不妨自己试一下,一段时间后,会更新测试的结果,看看收录是否增加了。