如何使Discuz [attachimg]代码正确解析

overme6个月前 (10-17)网页设计497
在一些较复杂的自定义Discuz!代码中,我们可能需要内嵌Discuz!自有的[attachimg]aid[/attachimg]代码。

案例:某视频播放器支持给每个视频设置一个图片封面,如果每次都上传图片到别处会很麻烦,而且无法将其设置为主题封面(显示在版块的图片列表模式中),而直接上传到论坛附件中又会在视频以外额外显示这张图片,我们需要将其隐藏,并且在游客禁止浏览附件的情况下也支持显示该图。

1、在 source/function/function_discuzcode.php 中自定义Discuz!代码。

例如,在

  1. if(strpos($msglower, ‘[/img]’) !== FALSE) {
  2.                         …
  3.                 }

复制代码

代码的后方增加:

  1. if(strpos($msglower, ‘[/oss]’) !== FALSE) {
  2.                         $message = preg_replace(“/\[oss]\s*(http[-:\.\w\/]{9,}\/)([-\.\w]+)(\.mp4)(\|(\[attach\]\d+\[\/attach\]))?\s*\[\/oss\]/ies”, “parsemp4(array(‘\\1′,’\\2′,’\\3′,’\\5’))”, message);
  3.                 }

复制代码

即可支持 [oss]视频地址.mp4|[attachimg]封面图Aid[/attachimg][/oss] 这段代码的解析。注意,发帖时插入的 [attachimg] 标签在写入数据库时实际被替换为 [attach] ,因此此处自定义代码中写 [attach] 即可。

然后增加一个 parsemp4 视频解析函数:

  1. function parsemp4($matches) {
  2.         global $_G;
  3.         //$matches[0].$matches[1].$matches[2] 为视频地址
  4.         //$matches[2] 封面图附件(可选)
  5.        
  6.         //以下解析出附件图片地址
  7.         if(preg_match(‘/^\[attach\](\d+)\[\/attach\]/’, $matches[2], $matches2match)) {
  8.                 $matches2attachment = C::t(‘forum_attachment_n’)->fetch(‘aid:’.$matches2match[1], $matches2match[1], 1)[‘attachment’]; //读取Aid的存储路径
  9.                 $matches[2] = $_G[‘setting’][‘attachurl’].’forum/’.$matches2attachment.’.thumb.jpg’; //动态地址-原图:parseattachurl($matches8match[1]);
  10.         }
  11.         //播放器代码…
  12. }

复制代码

相关说明:Discuz! X 根据Aid附件编号查询附件信息(存储路径等)的方法

2、解决禁止游客看图情况下,视频封面图片无法显示的问题。

打开 source/module/forum/forum_viewthread.php 文件,查找:

  1. $post[‘message’] = preg_replace(“/\[attach\](\d+)\[\/attach\]/i”, ”, $post[‘message’]);

复制代码

将其替换为:

  1. $post[‘message’] = preg_replace(“/\[attach\](\d+)\[\/attach\][^\[]/i”, ”, $post[‘message’]);

复制代码

修改后,在 [/attach] 后面还有 [ 的情况下不过滤该代码。

来源:https://www.vdazhang.com/wenzhang-2343.html

相关文章


		Discuz相关帖子功能开启方法

Discuz相关帖子功能开启方法

Discuz系统相同帖子功能,是非常不错的功能,可以根据标签,匹配相关内容供用户浏览. 如下图示: 在此分享相关帖子功能开启方法: 步骤1: 进入后台 -> 界面 ->界面设置-&...


		Discuz帖子内容页标题版块名称去除方法

Discuz帖子内容页标题版块名称去除方法

如下图红框所示,Discuz默认的帖子内容页标题格式中,带有版块名称. 这样的内容页标题结构,导致标题过长,百度等搜素引擎收录时,标题看不到站点名称. 如何去除标题中的版块名称呢? 试着修改h...

Discuz建站系统default目录结构说明

/template/default/common/  公共模板目录全局加载 /template/default/common/block_forumtree.htm  DIY论坛树形列表模块 /t...

Discuz关闭前台插件的更新提示教程

Discuz论坛系统,管理员每次登录论坛,遇到后台有没有更新的应用时,都会出现更新提醒,而且关了还会继续弹出。如下图所示,后台没有暂停更新提醒的选项,用户体验不是很好: 找到文件source/m...

Discuz密码错误15分钟后登陆解决方法

使用Discuz建网站时,会遇到这样的问题,就是当用户密码输错5次之后,Discuz就会提示“密码错误次数过多,请15分钟后登陆”。怎么解决这样的问题呢? 下面介绍一下Discuz“密码错误次数过...


		Discuz图片水印设置方法教程

Discuz图片水印设置方法教程

发布图片时,为了防止侵权盗用,或是为了宣传网址引流,需要添加在图片上添加水印。 在此分享Discuz系统图片水印设置方法: Discuz论坛的水印设置很简单,使用制作的水印图片覆盖系统水印地址,然...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。