找回密码
 快速注册
搜索
查看: 239|回复: 2

如何在"帖子打印"页面使用自定义bbcode

[复制链接]

3147

主题

8384

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65372
QQ

显示全部楼层

hbghlyj 发表于 2022-1-4 22:17 |阅读模式
本帖最后由 hbghlyj 于 2022-1-16 02:19 编辑 首先我们知道:
  • 在Discuz后台的界面-编辑器设置-Discuz!代码可以定义本论坛的自定义bbcode.
  • discuz的php源代码文件source/function/function_discuzcode.php定义了discuzcode这个函数用于将数据库中的开启了bbcode的帖子中的bbcode转换为html,这里的bbcode包括discuz内置的bbcode(如,b,i,list,table),也包括论坛自定义的bbcode,因此,在浏览帖子(viewthread)页面就能显示出这两种bbcode了.
  • discuz的php源代码文件source/include/thread/thread_printable.php中使用了discuzcode这个函数,将bbcode转换为html.

但是,在打印页面(viewthread_printable),discuz内置的bbcode是正确转换为html的,而论坛自定义的bbcode却没有转换??这个原理我不清楚.但是,可以在thread_printable.php的调用discuzcode的这行代码
  1.         $post['message'] = discuzcode($post['message'], $post['smileyoff'], $post['bbcodeoff'], sprintf('%00b', $post['htmlon']), $_G['forum']['allowsmilies'], $_G['forum']['allowbbcode'], $_G['forum']['allowimgcode'], $_G['forum']['allowhtml'], ($_G['forum']['jammer'] && $post['authorid'] != $_G['uid'] ? 1 : 0));
复制代码
之后加入
  1.         loadcache('bbcodes');
  2.         $post['message'] = preg_replace($_G['cache']['bbcodes'][9]['searcharray'], $_G['cache']['bbcodes'][9]['replacearray'],$post['message']);
复制代码
其中的loadcache是调用系统缓存(参见Discuz资料库-参数读取),9是groupid,是设置论坛自定义bbcode时所设置的"允许使用该bbcode的用户组"的编号.
注意:必须要在调用discuzcode的这行代码之后加入代码.如果在它之前加的话,调用discuzcode这个函数时就会把<转换为&lt;

3147

主题

8384

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65372
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-1-16 02:05
本帖最后由 hbghlyj 于 2022-1-16 02:13 编辑 function_discuzcode.php代码片段:
  1.                 $message = str_replace(array(
  2.                         '[/color]', '[/backcolor]', '[/size]', '[/font]', '[/align]', '[b]', '[/b]', '[s]', '[/s]', '[hr]', '[/p]',
  3.                         '[i=s]', '[i]', '[/i]', '[u]', '[/u]', '[list]', '[list=1]', '[list=a]',
  4.                         '[list=A]', "\r\n[*]", '[*]', '[/list]', '[indent]', '[/indent]', '[/float]'
  5.                         ), array(
  6.                         '</font>', '</font>', '</font>', '</font>', '</div>', '<strong>', '</strong>', '<strike>', '</strike>', '<hr class="l" />', '</p>', '<i class="pstatus">', '<i>',
  7.                         '</i>', '<u>', '</u>', '<ul>', '<ul type="1" class="litype_1">', '<ul type="a" class="litype_2">',
  8.                         '<ul type="A" class="litype_3">', '<li>', '<li>', '</ul>', '<blockquote>', '</blockquote>', '</span>'
  9.                         ), preg_replace(array(
  10.                         "/\[color=([#\w]+?)\]/i",
  11.                         "/\[color=((rgb|rgba)\([\d\s,]+?\))\]/i",
  12.                         "/\[backcolor=([#\w]+?)\]/i",
  13.                         "/\[backcolor=((rgb|rgba)\([\d\s,]+?\))\]/i",
  14.                         "/\[size=(\d{1,2}?)\]/i",
  15.                         "/\[size=(\d{1,2}(\.\d{1,2}+)?(px|pt)+?)\]/i",
  16.                         "/\[font=([^\[\<]+?)\]/i",
  17.                         "/\[align=(left|center|right)\]/i",
  18.                         "/\[p=(\d{1,2}|null), (\d{1,2}|null), (left|center|right)\]/i",
  19.                         "/\[float=left\]/i",
  20.                         "/\[float=right\]/i"
  21.                         ), array(
  22.                         "<font color=\"\\1\">",
  23.                         "<font style=\"color:\\1\">",
  24.                         "<font style=\"background-color:\\1\">",
  25.                         "<font style=\"background-color:\\1\">",
  26.                         "<font size=\"\\1\">",
  27.                         "<font style=\"font-size:\\1\">",
  28.                         "<font face=\"\\1\">",
  29.                         "<div align=\"\\1\">",
  30.                         "<p style=\"line-height:\\1px;text-indent:\\2em;text-align:\\3\">",
  31.                         "<span style=\"float:left;margin-right:5px\">",
  32.                         "<span style=\"float:right;margin-left:5px\">"
  33.                         ), $message));
复制代码
list=1的效果
  • 项目1
  • 项目2

list=a的效果
  • 项目1
  • 项目2

list=A的效果
  • 项目1
  • 项目2

3147

主题

8384

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65372
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2022-1-16 02:20
本帖最后由 hbghlyj 于 2022-1-16 02:26 编辑 list-style-type自定义:带小括号的marker
  • 项目1
  • 项目2

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 19:15

Powered by Discuz!

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