Discuz! 论坛程序无疑是国内用户数最多的一款,其次是 phpwind,这个从平时上网浏览的社区论坛类网站就能感觉出来,浏览了好多个论坛,其中可能只有一两个是 phpwind 的,其余全是用的 Discuz。

Discuz 的用户数如此之多,所以程序方面的一些问题也都比较有共性,很容易找到解决方案,基本上都是一搜一大把。在此我只挑几块我认为比较基本的修改和设置做简要说明。

本文中所有演示均已目前最新版本的Discuz程序(Discuz! X3.2)为标准,其他版本可能有细小的差别。

1、论坛伪静态

伪静态据说有利于 SEO,其实是否伪静态并没有什么区别,仅仅是伪静态主观上看起来好看而已。

要设置伪静态非常简单,选定自己想要设置伪静态的条目,然后复制 Rewrite 规则到自己的服务器的相应配置文件即可。

设置 Rewrite 条目

Rewrite 规则

2、去掉标题后面的“Powered by Discuz!”

这个非常碍眼,好多网站都默认带着这么个尾巴,很不好看,所以这个一定要去除。这一部分对应的文件是 /template/default/common/header_common.htm,找到

<title><!--{if !empty($navtitle)}-->$navtitle - <!--{/if}--><!--{if empty($nobbname)}--> $_G['setting']['bbname'] - <!--{/if}--> Powered by Discuz!</title>

这一行,按照下面截图中的方式修改即可。左边是修改前的,右侧是修改后的,红色小框中是要删掉的部分,绿色小块中的是要添加的。

header_common

3、更改底部的“Powered by Discuz!”

论坛底部的版权信息最好保留,包括链接,不过我们可以在链接上加一个 rel="nofollow"。或者也可以把链接改为自己站点的网址,但是“Powered by Discuz!”一行字务必要保留,如果彻底删除就不太好了,:-)

这一部分对应的文件是 /template/default/common/footer.htm

4、去掉论坛右下角的防水墙小图标

论坛右下角带着一个防水墙的小图标,如果不需要的话,可以去除,对应文件为 /source/plugin/security/security.class.php,如下图,可以直接删除,也可以改成其他的。

security.class.php

5、更改帖子标题的长度限制

好多网友使用的 Discuz 是 UTF-8 版的,而在 UTF-8 下一般常见汉字会占用3个字节,这样程序预设的最大80字符的长度对于汉字长标题来说就有些短了。

这一块总共要修改五大部分,一定要仔细,以防缺漏,以修改成 180 字符长度为例:

  1. 修改数据库

    执行下面的SQL语句,更改数据库,注意表前缀。

    ALTER TABLE `pre_forum_post` CHANGE `subject` `subject` VARCHAR(180) NOT NULL;
    ALTER TABLE `pre_forum_rsscache` CHANGE `subject` `subject` char(180) NOT NULL;
    ALTER TABLE `pre_forum_thread` CHANGE `subject` `subject` char(180) NOT NULL;
    
  2. 修改 .js 验证文件

    (1)、修改文件 static/js/forum_post.js 中的 75-81 行,将“80”改成“180”:

    if(($('postsubmit').name != 'replysubmit' && !($('postsubmit').name == 'editsubmit' && !isfirstpost) && theform.subject.value == "") || !sortid && !special && trim(message) == "") {
        showError('抱歉,您尚未输入标题或内容');
        return false;
    } else if(mb_strlen(theform.subject.value) > 80) {
        showError('您的标题超过 80 个字符的限制');
        return false;
    }
    

    (2)、修改 static/js/forum.js 中的 212-218 行,将“80”改成“180”:

    if(theform.message.value == '' || theform.subject.value == '') {
        s = '抱歉,您尚未输入标题或内容';
        theform.message.focus();
    } else if(mb_strlen(theform.subject.value) > 80) {
        s = '您的标题超过 80 个字符的限制';
        theform.subject.focus();
    }
    
  3. 修改模板文件中的限制字符数

    (1)、修改文件 /template/default/forum/post_editor_extra.htm 中的26-32行,将“80”改为“180”,注意总共有5处

    <span><input type="text" name="subject" id="subject" class="px" value="$postinfo[subject]" {if $_GET[action] == 'newthread'}onblur="if($('tags')){relatekw('-1','-1'{if $_G['group']['allowposttag']},function(){extraCheck(4)}{/if});doane();}"{/if} onkeyup="strLenCalc(this, 'checklen', 80);" style="width: 25em" tabindex="1" /></span>
    <!--{else}-->
    <span id="subjecthide" class="z">RE: $thread[subject] [<a href="javascript:;" onclick="display('subjecthide');display('subjectbox');$('subject').value='RE: {echo dhtmlspecialchars(str_replace('\'', '\\\'', $thread[subject]))}';display('subjectchk');strLenCalc($('subject'), 'checklen', 80);return false;">{lang modify}</a>]</span>
    <span id="subjectbox" style="display:none"><input type="text" name="subject" id="subject" class="px" value="" onkeyup="strLenCalc(this, 'checklen', 80);" style="width: 25em" /></span>
    <!--{/if}-->
    <span id="subjectchk"{if $_GET[action] == 'reply'} style="display:none"{/if}>{lang comment_message1} <strong id="checklen">80</strong> {lang comment_message2}</span>
    <script type="text/javascript">strLenCalc($('subject'), 'checklen', 80)</script>
    

    (2)、修改 /template/default/forum/forumdisplay_fastpost.htm 中的31-32行,将“80”改成“180”:

    <input type="text" id="subject" name="subject" class="px" value="" onkeyup="strLenCalc(this, 'checklen', 80);" tabindex="11" style="width: 25em" />
    <span>{lang comment_message1} <strong id="checklen">80</strong> {lang comment_message2}</span>
    
  4. 修改 PHP 文件中的长度验证代码

    修改文件 source/function/function_post.php 中的361-363行,将“80”改成“180”:

    if(dstrlen($subject) > 80) {
        return 'post_subject_toolong';
    }
    
  5. 修改语言包中的提示文字

    修改 source/language/lang_messege.php 的第998行,将“80”改成“180”:

    'post_subject_toolong' => '抱歉,您的标题超过 80 个字符修改标题长度',
    

6、修改附件名称的长度限制

同理,附件名称的长度限制也太短了,如果上传的附件的名称太长,程序会自动截断,这样附件名称就不全了。此处只需要修改 /source/class/discuz/discuz_upload.php 中的第43-46行,把这两个数适当改大即可,建议最大不要超过210,以防数据库中有限制(此处具体我没细看,这个数值是网上的某个帖子说的,不过改成两倍大小后基本就够用了):

$attach['name'] =  dhtmlspecialchars($attach['name'], ENT_QUOTES);
if(strlen($attach['name']) > 90) {
    $attach['name'] = cutstr($attach['name'], 80, '').'.'.$attach['ext'];
}

7、修改模板,让附件名称换行显示

因为前面把附件名称改长了,上传之后发现很长的附件名称显示起来却没有换行,都超出帖子边界了,检查显示此处并不是由独立 css 文件控制,而是写在模板中了,如下图,可以修改模板 /template/default/forum/discuzcode.htm,改成 style="white-space: normal" 即可。

style-nowrap

discuzcode.htm

8、修改 css,去掉 list 的自带样式

使用过程中发现,帖子中的 list 显示出来丑的很(帖子用的 HTML 代码模式),因为都指定了 list-style-type 和 margin(不是浏览器默认的,而是论坛模板本身也指定了),所以需要把样式改一下,文件在 /template/default/common/module.css,此处按照自己想要的样子来改即可。

module.css

9、修改搜索页面底部的“Powered by Discuz!” 和 “Comsenz Inc.”

这个和前面第3条一样,对应文件是 /template/default/search/footer.htm

10、更改标题(帖子、文章等)高亮的颜色

Discuz 默认有 9 种高亮颜色,如下图,我们可以通过替换相应颜色代码值来替换其中某个颜色或者将其全部替换,通过搜索发现总共有 12 个文件包含高亮颜色代码(共 13 处代码):

帖子高亮颜色

帖子高亮颜色代码

接下来只需要对应修改就可以了,注意颜色值一定要对应

11、更改 meta(元数据) 中的 “generator”、“author”、“copyright” 等信息

Discuz 默认的部分 meta(元数据) 如下图:

Discuz 默认的 meta(元数据) 信息

通过搜索,发现这部分存在于以下四个文件中:

要修改的 meta(元数据) 存在于四个文件中

只需要把上面这几个文件中的 meta(元数据) 改成自己想要的就行了,也可以直接删掉。

好了,目前先放这 11 条,后续发现有什么需要修改的地方会接着更新本文。