我和大多數草根站長一樣,熱衷於 discuz,但又對 PHP 不熟,也沒有專門的去學過,這個功能也是研究過很多天才研究出來.
下面就把版塊目錄化分享給大家,希望對喜歡這個功能的人有用.

QQ截圖未命名1.jpg

首先說明下,這是在 Apache Web Server(虛擬主機使用者) 環境下測試可以用的,其他環境未測式.如果你是 Apache 虛擬主機使用者的話並且主機支援偽靜態,那麼可以根據以下操作方法實現我們的"版塊目錄化".

第一步:
進入後臺--論壇--編輯版塊--基本設定--繫結別名.
這裡以上圖為例,我們填寫為"yizhi",當然你也可以填別的.

第二步:
後臺--全域性--SEO 設定--URL 靜態化.
將"論壇主題列表頁"格式更改為"{fid}/{page}", 然後勾選"可用"點選提交.

第三步:
編輯你網站目錄下偽靜態規則檔案".htaccess",如果沒有此檔案,下面附件我提供.

  1. RewriteRule
    ^forum-(w+)-([0-9]+).html$
    forum.php?mod=forumdisplay&fid=$1&page=$2&%1

更改為

  1. RewriteRule
    ^(w+)/([0-9]+)$
    forum.php?mod=forumdisplay&fid=$1&page=$2&%1

然後在最下行增加一句規則:

  1. RewriteCond %{QUERY_STRING}
    ^(.*)$
  2. RewriteRule ^(w+)/$ forum.php?mod=forumdisplay&fid=$1

這一句規則就是版塊目錄化規則.
第四步:
網站目錄:source/function/function_core.php
首先我們把這個檔案複製一份留作備份.以便你不需要此功能後可以直接恢復.
然後我們用 DW 編輯 function_core.php,
查詢程式碼:

  1.         if($type
    == 'forum_forumdisplay') {
  2.                 list(,,, $fid, $page, $extra) =
    func_get_args();
  3.                 $r = array(
  4.                         '{fid}' =>
    empty($_G['setting']['forumkeys'][$fid]) ? $fid :
    $_G['setting']['forumkeys'][$fid],
  5.                         '{page}' => $page ? $page : 1,
  6.                 );

  1. '{page}' => $page ? $page : 1,

更改為

  1. '{page}' => $page,

然後儲存.

最後一步,更新快取.到首頁看看效果吧,是不是實現版塊目錄化了呢?

關於版塊目錄化後版塊列表點選發貼按鈕不能發貼的解決方案:

第一種就是懶人方式:介面設定--全域性--啟用浮動視窗,勾選發貼

第二種:修改模板 forumdisplay.htm 和 forumdisplay_list.htm

查詢

  1. onclick="showWindow('newthread',
    'forum.php?mod=post&action=newthread&fid=$_G[fid]')"{else}
    onclick="location.href='forum.php?mod=post&action=newthread&fid=$_G[fid]'

在 forum.php 前加"/"

  1. onclick="showWindow('newthread',
    '/forum.php?mod=post&action=newthread&fid=$_G[fid]')"{else}
    onclick="location.href='/forum.php?mod=post&action=newthread&fid=$_G[fid]'