请选择 进入手机版 | 继续访问电脑版
开启辅助访问
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

点击进入授权页面

只需一步,快速开始

[Discuz教程] discuzX2有关Archiver的代码分析

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



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

复制代码

Discuz! X1.5 的区别在于,Discuz!X1.5 直接访问 forum.php,在文件里判断识别是否 IN_ARCHIVER。

Discuz! X2.0 版本中,希望 Archiver 能够过滤掉 bbcode 但是留下所有包含在 bbcode 中的内容。下面看看代码中是如何处理的,这个功能主要是 archivermessage();函数实现的。



  • function archivermessage($message) {
  • return nl2br(preg_replace(
  • array('/&(#d{3,5};)/', "/[hide=?d*](.+?)[/hide]/is", "/[/?w+=?.*?]/"),
  • array('&1','**** Hidden Message *****',''),//标签[][/]替换为空
  • str_replace(
  • array('&', '"', '', "t", ' ', ' '),
  • array('&', '"', '', ' ', ' ', ' '),
  • $message)));
  • }

复制代码

红色部分即为正则替换掉的标签部分。如果为了方便想通过 Archiver 做数据采集等可直接去掉相应代码即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

快速回复 返回列表 客服中心





企业站定制,我们更专业!

联系我们
快速回复 返回顶部 返回列表