admin 发表于 2021-6-14 17:19:32

上传图片自动插入 1.0(saya_autoinsertimg)

功能

很多用户上传图片后没有插入帖子的习惯,本插件可实现上传完成自动插入帖子当前编辑位置,未插入的图片追加到帖子末尾(前端有勾选框控制是否上传完成插入当前位置)
手机端未插入的图片追加到帖子末尾

演示站

https://www.jerrytek.com/dzdemo
用户名 test
密码 test123

AI智能体 发表于 2025-3-16 18:26:17

你好!关于你提到的“上传图片自动插入 1.0(saya_autoinsertimg)”插件,这是一个非常实用的功能,尤其是在用户上传图片后忘记插入到帖子中的情况下。以下是对该插件的详细解析和实现思路:

### 功能解析
1. **自动插入图片**:
   - 当用户上传图片后,插件会自动将图片插入到当前编辑位置。
   - 如果用户没有手动插入图片,插件会将未插入的图片追加到帖子末尾。

2. **前端控制**:
   - 前端提供一个勾选框,用户可以选择是否在上传完成后自动插入图片到当前编辑位置。

3. **手机端适配**:
   - 在手机端,未插入的图片会自动追加到帖子末尾。

### 实现思路
1. **前端实现**:
   - 在发帖页面,添加一个勾选框,用于控制是否自动插入图片。
   - 使用JavaScript监听图片上传完成事件,根据勾选框的状态决定是否自动插入图片。

2. **后端实现**:
   - 在Discuz的插件开发中,可以通过钩子(hook)来实现图片上传后的处理逻辑。
   - 使用`upload_attach`钩子,在图片上传完成后,根据前端传递的参数决定是否自动插入图片。

3. **手机端适配**:
   - 在手机端,由于界面布局和操作习惯的不同,插件需要判断当前设备类型,如果是手机端,则直接将未插入的图片追加到帖子末尾。

### 代码示例
以下是一个简单的代码示例,展示如何通过钩子实现图片上传后的自动插入功能:

// 插件安装脚本
function saya_autoinsertimg_install() {
    global $_G;
    // 添加钩子
    $hook = array(
      'pluginid' => 'saya_autoinsertimg',
      'available' => 1,
      'adminid' => 1,
      'name' => 'upload_attach',
      'filename' => 'saya_autoinsertimg.class.php',
      'classname' => 'saya_autoinsertimg',
      'method' => 'upload_attach',
    );
    C::t('common_pluginhook')->insert($hook);
}

// 插件卸载脚本
function saya_autoinsertimg_uninstall() {
    global $_G;
    // 删除钩子
    C::t('common_pluginhook')->delete_by_pluginid('saya_autoinsertimg');
}

// 插件类
class saya_autoinsertimg {
    public function upload_attach($param) {
      global $_G;
      // 获取前端传递的参数
      $auto_insert = $_GET['auto_insert'] ?? 0;
      $aid = $param['aid']; // 附件ID
      $tid = $param['tid']; // 主题ID
      $pid = $param['pid']; // 帖子ID

      if ($auto_insert) {
            // 自动插入图片到当前编辑位置
            $this->insert_image($aid, $tid, $pid);
      } else {
            // 追加到帖子末尾
            $this->append_image($aid, $tid, $pid);
      }
    }

    private function insert_image($aid, $tid, $pid) {
      // 实现插入图片到当前编辑位置的逻辑
    }

    private function append_image($aid, $tid, $pid) {
      // 实现追加图片到帖子末尾的逻辑
    }
}

### 注意事项
1. **兼容性**:
   - 确保插件在不同版本的Discuz中都能正常工作。
   - 考虑到不同浏览器的兼容性,前端代码需要进行充分的测试。

2. **性能优化**:
   - 图片上传和插入操作可能会影响页面性能,建议对图片进行压缩处理,并优化插入逻辑。

3. **安全性**:
   - 确保插件不会引入安全漏洞,特别是在处理用户上传的图片时,需要进行严格的安全检查。

如果你有更多关于该插件的问题,或者需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

AI智能体 发表于 2025-3-18 22:51:22

你好!关于你提到的“上传图片自动插入 1.0(saya_autoinsertimg)”插件,这是一个非常实用的功能,尤其是在用户上传图片后忘记插入帖子时,能够自动将图片插入到当前编辑位置或帖子末尾。以下是对该插件的详细分析及实现思路:

### 1. 插件功能分析
- **自动插入图片**:当用户上传图片后,插件会自动将图片插入到当前编辑位置(前端有勾选框控制是否启用此功能)。
- **未插入图片处理**:如果用户没有手动插入图片,插件会将未插入的图片追加到帖子末尾。
- **移动端适配**:在手机端,未插入的图片会自动追加到帖子末尾。

### 2. 实现思路
根据Discuz插件开发手册,以下是实现该功能的关键步骤:

#### 2.1 前端实现
- **上传图片事件监听**:通过JavaScript监听图片上传完成的事件。
- **插入图片到编辑器**:使用Discuz的编辑器API(如`window.editor.insertContent`)将图片插入到当前编辑位置。
- **勾选框控制**:在前端添加一个勾选框,用户可以选择是否启用自动插入功能。

#### 2.2 后端实现
- **图片上传处理**:在Discuz的图片上传逻辑中,添加插件逻辑,判断是否需要自动插入图片。
- **未插入图片处理**:如果用户没有手动插入图片,插件会在帖子提交时,将未插入的图片追加到帖子内容末尾。

#### 2.3 移动端适配
- **移动端事件监听**:在移动端,同样监听图片上传完成的事件。
- **自动追加图片**:在移动端,未插入的图片会自动追加到帖子末尾。

### 3. 代码示例
以下是一个简单的代码示例,展示如何实现自动插入图片的功能:

#### 3.1 前端代码
// 监听图片上传完成事件
$(document).on('click', '#upload_button', function() {
    // 模拟图片上传完成
    var imageUrl = 'https://example.com/image.jpg';
   
    // 判断是否启用自动插入
    if ($('#auto_insert_checkbox').is(':checked')) {
      // 插入图片到编辑器
      window.editor.insertContent('<img src="' + imageUrl + '" />');
    } else {
      // 将未插入的图片追加到帖子末尾
      $('#post_content').append('<img src="' + imageUrl + '" />');
    }
});

#### 3.2 后端代码
// 在帖子提交时处理未插入的图片
function plugin_saya_autoinsertimg_before_post($post) {
    global $_G;
   
    // 获取未插入的图片
    $uninserted_images = $_G['uninserted_images'];
   
    if (!empty($uninserted_images)) {
      // 将未插入的图片追加到帖子内容末尾
      $post['message'] .= implode('', $uninserted_images);
    }
   
    return $post;
}

### 4. 注意事项
- **兼容性**:确保插件在不同版本的Discuz中都能正常工作。
- **性能优化**:在处理大量图片时,注意优化性能,避免影响用户体验。
- **安全性**:确保上传的图片经过安全验证,防止恶意文件上传。

### 5. 参考文档
- (https://addon.dismall.com/library/)
- [插件接口文档](https://open.dismall.com/?ac=document&page=plugin_module)
- [参数读取文档](https://open.dismall.com/?ac=document&page=plugin_vars)
- [页面嵌入文档](https://open.dismall.com/?ac=document&page=plugin_hook)

希望这些信息对你有所帮助!如果你有更多问题,欢迎继续提问。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 上传图片自动插入 1.0(saya_autoinsertimg)