如何在 discourse 论坛中用户访问链接时自动授予徽章?
例如:https://myforum.example.com?special_access=true
可以考虑使用 topic_link_clicks 表吗?
我想我可能有一个手动徽章可以从中受益。
我会好好想想。
如果它是在特定帖子中共享的特定链接,我认为这个链接可以做到:
SELECT DISTINCT tlc.user_id, MIN(tlc.created_at) granted_at
FROM badge_posts p
LEFT JOIN topic_links tl ON tl.post_id = p.id
LEFT JOIN topic_link_clicks tlc ON tlc.topic_link_id = tl.id
WHERE tl.post_id = 1246
AND tl.url = 'https://meta.discourse.org/'
AND tlc.user_id IS NOT NULL
GROUP BY tlc.user_id
您需要从特定帖子的 JSON 中获取 post_id(或通过数据浏览器进行查找)。
我认为这可能会奏效。
我只想将此徽章授予我们课程的学员。
有什么方法可以隐藏一个主题,使其不被公众看到,并且只有通过链接点击它的人才能访问?
其次,如何使用 Dfata explorer 插件完成此操作?
I’m not 100% sure I’m following the method you’re using for this? You may want to have a check that you’re not overcomplicating the setup.
If checking the json isn’t your cup of tea, then a post_id lookup query would be something like this:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT id
FROM posts
WHERE topic_id = :topic_id
AND post_number = :post_number
Then you can use the URL of the post to pull out the topic id and post number to enter into the parameter boxes. eg: https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/4 (worth noting that the OP is always post_number 1, even if it’s not in the topic link)
Actually, there’s a magic parameter that might make looking up a post_id using the data explorer even easier…
-- [params]
-- post_id :url
SELECT id
FROM posts
WHERE id = :url
Paste the relevant URL for the post into the parameter box, et voila - it pops out the post_id ![]()
红色背景让我认为它不是一个完整的帖子 URL。如果它是一个主题 URL,你需要在末尾加上 /1:
https://meta.discourse.org/t/grant-badge-when-user-visits-link/276700/1
那奏效了!
我猜这需要替换为包含“/1”的帖子网址?
这部分需要替换为他们在帖子中点击的链接。
而 post_id 是粘贴/分享链接的帖子。
我明白了,所以没有办法仅仅通过访问帖子链接来授予徽章?
我认为应该有,但这将是一个不同的查询。
这个查询是为点击特定论坛帖子中的特定链接而授予徽章。
如果您想为用户访问特定主题授予徽章,我认为应该是:
SELECT DISTINCT tv.user_id, MIN(tv.viewed_at) granted_at
FROM topic_views tv
WHERE tv.topic_id = 728
GROUP BY tv.user_id
(将“728”替换为相关的 topic_id)
由于它需要“每日更新”触发器,因此将在下次运行每日徽章授予作业时授予。如果您想加快检查速度,可以从 /sidekiq/scheduler 页面手动触发 Jobs::BadgeGrant。
如何才能让它立即更新?
唯一可用的触发器是:
- 每日更新
- 用户编辑或创建帖子时
- 用户被编辑或创建时
- 用户对帖子执行操作时
- 用户被编辑或创建时
- 用户更改信任等级时
要获得更即时的徽章授予,您需要在这些操作的范围内进行工作。您可以在此主题中阅读更多内容 - Creating triggered custom badge queries
我执行了此操作,但仍未获得。
是的,已启用。让我再试一个配置文件。也许是因为我是管理员。
其次,您只是将主题链接粘贴到浏览器中吗?
管理员身份对此没有影响。
您需要访问该主题,它才会记录在该徽章所依据的 topic_views 表中。





