Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

DNSPod 年终盛典 - 全年最低价,不只是 1 折!1 元就能买域名,DNS 套餐仅需 6 元,更有超值代金券礼包!
搜索
查看: 2275|回复: 4

[求助] Discuz 3.3/3.4发帖编辑器回车两次及换行提交后无效等问题解决方法

[复制链接]
发表于 2019-4-25 14:03:57 | 显示全部楼层 |阅读模式
DNSPod 年终盛典 - 全年最低价,不只是 1 折!1 元就能买域名,DNS 套餐仅需 6 元,更有超值代金券礼包!
本帖最后由 howfarstudio 于 2019-4-25 14:05 编辑

拿了官网N年经验,能解决的,都发上来分享下,亲测可用
---------------------------------------------------------------------


具体症状:

无论是DZ官方默认模板还是其他模板,在初次编辑帖子的时候,已经排好段落换行的,发布后经常出现换行消失,比如回车一次和两次的,提交后会发现换行有可能生效,更可能没有变化,
尤其是图文排版,文字和图片直接的空行很难控制,经常要反复编辑两三次,费时费力。

这个问题已经困扰了几年,由于水平问题一直没有勇气去解决,以下解决方法参考sunguide的方法,非常简单的解决了,在此感谢!


解决方法:

找到static/js/bbcode.js,搜索if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {,在这行下方大约315行的下方(Discuz X3.4)加入以下代码:

  1. //fix first enter cannot start new line
  2. var divPos = strpos(str,"<div>");
  3. if(divPos > 0 ){
  4. if(divPos > 4 && str.substr(divPos - 4,4) == '</p>'){}
  5. else{
  6. str = str.substr(0,divPos) + '<br>'+ str.substr(divPos);
  7. }
  8. }
  9. //end
复制代码
本段修改前后对比如下:

修改前:

  1. if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
  2. for(i in EXTRAFUNC['html2bbcode']) {
  3. EXTRASTR = str;
  4. try {
  5. eval('str = ' + EXTRAFUNC['html2bbcode'][i] + '()');
  6. } catch(e) {}
  7. }
  8. str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smileycode($3);});
  9. str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
  10. return str;
  11. }
复制代码
修改后:

  1. if((allowhtml && fetchCheckbox('htmlon')) || trim(str) == '') {
  2. for(i in EXTRAFUNC['html2bbcode']) {
  3. EXTRASTR = str;
  4. try {
  5. eval('str = ' + EXTRAFUNC['html2bbcode'][i] + '()');
  6. } catch(e) {}
  7. }
  8. str = str.replace(/<img[^>]+smilieid=(["']?)(\d+)(\1)[^>]*>/ig, function($1, $2, $3) {return smileycode($3);});
  9. str = str.replace(/<img([^>]*aid=[^>]*)>/ig, function($1, $2) {return imgtag($2);});
  10. return str;
  11. }

  12. //fix first enter cannot start new line
  13. var divPos = strpos(str,"<div>");
  14. if(divPos > 0 ){
  15. if(divPos > 4 && str.substr(divPos - 4,4) == '</p>'){}
  16. else{
  17. str = str.substr(0,divPos) + '<br>'+ str.substr(divPos);
  18. }
  19. }
  20. //end
复制代码


方法出处:https://segmentfault.com/a/1190000009142976  再次感谢!

发表于 2019-4-25 16:30:29 | 显示全部楼层
  感谢分享!!
回复

使用道具 举报

发表于 2019-4-25 17:00:44 | 显示全部楼层
换行异常的问题,官方之前修复过:
https://gitee.com/ComsenzDiscuz/ ... 5103b3d1271a08efa0e

不过这个fix会带来别的问题,官方又撤销了这个fix
回复

使用道具 举报

发表于 2019-4-25 19:37:14 | 显示全部楼层
不过还可以这样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

腾讯云市场年终大促!Discuz X3.4论坛系统免费用,虚拟主机低至20元/月,爆款小程序1元起!

QQ|小黑屋|Discuz! 官方站 ( 粤B2-20090059-165 )star

GMT+8, 2019-12-13 21:32

Powered by Discuz! X3.3

Copyright © 2001-2019 Tencent Cloud.

快速回复 返回顶部 返回列表