如何在名字旁边显示用户总帖数

大家好,这是我在这里的第一篇帖子。我想知道Blizzard 论坛是如何在用户名旁边显示用户总帖子数的。


我通过使用 Discourse API 系统实现了类似的功能,如下所示:

但我相信有更好的方法可以做到这一点。我还计划显示用户徽章等。有人能帮帮我吗?谢谢。

1 个赞

我想知道是否存在任何模板/短代码系统。

您好!

如果您正在使用 API,我认为这是正确的方法。

您能否与我们分享您的代码?如有必要,我们可以提供改进建议。:slight_smile:

1 个赞

好的

<script type="text/discourse-plugin" version="0.1">
  api.onPageChange(() => {
    // 检查是否存在ID为'topic'的元素
    if ($('#topic').length > 0) {
      // 如果存在'topic'元素,则查找'data-user-id'属性
      var userId = $('#topic article').data('user-id');

      // 检查'data-user-id'属性是否存在
      if (userId !== undefined) {
        // 发起API请求以获取用户信息
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // 处理响应数据
            console.log('用户帖子数:', data.post_count);

            // 检查用户字段["1"]是否有值
            if (data.user_fields && data.user_fields["1"]) {
              // 在第一个'names' div中显示用户字段
              displayUserField(data.user_fields["1"]);
            }

            // 在第一个'names' div中显示帖子数
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // 处理错误
            console.error('API请求错误:', error);
          });
      } else {
        console.log('未找到data-user-id属性');
      }
    } else {
      console.log('未找到ID为"topic"的元素');
    }
  });

  // 在第一个'names' div中显示用户字段的函数
  function displayUserField(userFieldValue) {
    // 查找第一个'names' div
    var firstNamesDiv = $('.names:first');

    // 创建一个带有'user-title'类的span元素
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // 将span元素追加到第一个'names' div
    firstNamesDiv.append(userFieldSpan);
  }

  // 在第一个'names' div中显示帖子数的函数
  function displayPostCount(postCount) {
    // 查找第一个'names' div
    var firstNamesDiv = $('.names:first');

    // 创建一个带有'user-title'类的span元素
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' 帖子');

    // 将帖子数span元素追加到第一个'names' div
    firstNamesDiv.append(postCountSpan);
  }

</script>

我在另一个组件上有apiReq函数

在 Blizzard 中,他们会在评论者旁边显示帖子数,但我无法实现。

我明白了,你们部分使用了该 API。你们可以改进这段代码。给我几分钟时间,我马上回来。

2 个赞

好的。我是 Discourse 新手,所以对它知之甚少。

1 个赞

我不得不制作了一个插件。

为了在查看帖子或用户卡片时获取 post_count 值,有必要序列化数据以包含此字段。这只能通过插件来实现,依赖于每个用户的请求不是一个现实的解决方案。

试试看。如果你想看看的话,JS 部分在 assets 目录中。
你可能在 API 使用中忽略了一个特定功能,那就是通过 outlets 进行自定义的能力。

如果你想要更多选项,请告诉我。
我不知道是否应该发布这个插件,因为它很小,但还是发布了:

5 个赞

非常感谢您的努力。我会尝试一下。
我原本的计划是实现以下功能:

  1. 在头像旁边显示用户在帖子和评论中的帖子计数。
  2. 为组中的所有成员分配一个默认标题(例如:管理员)。
  3. 在头像旁边显示信任级别。
  4. 在头像旁边显示徽章。
  5. 在头像旁边显示一个 user_field 值。
    并且管理员可以更改这些选项。
    我还计划将帖子计数超链接化,以便其他人可以单击并查看帖子列表。

虽然这是一个小型插件,但我相信它值得发布。您可以考虑添加一些建议的新功能。
谢谢。

我安装了插件但它不起作用。

我再次测试了一下,在我这边运行正常。

插件已启用吗?

1 个赞

现在可以了。谢谢。

抱歉再次打扰您。使用一段时间后,我注意到它不包含主题。据我所知,主题也是一个帖子。

“创建的主题”是另一个统计数据。您想将此计数添加到帖子计数中,还是添加一个新文本,以便您拥有“主题:xx,帖子:yy”?

我实际上正试图获得类似 postCount + TopicCount 的值
我只是想把主题也算作帖子。
我还想在用户头衔(如果有的话)之后显示它。我尝试修改插件代码(在 fork 之后),但到目前为止还没有成功。

我更新了插件;如果对您有效,请告诉我。

2 个赞

非常感谢。它奏效了。

看起来很酷。可以添加总反应数 + FA 图标吗?

我无法编辑,所以我刚刚安装并测试了插件,效果非常不错。除了在移动端,帖子总数显示在名字的左侧。:)

@David_Ghost
您可以使用一些 CSS 来修复它:

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}
2 个赞