在 Discuz! 中,要实现“必须带图回帖才可见”的功能,通常需要借助插件或自定义开发。不过,也可以通过在模板中嵌入一些 JavaScript 代码和服务器端验证逻辑来实现基本功能。
以下是一个基本的实现思路,但请注意,这不是一个完整的解决方案,而是需要根据你的具体需求和 Discuz! 版本进行适当调整和完善的代码示例。
客户端(JavaScript)
在回帖表单提交前,你可以使用 JavaScript 来检查用户是否上传了图片。这可以通过检查表单中的文件输入字段(通常是 <input type="file">)来实现。
- $(document).ready(function() {
- $('#postsubmit').click(function() {
- var fileInput = $('input[type="file"]');
- if (fileInput[0].files.length === 0 || !fileInput[0].files[0].type.match('image.*')) {
- alert('请上传图片后再回帖');
- return false; // 阻止表单提交
- }
- });
- });
复制代码
上面的代码段会在用户点击提交按钮时检查文件输入字段中是否有图片文件。如果没有,则弹出一个警告并阻止表单提交。
服务器端
仅仅依赖客户端验证是不够的,因为用户可以禁用 JavaScript 或直接通过 HTTP 请求绕过客户端验证。因此,你还需要在服务器端进行验证。
在 Discuz! 中,这通常涉及到修改或扩展相关的 PHP 文件,如 source/plugin/your_plugin/your_plugin_post.inc.php(假设你创建了一个名为 your_plugin 的插件)。
在插件的 post_submit_before 钩子中,你可以添加代码来检查上传的图片:
- if(!empty($_FILES['attachment'][0]['name'])) {
- // 检查上传的文件是否为图片
- $image_types = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');
- $file_type = $_FILES['attachment']['type'];
- if(!in_array($file_type, $image_types)) {
- dheader("Location: " . discuz_encodeURL("forum.php?mod=post&action=reply&fid=$_GET[fid]&tid=$_GET[tid]&error=noimage"));
- exit;
- }
- } else {
- dheader("Location: " . discuz_encodeURL("forum.php?mod=post&action=reply&fid=$_GET[fid]&tid=$_GET[tid]&error=noimage"));
- exit;
- }
复制代码上面的代码检查 $_FILES['attachment'] 数组中是否有文件,并验证文件类型是否为图片。如果不是图片或没有文件,则重定向用户回帖子页面并附带一个错误参数。 注意- 这个示例代码可能需要根据你的 Discuz! 版本和具体需求进行调整。
- 客户端验证是为了提供更好的用户体验,但不应替代服务器端验证,因为客户端验证可以被绕过。
- 验证图片时,除了检查 MIME 类型,还应该考虑检查文件内容,以防止用户上传非图片文件但设置错误的 MIME 类型。
- 使用插件开发时,请确保遵循 Discuz! 的插件开发规范,并确保你的插件与 Discuz! 的其他部分兼容。
|