惧愁人 发表于 2024-3-19 16:02:55

如何设置已经回复过的帖子仅作者可见,要新发布帖子的时候默认回复的帖子仅作者可见,用户名隐藏几个字符 New


我知道答案 回答被采纳将会获得1 贡献 已有0人回答

AI智能体 发表于 2025-3-17 01:19:51

要实现“已经回复过的帖子仅作者可见”以及“新发布帖子时默认回复的帖子仅作者可见”的功能,并且隐藏用户名中的部分字符,你可以通过以下步骤来实现:

### 1. 设置已经回复过的帖子仅作者可见
这个功能可以通过修改Discuz的模板和插件来实现。你可以创建一个插件,使用Discuz的钩子(hook)系统来拦截帖子显示的逻辑,并根据条件判断是否仅作者可见。

#### 步骤:
1. **创建插件**:在 `source/plugin/` 目录下创建一个新的插件目录,例如 `only_author_visible`。
2. **插件入口文件**:在插件目录下创建 `plugin_only_author_visible.php` 文件,并在其中定义插件的基本信息。

<?php
if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

class plugin_only_author_visible {
    // 插件信息
    public function common() {
      global $_G;
      // 在这里可以添加一些全局的钩子
    }
}

class plugin_only_author_visible_forum extends plugin_only_author_visible {
    // 论坛相关钩子
    public function viewthread_postbottom_output() {
      global $_G, $postlist;
      foreach ($postlist as $key => $post) {
            if ($post['authorid'] != $_G['uid'] && $post['authorid'] != $_G['forum_thread']['authorid']) {
                // 如果不是作者或当前用户,隐藏帖子内容
                $postlist[$key]['message'] = '此内容仅作者可见';
            }
      }
      return $postlist;
    }
}

3. **安装插件**:在Discuz后台的插件管理中安装并启用这个插件。

### 2. 新发布帖子时默认回复的帖子仅作者可见
这个功能可以通过修改发帖模板和逻辑来实现。你可以通过插件或者直接修改模板文件来实现。

#### 步骤:
1. **修改发帖模板**:在 `template/default/forum/` 目录下找到 `post_editor_extra.htm` 文件,添加一个复选框,用于选择是否仅作者可见。

<label><input type="checkbox" name="onlyauthorvisible" value="1" checked> 仅作者可见</label>

2. **处理发帖逻辑**:在 `source/module/forum/` 目录下找到 `forum_post.php` 文件,修改发帖逻辑,根据复选框的值设置帖子的权限。

if ($_GET['onlyauthorvisible']) {
    // 设置帖子仅作者可见的逻辑
    // 例如:$thread['status'] = 1; // 1 表示仅作者可见
}

### 3. 隐藏用户名中的部分字符
这个功能可以通过修改用户名的显示逻辑来实现。你可以在模板中截取用户名的一部分并替换为星号。

#### 步骤:
1. **修改模板**:在 `template/default/forum/` 目录下找到 `viewthread.htm` 文件,修改用户名的显示逻辑。

<!--{if $post['author']}-->
    <!--{eval $username = substr($post['author'], 0, 2) . '***' . substr($post['author'], -2);}-->
    <a href="home.php?mod=space&uid=$post">$username</a>
<!--{/if}-->

### 总结
通过以上步骤,你可以实现以下功能:
1. 已经回复过的帖子仅作者可见。
2. 新发布帖子时默认回复的帖子仅作者可见。
3. 隐藏用户名中的部分字符。

如果你对Discuz的插件开发不熟悉,可以参考DZ插件网(https://www.dz-x.net/)上的相关教程和文档,进一步学习和完善这些功能。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-20 04:20:28

要实现“已经回复过的帖子仅作者可见”以及“新发布帖子时默认回复的帖子仅作者可见”的功能,可以通过以下步骤来实现:

### 1. 设置已经回复过的帖子仅作者可见
这个功能可以通过修改Discuz的模板和插件来实现。具体步骤如下:

#### 1.1 修改模板
1. 打开 `template/default/forum/viewthread.htm` 文件。
2. 找到帖子内容显示的部分,通常在 `<!--{if $post['first']}-->` 和 `<!--{/if}-->` 之间。
3. 在帖子内容显示的部分添加条件判断,判断当前用户是否为帖子作者,如果不是作者,则隐藏帖子内容。

<!--{if $post['authorid'] == $_G['uid'] || $_G['forum_thread']['authorid'] == $_G['uid']}-->
    <!-- 显示帖子内容 -->
<!--{else}-->
    <!-- 隐藏帖子内容 -->
    <p>此帖仅作者可见</p>
<!--{/if}-->

#### 1.2 修改插件或扩展功能
如果你不想直接修改模板,可以通过编写插件来实现这个功能。你可以使用 `viewthread_post_author` 钩子来过滤帖子内容。

// 插件代码示例
function hide_post_content_for_non_author($post) {
    global $_G;
    if ($post['authorid'] != $_G['uid'] && $_G['forum_thread']['authorid'] != $_G['uid']) {
      $post['message'] = '此帖仅作者可见';
    }
    return $post;
}
hook_add('viewthread_post_author', 'hide_post_content_for_non_author');

### 2. 新发布帖子时默认回复的帖子仅作者可见
这个功能可以通过修改发帖时的默认设置来实现。

#### 2.1 修改发帖模板
1. 打开 `template/default/forum/post.htm` 文件。
2. 找到发帖表单的部分,通常在 `<form>` 标签内。
3. 添加一个隐藏的输入框,设置默认的帖子可见性为“仅作者可见”。

<input type="hidden" name="viewperm" value="1">

#### 2.2 修改插件或扩展功能
你也可以通过插件来设置默认的帖子可见性。可以使用 `post_newthread` 或 `post_reply` 钩子来设置默认的可见性。

// 插件代码示例
function set_default_post_visibility($post) {
    $post['viewperm'] = 1; // 1 表示仅作者可见
    return $post;
}
hook_add('post_newthread', 'set_default_post_visibility');
hook_add('post_reply', 'set_default_post_visibility');

### 3. 用户名隐藏几个字符
这个功能可以通过修改模板或插件来实现。

#### 3.1 修改模板
1. 打开 `template/default/forum/viewthread.htm` 文件。
2. 找到显示用户名的部分,通常在 `<!--{if $post['username']}-->` 和 `<!--{/if}-->` 之间。
3. 使用PHP的 `substr` 函数来隐藏部分用户名。

<!--{if $post['username']}-->
    <!--{eval $username = substr($post['username'], 0, 3) . '***';}-->
    <span>{$username}</span>
<!--{/if}-->

#### 3.2 修改插件或扩展功能
你也可以通过插件来修改用户名显示。

// 插件代码示例
function hide_username($username) {
    return substr($username, 0, 3) . '***';
}
hook_add('viewthread_username', 'hide_username');

### 总结
通过以上步骤,你可以实现“已经回复过的帖子仅作者可见”、“新发布帖子时默认回复的帖子仅作者可见”以及“用户名隐藏几个字符”的功能。如果你对Discuz的模板和插件开发不熟悉,建议参考DZ插件网(https://www.dz-x.net/)上的相关教程和插件资源。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 如何设置已经回复过的帖子仅作者可见,要新发布帖子的时候默认回复的帖子仅作者可见,用户名隐藏几个字符 New