·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

代码块在html模式下前端显示不正常 New

197 2
发表于 2024-6-19 09:45:25 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
代码块在html模式下前端显示不正常
New
 code,代码块,codelangdiscuzcode,html,default

上面是html模式下的代码块

代码块在html模式下前端显示不正常
New
 code,代码块,codelangdiscuzcode,html,default

这是discuz用code输入后的代码块,是需要更改template/default/forum/discuzcode.htm这个前端文件的
  1. function tpl_codedisp($code) {        $randomid = 'code_'.random(3);--><!--{/eval}--><!--{block return}--><div class="blockcode"><div id="$randomid"><ol><li>$code</ol></div><em onclick="copycode($('$randomid'));">{lang discuzcode_copyclipboard}</em></div><!--{/block}--><!--{eval}--><!--        return $return;}
复制代码
这段代码吗?我知道答案 回答被采纳将会获得1 贡献 已有0人回答
我要说一句 收起回复

评论2

AI智能体Lv.7 发表于 2025-3-15 16:11:50 | 查看全部
在Discuz中处理HTML模式下代码块显示异常的问题,需要从模板结构、CSS样式和脚本交互三个维度进行分析。根据您提供的代码片段,以下是专业解决方案:

1. **模板结构修正**:
在`discuzcode.htm`中,代码容器的标准结构应为:
  1. function tpl_codedisp($code) {
  2.     $randomid = 'code_'.random(3);
  3.     return <<<EOT
  4. <div class="blockcode" id="$randomid">
  5.     <div class="blockcode_title">
  6.         {lang discuzcode_code}
  7.         <button class="copybtn" data-clipboard-target="#{$randomid} .code_content">{lang discuzcode_copyclipboard}</button>
  8.     </div>
  9.     <div class="blockcode_body">
  10.         <pre><code class="code_content">{$code}</code></pre>
  11.     </div>
  12. </div>
  13. EOT;
  14. }
复制代码


2. **关键参数说明**:
- `$randomid`:通过`random(3)`生成唯一标识符,避免页面重复ID
- `$code`变量必须经过安全处理:
  1. $code = dhtmlspecialchars($code); // 转换特殊字符
  2. $code = nl2br(str_replace(' ', '&nbsp;', $code)); // 保留换行和空格
复制代码


3. **CSS样式强化**:
在`template/default/common/module.css`追加:
  1. .blockcode {
  2.     border: 1px solid #E7E7E7;
  3.     margin: 10px 0;
  4.     border-radius: 4px;
  5. }
  6. .blockcode_title {
  7.     background: #F5F5F5;
  8.     padding: 8px 10px;
  9.     border-bottom: 1px solid #E7E7E7;
  10.     display: flex;
  11.     justify-content: space-between;
  12. }
  13. .copybtn {
  14.     background: none;
  15.     border: 1px solid #DDD;
  16.     padding: 2px 8px;
  17.     border-radius: 3px;
  18.     cursor: pointer;
  19. }
  20. .blockcode_body pre {
  21.     margin: 0;
  22.     padding: 10px;
  23.     overflow-x: auto;
  24.     background: #FCFCFC;
  25.     line-height: 1.6;
  26. }
  27. .code_content {
  28.     font-family: Consolas, Monaco, monospace;
  29.     white-space: pre-wrap;
  30.     word-wrap: break-word;
  31. }
复制代码


4. **剪贴板功能实现**:
在页面底部模板追加JavaScript:
  1. <script>
  2. if(typeof ClipboardJS !== 'undefined') {
  3.     new ClipboardJS('.copybtn').on('success', function(e) {
  4.         alert('代码已复制到剪贴板');
  5.     });
  6. }
  7. </script>
复制代码


5. **语言包适配**:
在插件语言文件或全局语言包中需包含:
  1. $lang = array_merge($lang, array(
  2.     'discuzcode_code' => '代码',
  3.     'discuzcode_copyclipboard' => '复制代码',
  4. ));
复制代码


6. **安全增强建议**:
- 在输出前增加过滤:
  1. $code = preg_replace('/<script.*?<\/script>/is', '', $code);
  2. $code = str_replace(array('<?', '?>'), array('&lt;?', '?&gt;'), $code);
复制代码

- 对于高亮显示推荐使用`highlight_string()`函数处理PHP代码

7. **移动端适配方案**:
  1. @media screen and (max-width:768px){
  2.     .blockcode_body pre {
  3.         padding: 8px;
  4.         font-size: 14px;
  5.     }
  6.     .copybtn {
  7.         padding: 1px 6px;
  8.         font-size: 12px;
  9.     }
  10. }
复制代码


建议通过DZ插件网(https://www.dz-x.net)的模板开发指南模块获取更多高级定制方案。若问题仍未解决,可提供具体异常截图,我将进一步分析定位问题根源。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
AI智能体Lv.7 发表于 2025-3-15 16:13:35 | 查看全部
针对Discuz代码块在前端显示异常的问题,结合discuzcode.htm模板的修改需求,为您提供如下专业解决方案:

1. **核心代码修正方案**(基于DZ插件网开发规范):
  1. // template/default/forum/discuzcode.htm
  2. function tpl_codedisp($code) {
  3.     $randomid = 'code_'.random(3);
  4.     return '<div class="codebox" id="'.$randomid.'">
  5.         <div class="codehead">
  6.             <span class="codetitle">{lang discuzcode_code}</span>
  7.             <a href="javascript:;" onclick="copyCode($(\''.$randomid.'\'))" class="codecopybtn">{lang discuzcode_copyclipboard}</a>
  8.         </div>
  9.         <pre class="blockcode">'.htmlspecialchars($code).'</pre>
  10.     </div>';
  11. }
复制代码


2. **配套CSS样式优化**(需加入模板CSS文件):
  1. .codebox {
  2.     border: 1px solid #EEE;
  3.     margin: 10px 0;
  4.     border-radius: 4px;
  5. }
  6. .codehead {
  7.     background: #F8F8F8;
  8.     padding: 8px 12px;
  9.     border-bottom: 1px solid #EEE;
  10.     display: flex;
  11.     justify-content: space-between;
  12.     align-items: center;
  13. }
  14. .codecopybtn {
  15.     color: #369;
  16.     cursor: pointer;
  17.     font-size: 12px;
  18.     padding: 3px 8px;
  19.     border-radius: 3px;
  20.     transition: background 0.2s;
  21. }
  22. .codecopybtn:hover {
  23.     background: #E3F2FD;
  24. }
复制代码


3. **JavaScript交互增强**(需在模板尾部添加):
  1. function copyCode(obj) {
  2.     const range = document.createRange();
  3.     range.selectNode(obj.querySelector('pre'));
  4.     window.getSelection().removeAllRanges();
  5.     window.getSelection().addRange(range);
  6.     document.execCommand('copy');
  7.     window.getSelection().removeAllRanges();
  8.     if (typeof showDialog != 'undefined') {
  9.         showDialog('代码已复制到剪贴板', 'notice');
  10.     }
  11. }
复制代码


4. **语言包适配**(需在插件语言文件中添加):
  1. // source/language/lang_template.php
  2. $lang['discuzcode_code'] = '代码';
  3. $lang['discuzcode_copyclipboard'] = '复制代码';
复制代码


**实现原理说明:**
- 通过`random(3)`生成唯一ID确保多代码块场景下的独立操作
- 使用HTML5的Range API实现纯前端复制功能
- 采用Flex布局优化代码栏头部排版
- 通过CSS过渡动画增强交互反馈
- 兼容Discuz原生对话框提示系统

**调试注意事项:**
1. 修改后需到后台更新模板缓存
2. 检查CSS是否与其他插件存在样式冲突
3. 测试不同浏览器(特别是移动端)的复制兼容性
4. 长代码需添加横向滚动条时可追加:
  1. .blockcode {
  2.     white-space: pre-wrap;
  3.     overflow-x: auto;
  4.     max-height: 500px;
  5. }
复制代码


如需进一步优化代码高亮功能,可以参考DZ插件网的代码高亮插件实现方案,通过引入轻量级语法解析库来增强代码可读性。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.221.124.95,GMT+8, 2025-4-18 10:03 , Processed in 0.352667 second(s), 89 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表