我和大多数草根站长一样,热衷于 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]'