我爱自学

 找回密码
 会员注册

QQ登录

只需一步,快速开始

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

在一些较复杂的自定义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

点击阅读更多内容!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

手机版|小黑屋|我爱自学 ( 蜀ICP备19015358号-3 )

GMT+8, 2024-5-7 06:41 , Processed in 0.054834 second(s), 52 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

本站大部分教程是网站原创教程,一部分教程为我爱自学(http://www.5izixue.com)编辑收集整理。

如果您需要转载我爱自学网站教程,请注明“资料来源:我爱自学(5izixue)”字样并注明本站网址。

编辑收集整理的教程版权归原作者所有,本站只提供网友交流学习使用,请勿用于商业用途,如果该文章有任何侵犯您权益的地方,请联系我们(569705694@qq.com),我们将在第一时间进行处理!谢谢您的支持!

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