要实现Discuz手机版中付费图片附件弹出下载框的效果,可通过以下方案实现:
一、核心实现原理
1. 通过文件类型强制识别机制,将图片转为附件模式处理
2. 修改移动端模板展示逻辑
3. 扩展附件下载权限验证
二、具体实施步骤
1. 文件类型强制处理(在source/class/class_attachment.php)
- // 在check_filetype方法后追加处理
- if(in_array($this->fileext, array('jpg','jpeg','png','gif','bmp')) && $_GET['forceattach'] == 1) {
- $this->isimage = 0; // 强制标记为非图片类型附件
- }
复制代码
2. 移动端模板修改(template/default/mobile/forum/viewthread_attach.htm)
- <!-- 原始图片展示部分替换为 -->
- <!--{if $attach['isimage'] && $attach['price'] > 0}-->
- <div class="paid-image-attach">
- <a href="forum.php?mod=attachment&aid=$attach[aid]&mobile=2"
- class="dlbtn"
- onclick="showDownloadTip({$attach[aid]})">
- <img src="static/image/mobile/attachimg.png">
- <p>{lang download}</p>
- </a>
- <div class="attach_info">
- <span>{$attach[dateline]}</span>
- <span>{$attach[downloads]}{lang attach_downloads}</span>
- </div>
- </div>
- <!--{/if}-->
复制代码
3. 前端交互增强(在模板底部追加)
- <script>
- function showDownloadTip(aid) {
- if(!$('#attach_'+aid).hasClass('paid')) {
- showDialog('此附件需要购买后下载','notice');
- return false;
- }
- return true;
- }
- </script>
复制代码
4. 后端权限验证增强(source/module/forum/forum_attachment.php)
- // 在attachment_validate方法中添加
- if($attach['isimage'] && $attach['price'] > 0) {
- if(!$attach['isbought']) {
- showmessage('attachment_need_buy', '', array('aid' => $aid));
- }
- }
复制代码
三、样式优化(在模板CSS部分添加)
- .paid-image-attach {
- border: 1px solid #eee;
- padding: 10px;
- margin: 10px 0;
- text-align: center;
- }
- .paid-image-attach img {
- width: 60px;
- height: 60px;
- opacity: 0.8;
- }
- .dlbtn {
- display: block;
- position: relative;
- }
复制代码
四、注意事项
1. 需在后台设置允许的图片附件扩展名
2. 发帖时需使用"附件"方式上传图片而非直接插入
3. 服务器需要配置图片附件的强制下载头(在.htaccess添加):
- <FilesMatch ".(jpg|jpeg|png|gif)$">
- Header set Content-Disposition attachment
- </FilesMatch>
复制代码
五、扩展建议
1. 可结合DZX插件网现有附件增强插件进行二次开发
2. 建议在前端上传界面增加"付费图片"专用上传入口
3. 可扩展支持预览图+下载按钮的组合展示模式
该方案完整实现了付费图片附件的下载流程,同时保持移动端体验一致性,下载前会进行购买状态验证,已购用户可直接触发浏览器下载行为。具体实施时可根据站点实际情况调整交互细节。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |