背景
Discuz的标题字数默认是80字,很显然80字在一些情况下可能不太够用,我们来修改一下字数上限,提升至200字。
一、修改前的准备
-
备份:务必备份数据库和所有即将修改的 PHP、模板、JS 文件。
-
环境:确保有管理员权限访问 FTP 或服务器文件系统,并能登录数据库(如 phpMyAdmin)。
二、修改PHP文件
第 1 步:修改模板文件 post_editor_extra.htm
-
路径:
template/default/forum/post_editor_extra.htm -
操作:搜索
80,将提示文字中的80改为200 -
提示:搜索显示5个第一个不是的把下面的这些四个80改成200即可
<span><input type="text" name="subject" id="subject" class="px" value="$postinfo[subject]" onkeyup="strLenCalc(this, 'checklen', 200);" style="width: 25em" tabindex="1" /></span> <!--{else}--> <span id="subjecthide" class="z">RE: $thread[subject] [<a href="javascript:;" onclick="display('subjecthide');display('subjectbox');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', 200);" style="width: 25em" /></span> <!--{/if}--> <span id="subjectchk"{if $_GET[action] == 'reply'} style="display:none"{/if}>{lang comment_message1} <strong id="checklen">200</strong> {lang comment_message2}</span> <script type="text/javascript">strLenCalc($('subject'), 'checklen', 200)</script>
第 2 步:修改模板文件 forumdisplay_fastpost.htm
-
路径:
template/default/forum/forumdisplay_fastpost.htm -
操作:搜索
80,将提示文字中的80改为200 - 提示:会搜索出4个,只需要把这里的两个80改成200即可
<input type="text" id="subject" name="subject" class="px" value="" onkeyup="strLenCalc(this, 'checklen', 200);" tabindex="11" style="width: 25em" /> <span>{lang comment_message1} <strong id="checklen">200</strong> {lang comment_message2}</span>
第 3 步:修改语言包文件 lang_message.php
-
路径:
source/language/lang_message.php -
操作:搜索
80,找到错误提示'您的标题超过 80 个字符的限制',将80改为200 - 提示:这里只有一个地方要改搜索post_subject_toolong或者搜索80或者'抱歉,您的标题超过 200 个字符修改标题长度',都可以找到
第 4 步:修改 PHP 验证文件 function_post.php
-
路径:
source/function/function_post.php -
操作:搜索
dstrlen($subject) > 80,将80改为200 - 提示:这里只有一个地方要改
if(dstrlen($subject) > 200) { return 'post_subject_toolong'; }
第 5 步:修改 JS 验证文件 forum_post.js
-
路径:
static/js/forum_post.js -
操作:搜索
mb_strlen(theform.subject.value) > 80,将80改为200;同时将错误提示中的80改为200 - 提示:这里只有一个地方要更改,把这两个80改成200即可
else if(mb_strlen(theform.subject.value) > 200) { showError('您的标题超过 200 个字符的限制'); return false; }
第 6 步:修改 JS 验证文件 forum.js
-
路径:
static/js/forum.js -
操作:搜索
mb_strlen(theform.subject.value) > 80,将80改为200;同时将错误提示中的80改为200 - 提示:这里只有这一个地方需要更改,把这两个80改成200即可,它们在一个地方很好找
if(theform.message.value == '' || theform.subject.value == '') { s = '抱歉,您尚未输入标题或内容'; theform.message.focus(); } else if(mb_strlen(theform.subject.value) > 200) { s = '您的标题超过 200 个字符的限制'; theform.subject.focus(); }
二、修改数据库
数据库字段长度限制是最终的瓶颈。即使 PHP、JS、模板都已修改允许 200 字符,但数据库字段仍为 VARCHAR(80) 或 CHAR(80),超出的标题会被截断或报错。因此,数据库修改必须作为最后一步,在完成所有文件修改后执行
第 7 步:通过 Discuz 后台执行 SQL 语句
1、开启后台 SQL 执行权限
Discuz 默认关闭后台直接执行 SQL 的功能,需要先开启。
通过 FTP 或服务器文件管理器打开 config/config_global.php 文件。
找到以下代码行(通常在文件后半部分):
$_config['admincp']['runquery'] = 0;
将 0 改为 1:
$_config['admincp']['runquery'] = 1;
保存文件。
2、进入后台数据库升级
使用管理员账号登录 Discuz 论坛后台(网址通常为 https://你的域名/admin.php)。
点击顶部菜单 “站长” → “数据库” → “升级”
如果看不到该菜单项,请检查 config_global.php 修改是否正确,并清除缓存。
3、执行 SQL 语句
在“数据库升级”页面的文本框中输入以下 SQL 语句(注意将 pre_ 替换为你自己的表前缀,如 discuz_、bbs_ 等):
①来源各大知名网站的
ALTER TABLE `pre_forum_post` CHANGE `subject` `subject` VARCHAR(200) NOT NULL;
ALTER TABLE `pre_forum_rsscache` CHANGE `subject` `subject` char(200) NOT NULL;
ALTER TABLE `pre_forum_thread` CHANGE `subject` `subject` char(200) NOT NULL;
②来源根据上面的语句AI优化后的
ALTER TABLE `pre_forum_post` MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';
ALTER TABLE `pre_forum_rsscache` MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';
ALTER TABLE `pre_forum_thread` MODIFY `subject` VARCHAR(200) NOT NULL DEFAULT '';
点击“提交”执行。正常情况下会提示 Query OK, xxx rows affected 类似信息。
建议:可逐条执行,以便出现错误时定位。
4、关闭后台 SQL 执行权限(安全建议)
执行完成后,建议将 config/config_global.php 中的 $_config['admincp']['runquery'] 改回 0,防止他人利用后台执行恶意 SQL。
三、清除缓存与验证
清除缓存
所有修改完成后,必须清除 Discuz 缓存:
-
后台 → 工具 → 更新缓存(全选后提交)
验证测试
-
发布新主题,输入一个 100~200 字符的标题。
-
检查是否可以成功发布,以及前端是否完整显示标题。
-
查看数据库
pre_forum_thread.subject字段,确认存储长度已超过 80 字符。
四、注意事项
-
备份数据库:在后台执行 SQL 语句前,强烈建议先通过“工具 → 备份”备份数据库。
-
旧帖子:数据库字段扩容后,已有帖子标题不会丢失,但原有标题不会超过 80 字符(因之前已被限制)。
-
其他插件:如果使用了门户(
pre_portal_article_title)或第三方插件,请一并检查并修改其独立标题字段。 -
后台设置:后台“全局 → 用户权限 → 帖子相关 → 标题最大长度”中的数值可能无法直接改为 200,忽略即可,因为代码修改已生效。
-
字符集:
VARCHAR(200)在 UTF-8 下可存储 200 个任意字符(中英文均按一个字符计算)。
本教程已完整包含 6 个文件修改 + 数据库修改,共 7 步。操作顺序为:
| 步骤 | 修改内容 | 文件路径 |
|---|---|---|
| 1 | 模板提示 | template/default/forum/post_editor_extra.htm |
| 2 | 模板提示 | template/default/forum/forumdisplay_fastpost.htm |
| 3 | 语言包错误提示 | source/language/lang_message.php |
| 4 | PHP 后端验证 | source/function/function_post.php |
| 5 | JS 前端验证 | static/js/forum_post.js |
| 6 | JS 前端验证 | static/js/forum.js |
| 7 | 数据库扩容 | 通过后台执行 SQL |
按照此顺序操作即可安全完成修改。
补充:更改后会显示200字符,不过GBK的标题最长大概是102个汉字,而UTF-8的标题最长大概是70个汉字左右,纯数字或者字母确确实实可以达到200个。