搜索后发帖:
我喜欢“自动置顶帖子”以保持帖子更新。但我希望访客在访问帖子时,不会看到几十条“自动置顶”的消息。
有没有办法偶尔手动或自动(或两者兼有)删除它们?
我之所以这么问,是因为我发现以我的水平来看,无论我的愿望是什么,大多数情况都已经被解决了。
搜索后发帖:
我喜欢“自动置顶帖子”以保持帖子更新。但我希望访客在访问帖子时,不会看到几十条“自动置顶”的消息。
有没有办法偶尔手动或自动(或两者兼有)删除它们?
我之所以这么问,是因为我发现以我的水平来看,无论我的愿望是什么,大多数情况都已经被解决了。
谢谢,但这并不是删除不同主题上数百条顶帖的实用方法。
我甚至无法在一个主题中选择所有“顶帖”消息。
没有内置的功能可以执行此类批量操作。
您可以使用 Rails 脚本删除现有的自动置顶消息,例如:
SSH 登录到您的服务器
cd /var/discourse
./launcher enter app
rails c
Post.where("action_code = 'autobumped'").destroy_all
当然,以防万一,请务必先进行备份。
这就够了。
谢谢。
有没有什么命令可以让我们在发出“destroy (删除)”命令之前先列出/查看所有这些消息?
最好的方法是从 Discourse 界面使用 Data Explorer 来完成:
使用以下查询:
SELECT * from posts
WHERE action_code = 'autobumped'
啊!!这就是我想要的查询,这让我很高兴。再次感谢。
虽然建议的查询显示了所有包含“auto-bumped”消息的主题。但事实证明它并没有多大帮助。
所以,我认为,最终我只能在 rails console 的“黑屋”里挥舞斧头(这有点吓人)。
我有点担心,因为它会一次性影响数千个主题/帖子。如果主题内有一些“全选”按钮,可以将所有“自动顶帖”消息一起选中,然后我们就可以在任何主题内一键删除这些消息。如果有人想用一个命令删除所有主题中所有此类消息,那么他将不得不输入“rails”。
我不是在抱怨。我只是在表达我的想法。
您告诉我的第五行 Rails 命令在删除所有这些帖子之前会询问或提示任何内容吗?或者它会直接执行被告知的操作,没有任何警告等,也没有恢复的机会?
如果可能,我们能否先从任何主题中删除“自动顶帖消息”,而不是从整个网站中删除?
另外,您能否提供/告诉任何 Rails 命令来查看将要删除的帖子的样本?
谢谢。
data-explorer 中类似这样的内容可能有助于提供概览:
SELECT p.topic_id,
COUNT(p.id) AS count
FROM posts p
WHERE action_code = 'autobumped'
GROUP BY p.topic_id
ORDER BY count DESC
但是,我要提醒您,如果您不熟悉 rails 控制台,请不要在实时站点上使用它进行此类更改。您可能想先搭建一个测试站点并进行练习,然后再进行操作。![]()
是的,这在设计者/开发者提供的范围内解决了问题。
但我仍然想说,应该有一些“管理员”命令,在管理员设置或正在查看的主题中,选择任何一个主题或所有主题中的所有“重复(自动顶起)的消息”,并在管理员希望的时候将其删除。
也许您可以用 CSS 来隐藏这些消息?不幸的是,我认为 post-small-action 小部件目前不包含操作类型作为 CSS 类,因此您无法专门定位“bump”消息。也许主题组件可以提供帮助?
是的,在建议数据浏览器解决方案之前我已经检查过了。
为小型操作添加特定类可以成为一个很好的 Feature 建议。
请提供一些建议。
我可以直接将内容复制粘贴到组件中。我不会编码。
我还没有用过插件API,但我确实看到有一个方法可以向小型操作帖子添加类:
所以我做了一个主题组件,它包含在Head部分:
<script type="text/discourse-plugin" version="1.6.0">
api.addPostSmallActionClassesCallback(post => {
return ["small-action-" + post.actionCode]
});
</script>
…以及CSS部分:
.small-action.small-action-autobumped {
display: none;
}
…然后自动顶帖消息消失了!
我还没有做其他测试,所以我不知道是否会有其他副作用。有可能 small-action-[...] 类会在应用程序的其他地方发生冲突,在这种情况下,您应该选择一个保证唯一的前缀。
请注意,addPostSmallActionClassesCallback 方法是上个月才添加的,因此您需要使用较新版本的 Discourse:
谢谢。
请详细说明最后一句“在这种情况下,您应该选择一个保证唯一的名称”。
例如,您可以使用前缀 bathinda-,这可以确保它既不会与 Discourse 中当前的内容冲突,也不会与将来的内容冲突。它看起来会是这样的:
Head:
<script type="text/discourse-plugin" version="1.6.0">
api.addPostSmallActionClassesCallback(post => {
return ["bathinda-" + post.actionCode]
});
</script>
CSS:
.small-action.bathinda-autobumped {
display: none;
}
我明白了,这是因为未隐藏的时间间隔消息。这很棘手,因为您无法使用 CSS 定位之前的元素。