根据Discuz插件开发规范,可通过以下步骤实现日志模块的媒体地址插入功能:
一、插件开发准备
1. 在插件目录创建`source/plugin/dzx_blogmedia`基础结构
2. 配置`plugin.xml`注册模块:
- <module name="blogmedia">
- <displayname>日志多媒体增强</displayname>
- <hookfiles>
- <file>hook.class.php</file>
- </hookfiles>
- </module>
复制代码
二、模板嵌入(参考页面嵌入文档)
在`hook.class.php`中添加手机版模板嵌入:
- class plugin_dzx_blogmedia {
- public function mobile_publish_extra() {
- global $_G;
- $return = '<div class="mb-3">
- <input type="text" name="picurl" class="form-control" placeholder="图片URL地址(支持jpg/png)">
- <input type="text" name="mediaurl" class="form-control mt-2" placeholder="MP3地址(支持http/https)">
- </div>';
- return $return;
- }
- }
复制代码
三、数据存储处理(参考参数读取文档)
创建数据表`pre_blog_media`:
- CREATE TABLE pre_blog_media (
- blogid mediumint(8) unsigned NOT NULL,
- picurl varchar(255) NOT NULL DEFAULT '',
- mediaurl varchar(255) NOT NULL DEFAULT '',
- PRIMARY KEY (blogid)
- ) ENGINE=MyISAM;
复制代码
四、数据入库(参考特殊主题文档)
在`hook.class.php`中添加:
- public function before_blog_insert($param) {
- $blogid = $param['blogid'];
- $picurl = dhtmlspecialchars(trim($_POST['picurl']));
- $mediaurl = dhtmlspecialchars(trim($_POST['mediaurl']));
-
- if(!empty($picurl) && !preg_match('/\.(jpg|png)$/i', $picurl)){
- showmessage('仅支持JPG/PNG格式图片');
- }
-
- if(!empty($mediaurl) && !preg_match('/\.mp3$/i', $mediaurl)){
- showmessage('仅支持MP3格式音频');
- }
- C::t('blog_media')->insert(array(
- 'blogid' => $blogid,
- 'picurl' => $picurl,
- 'mediaurl' => $mediaurl
- ));
- }
复制代码
五、前端展示处理
创建模板文件`template/mobile/plugin/dzx_blogmedia/view.htm`:
- <!--{if $blog['picurl']}-->
- <div class="blog-pic">
- <img src="$blog[picurl]" class="img-responsive">
- </div>
- <!--{/if}-->
- <!--{if $blog['mediaurl']}-->
- <div class="blog-audio">
- <audio controls>
- <source src="$blog[mediaurl]" type="audio/mpeg">
- </audio>
- </div>
- <!--{/if}-->
复制代码
六、钩子绑定(参考插件模块文档)
在`hook.class.php`中注册视图钩子:
- public function view_blog_content($param) {
- $blogid = $param['blogid'];
- $media = C::t('blog_media')->fetch($blogid);
- $param['message'] .= template('dzx_blogmedia:view', $media);
- return $param;
- }
复制代码
七、安全处理(参考注意事项文档)
1. 在`plugin.php`添加CSRF校验
2. 对输入URL做白名单过滤:
- function check_url($url) {
- $parsed = parse_url($url);
- if(!in_array($parsed['scheme'], array('http','https')) {
- return false;
- }
- return filter_var($url, FILTER_VALIDATE_URL);
- }
复制代码
完整实现方案已包含数据存储、前端展示和安全校验,站长可安装后通过手机版日志发布界面直接使用外链媒体功能。注意需要配置好服务器防盗链设置,建议在应用配置中增加域名白名单功能。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |