Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

X2有关Archiver的代码分析

[复制链接]
vinsonwang 发表于 2011-2-28 11:11:20 | 显示全部楼层 |阅读模式
本帖最后由 vinsonwang 于 2011-2-28 12:00 编辑

*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************      

Archiver 为了提高搜索引擎收录,作为面向搜索引擎入口的同时,有些站长在不同的站之间也通过它来进行数据库的采集,之前版本的程序中并没有对 bbcode 进行解析,采集的数据原原本本的传到新站点,通过 bbcode 保留之前的文本格式,但X2在用户友好性方面对 archiver 做了改进,可以作为正常页面阅读,去掉了 bbcode 的标签,保留 bbcode 标签中的内容。站长想保留原格式文本,可以修改代码,下面就对X2 处理 bbcode 的方式介绍一下。Discuz! X2.0 中,为 Archiver 作了一个单独的入口,打开页面后会看到 Archiver 的链接为 http://xxxxx.com/archiver/默认情况下,直接访问 archiver 文件下的 index.php文件。下面就来看看 index.php 入口文件都有哪些内容:

  1. define('IN_ARCHIVER', 1);//定义为archiver状态。
  2. chdir('../');//把目录切换到上级目录状态。
  3. $querystring = $_SERVER['QUERY_STRING'];//取得上一操作的url第一个‘?’后的字符串。
  4. if(!empty($_GET['action'])) {
  5.          $querystring = $_GET['action'].'-'.$_GET['value'];//把&符号换成‘-’号。
  6. }
  7. if(substr($querystring, 0, 3) == 'fid') {//判断上方获得的字符串中的字段,并赋值操作。
  8.          $_GET['mod'] = 'forumdisplay';
  9.          $_GET['fid'] = intval(substr($querystring, 4));
  10. } elseif(substr($querystring, 0, 3) == 'tid') {
  11.          $_GET['mod'] = 'viewthread';
  12.          $_GET['tid'] = intval(substr($querystring, 4));
  13. }
  14. include 'forum.php';//引入上级目录的forum.php文件。
复制代码

Discuz! X1.5 的区别在于,Discuz!X1.5 直接访问 forum.php,在文件里判断识别是否 IN_ARCHIVER。
Discuz! X2.0 版本中,希望 Archiver 能够过滤掉 bbcode  但是留下所有包含在 bbcode 中的内容。下面看看代码中是如何处理的,这个功能主要是 archivermessage();函数实现的。

  1. function archivermessage($message) {
  2.          return nl2br(preg_replace(
  3.                             array('/&(#\d{3,5};)/', "/\[hide=?\d*\](.+?)\[\/hide\]/is", "/\[\/?\w+=?.*?\]/"),
  4.                             array('&\\1','<b>**** Hidden Message *****</b>',''),//标签[][/]替换为空
  5.                    str_replace(
  6.                             array('&', '"', '<', '>', "\t", '   ', '  '),
  7.                             array('&', '"', '<', '>', '        ', '   ', '  '),
  8.                    $message)));
  9. }
复制代码

红色部分即为正则替换掉的标签部分。如果为了方便想通过 Archiver 做数据采集等可直接去掉相应代码即可。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 00:53 , Processed in 0.019615 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表