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','<b>**** Hidden Message *****</b>',''),//標籤 [][/] 替換為空
- str_replace(
- array('&', '"', '<', '>', " ", ' ', ' '),
- array('&', '"', '<', '>', ' ', ' ', ' '),
- $message)));
- }
紅色部分即為正則替換掉的標籤部分。如果為了方便想通過 Archiver 做數據採集等可直接去掉相應代碼即可。