状态横幅

:discourse2: 摘要 Stat Banner 在您的主页上显示站点统计信息的列表
:eyeglasses: 预览 在 Discourse 主题创建器上预览
: hammer_and_wrench: 代码库 https://github.com/discourse/discourse-stat-banner
: open_book: 首次使用 Discourse 主题? Discourse 主题使用入门指南

安装此主题组件

功能

您可以创建任意数量的统计数据进行显示,统计数据来自 /about 页面,您可以从中选择:

  • 主题
  • 帖子
  • 活跃用户
  • 用户
  • 点赞
  • 聊天消息
  • 聊天频道
  • 聊天用户

并且这些可以单独设置为以下 3 个时间段之一:

  • 1 天
  • 7 天
  • 30 天

除了来源和时间段,您还可以配置:

  • 标题
  • 链接(可选)
  • 手动值(可选,覆盖自动值)

设置

名称 描述
显示统计数据
横幅标题
显示在
背景颜色 Discourse 颜色变量或十六进制值
文本颜色 Discourse 颜色变量或十六进制值
最小列宽
移动端隐藏
插件出口 此组件出现的插件出口。尝试 above-main-containerbelow-site-header,您可以使用 插件出口位置主题组件 找到更多出口。
禁用缓存 横幅统计数据将在每次横幅可见时刷新。请注意,这可能会增加一些服务器负载。

:discourse2: 由我们托管? 标准、商业和企业套餐均可使用主题组件。

27 个赞

iPhone SE 不遵守 hide on mobile

编辑:看起来任何移动设备都不遵循该设置,横幅始终可见。

3 个赞

还有一个小的UX/UI请求——链接应该看起来像链接。

3 个赞

感谢您的快速反馈@Jagster!我已更新以修复这些问题

3 个赞

您好,@awesomerobot

非常感谢您提供的这个主题组件;我一定会好好利用它。

如果您不介意的话,我有一个问题想请教您,因为我有点困惑。“活跃用户”我能理解,因为它不言自明,但是“用户”指的是什么呢?

好问题!

活跃用户是指在过去1/7/30天内被访问过的用户(他们登录访问了网站)

用户是指在过去1/7/30天内创建的新账户数量

2 个赞

早上好,@awesomerobot

我花了一些时间思考这个主题组件,根据你关于“用户”和“活跃用户”的回答,这些信息似乎没有最近更新。我似乎还有这两个指标的两个不同值。

这是我在桌面上的统计数据:

这是我在移动设备上的统计数据:

尽管差异不大,但我似乎无法弄清楚这些统计数据是从哪里提取的。

我尝试像这样实现一个刷新统计数据的 HTML 代码:

<script>
  setInterval(function() {
    location.reload();
  }, 60000); // 每 1 分钟(60000 毫秒)刷新一次
</script>

注意:代码将每 1 分钟(60000 毫秒)重新加载一次页面。您可以根据需要调整间隔。

但我不知道这是否可以添加到设置编辑器中。

非常感谢任何帮助。

1 个赞

更新:

我得出的结论是它应该看起来像这样?

[
	{
		"setting": "display_stats",
		"value": "[{\"source\":\"posts\",\"period\":\"30_days\",\"title\":\"Posts\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"likes\",\"period\":\"30_days\",\"title\":\"Likes\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"active_users\",\"period\":\"30_days\",\"title\":\"Active Users\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"users\",\"period\":\"30_days\",\"title\":\"Sign-Ups\",\"link\":\"\",\"manual_value\":\"\"}]"
	},
	{
		"setting": "banner_title",
		"value": "过去 30 天的统计数据"
	},
	{
		"setting": "show_on",
		"value": "homepage"
	},
	{
		"setting": "background_color",
		"value": "var(--tertiary-low)"
	},
	{
		"setting": "text_color",
		"value": "var(--primary)"
	},
	{
		"setting": "min_column_width",
		"value": "10em"
	},
	{
		"setting": "hide_on_mobile",
		"value": false
	},
	{
		"setting": "plugin_outlet",
		"value": "above-main-container"
	},
	{
		"setting": "javascript",
		"value": "setInterval(function() { Discourse.__container__.lookup('controller:widget').send('refresh'); }, 3600000);"
	}
]

但是,我收到一条错误消息:

javascript:已添加这些设置。请删除它们,然后重试。

这些统计数据是从“关于”页面提取的,它们使用该页面底部表格中的相同数据:

横幅中的数据会根据用户首次看到横幅的时间,以最低统计数据周期进行刷新。

例如,如果您配置的横幅统计数据来自昨天,那么在您首次看到横幅后,它将在 24 小时后刷新其数据。如果横幅配置为仅显示来自上个月的统计数据,则数据将在您首次查看后的一个月刷新(或者如果您清除浏览器 localStorage)。

实施此方法是为了减少请求数量,因此它们被缓存到浏览器的 localStorage 中,而不是在每次查看横幅时都显示更新的统计数据。

此编辑器仅用于编辑现有设置,您在此处根本无法添加新设置(或 javascript)。

如果您希望此横幅更新更频繁,我可以添加一个新设置来禁用缓存。

2 个赞

您好,@awesomerobot

感谢您提供的详细回复和统计数据来源。但我发现,自从我最初安装以来,我的手机上显示的统计数据仍然存在同样的问题。

根据我的理解,我的统计数据现在应该已更新为以下内容:

我也尝试清除浏览器缓存,但没有任何效果。

如果此选项可行,我将不胜感激,因为它将为消费者提供更全面的论坛见解。

2 个赞

这些看起来像是来自 /admin 的统计数据,可能与 /about 的数据略有不同,但无论如何……如果你更新了组件,我添加了一个禁用缓存的设置:

Screenshot 2023-10-30 at 2.03.15 PM

5 个赞

太棒了,运行完美!我启用该设置后,它立即刷新了。这种方法比清除缓存简单得多,因为我一直保持论坛打开状态,还有很多其他的!

感谢您的付出!

2 个赞

有没有办法将周期设置为显示“所有时间”统计信息?

另外,如果我能显示此组件计算出的总“投票数”将是极好的:Topic Voting | Discourse - Civilized Discussion

该组件正在从 /about.json 查找统计数据。所以我猜“所有时间”可以很容易地添加,因为它也是一个可用值。

但是,如果您想显示其他统计数据,我猜您需要分叉并调整组件,以便它从可用的地方查找这些值。

2 个赞

因此,既然它不在下拉列表中,我可以在设置 JSON 中手动更新它吗?

不,如果您向 manual_value 添加条目,它将仅用静态值替换查找值。也许将此字段命名为 static_value 会更好地传达这一点?

您可以通过将“all-time”周期选择器添加到下拉列表中来获取“all-time”计数:

这只是组件设置文件中的一个简单更改。我在这里推送了一个包含此内容的分支:https://github.com/nolosb/discourse-stat-banner/tree/count。但是,对于 PR,它可能仍然需要一些逻辑来重命名下拉列表中的该变量?

1 个赞

太棒了,感谢您添加此内容!

2 个赞

有什么方法可以将其限制为特定类别吗?我尝试过放在标题以上的类别出口,并且想至少使用 CSS 将其限制为特定类别,但之后它在任何地方都未显示。

1 个赞

如果您将主题设置 show_on 更改为 everywhere,您就可以使用此 CSS 在单个类别中显示它(将 examplecategory 替换为您相关的类别 slug)

.stat-banner__wrapper {
  display: none;
}

body.category-examplecategory {
  .stat-banner__wrapper {
    display: block;
  }
}
1 个赞