镖师 发表于 2023-9-27 07:12:52

discuz实现发表新贴子可以引用其他用户的帖子

大概功能就是发布新的帖子可以引用别人的帖子并且发送消息通知用户帖子被引用,有点类似知乎的问答,但不是直接在别人帖子下面回复。不知道dz能否实现这个功能或者该如何实现,期待解答我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-17 06:43:24

要实现Discuz论坛中发布新帖子时引用其他用户的帖子,并且发送消息通知被引用的用户,可以通过以下步骤来实现:

### 1. 修改发帖模板
首先,你需要在发帖页面添加一个“引用帖子”的功能。可以通过修改Discuz的模板文件来实现。

#### 修改模板文件
找到 `template/default/forum/post.htm` 文件,在发帖表单中添加一个“引用帖子”的输入框或按钮。

<div class="quote-post">
    <label for="quote_post_id">引用帖子ID:</label>
    <input type="text" id="quote_post_id" name="quote_post_id" placeholder="输入要引用的帖子ID">
</div>

### 2. 修改发帖处理逻辑
接下来,你需要修改Discuz的发帖处理逻辑,使其能够处理引用的帖子ID,并在发帖时插入引用内容。

#### 修改发帖处理文件
找到 `source/module/forum/forum_post.php` 文件,在发帖处理逻辑中添加引用帖子的处理代码。

// 获取引用的帖子ID
$quote_post_id = intval($_GET['quote_post_id']);

if ($quote_post_id) {
    // 查询被引用的帖子内容
    $quoted_post = C::t('forum_post')->fetch($quote_post_id);
    if ($quoted_post) {
      // 将引用内容插入到新帖子中
      $message = "".$quoted_post['message']."\n".$message;
      
      // 发送通知给被引用的用户
      $notification = array(
            'uid' => $quoted_post['authorid'],
            'type' => 'quote',
            'new' => 1,
            'authorid' => $_G['uid'],
            'author' => $_G['username'],
            'note' => '您的帖子被引用',
            'dateline' => TIMESTAMP,
            'from_id' => $pid,
            'from_idtype' => 'quote'
      );
      C::t('common_notification')->insert($notification);
    }
}

### 3. 添加通知功能
为了在用户被引用时发送通知,你需要在Discuz的通知系统中添加一个新的通知类型。

#### 修改通知类型
找到 `source/class/table/table_common_notification.php` 文件,添加一个新的通知类型。

public function add_notification($uid, $type, $new, $authorid, $author, $note, $dateline, $from_id, $from_idtype) {
    return DB::insert('common_notification', array(
      'uid' => $uid,
      'type' => $type,
      'new' => $new,
      'authorid' => $authorid,
      'author' => $author,
      'note' => $note,
      'dateline' => $dateline,
      'from_id' => $from_id,
      'from_idtype' => $from_idtype
    ));
}

### 4. 测试功能
完成上述修改后,你可以在论坛中测试这个功能。发布新帖子时,输入要引用的帖子ID,查看是否成功引用并发送通知。

### 5. 优化用户体验
为了提升用户体验,你可以在前端添加一个“引用”按钮,点击后自动填充引用帖子ID,并显示引用内容预览。

#### 添加引用按钮
在 `template/default/forum/post.htm` 文件中添加一个引用按钮:

<button type="button" onclick="quotePost()">引用帖子</button>

#### 添加JavaScript代码
在页面底部添加JavaScript代码,处理引用按钮的点击事件:

function quotePost() {
    var postId = prompt("请输入要引用的帖子ID:");
    if (postId) {
      // 通过AJAX获取帖子内容并插入到发帖框中
      $.ajax({
            url: 'forum.php?mod=ajax&action=quotepost&postid=' + postId,
            success: function(data) {
                $('#message').val(data + '\n' + $('#message').val());
            }
      });
    }
}

### 6. 处理AJAX请求
在 `source/module/forum/forum_ajax.php` 文件中添加处理AJAX请求的代码:

if ($_GET['action'] == 'quotepost') {
    $postid = intval($_GET['postid']);
    $post = C::t('forum_post')->fetch($postid);
    if ($post) {
      echo "".$post['message']."";
    }
    exit();
}

### 7. 完成
通过以上步骤,你已经实现了在Discuz中发布新帖子时引用其他用户的帖子,并且发送消息通知被引用的用户的功能。

如果你在实现过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: discuz实现发表新贴子可以引用其他用户的帖子