强制用户选择类别

我希望用户在创建新帖子时手动选择一个类别。
我已经查看了这些主题:

https://meta.discourse.org/t/invite-people-to-choose-category-before-create-a-new-topic/214077
https://meta.discourse.org/t/require-category-selection-before-writing-topic/66236/15

但似乎没有一个能解决这个问题。
我已经取消勾选了“允许未分类主题”。

问题是类别已预先填充了吗?如果是这样,您可能正在寻找“默认作曲家类别”网站设置。

4 个赞

是的,就是这个问题。

我重置了该设置,现在它按预期工作。谢谢!:raising_hands:

我注意到当该设置被设为“无分类”时,用户无法点击输入,并且会显示一条消息要求选择分类,但有时用户不会立即阅读文本。您是否知道是否可以在用户点击消息区域之前显示一个“弹出窗口”,要求他们先选择一个分类?


编辑:在尝试了 Claude 和 ChatGPT 提供的许多选项后,我最终只是删除了“禁用”属性。这样用户仍然可以点击并输入他们的消息,但当没有选择分类并且他们尝试提交时,他们会看到要求选择分类的红色/橙色错误。实际上,我认为这是一种更好的行为。

对于其他尝试做同样事情的人,这是我添加到新组件 Unlock Composer<thead> 选项卡中的 Javascript:

<script type="text/discourse-plugin" version="0.8">
  const observer = new MutationObserver(() => {
    const textarea = document.querySelector(".d-editor-input[disabled]");
    if (textarea) {
      textarea.removeAttribute("disabled");
      textarea.setAttribute("placeholder", "Select a category before submitting");
      textarea.style.cursor = "text";
    }
  });

  observer.observe(document.body, { childList: true, subtree: true });
</script>

我不是开发人员。这只是 ChatGPT 提出的建议,而且有效。如果有人知道如何改进这一点,请分享。

请问能否分享一个实际操作的截图?

当我点击 New Topic 时,它显示如下:

您可以看到没有默认类别。现在,我可以输入我的消息(与默认行为不同,默认行为会锁定消息区域),即使没有选择类别:

如果我尝试提交,我会看到这个:

希望这有帮助。

1 个赞

@alltiagocom 太棒了,谢谢!

1 个赞

我认为这通常是默认行为。:thinking: 您是否设置了任何主题模板?

不客气!

我刚让 ChatGPT 看看有没有办法能让脚本更简化一些,它删除了第一行,是关于 API 的。我已将最终脚本更新到我的帖子中,供您参考。

1 个赞

没有模板。

但我认为这不是默认行为,因为即使是原始占位符也说“在此处键入前选择一个类别”,光标也会变成一个带有🚫符号的箭头。除非我选择类别,否则它不允许我单击和键入。

如果您的某个类别设置了主题模板,我也会有同样的预期。如果没有设置,它应该允许您在设置类别之前进入撰写器文本区域。当使用主题模板时,它会阻止这样做,以防止用户先在撰写器中键入内容,然后再选择类别,从而意外绕过该模板。

我刚刚在我自己的网站上快速测试了一下,在没有 default category(默认类别)或主题模板的情况下,我可以进入撰写器区域,直到我选择类别才会被阻止。

2 个赞

奇怪……我刚禁用了我创建的组件,又试了一次,现在可以输入了。它没有被锁定 :confused:

是不是在我将其设置为 (no category) 之后出现的某种缓存问题?服务器本身的缓存,因为在 Chrome 和 Firefox 上,使用不同的用户账户,我都遇到了相同的行为。我正在使用 Cloudflare,并且我注意到有时我的论坛会出现与 Cloudflare 缓存相关的问题。同样,我不是专家,所以只是猜测……

好的,我好像说得太早了……
几分钟后,它又恢复了之前的行为。它被锁定了。当我检查编辑器时,我看到了这个:

我想我还是继续使用组件吧。

2 个赞

如果你能让它按你想要的方式工作,那就太棒了 :chefs_kiss:

出于好奇,如果你安装了数据浏览器插件,能否运行这个来查看它显示的内容:

SELECT id as category_id, topic_template
from categories

我刚刚在另一个网站上测试了这个(碰巧该网站的默认区域设置为德语),我们发现“未分类”伪类别中添加了一个隐藏的模板,这似乎导致了该网站上出现相同的行为。

我刚注意到在 Obsidian 论坛上,行为也是一样的。它会被锁定,直到我选择一个类别,所以这可能是新的行为?

我没有数据浏览器插件,抱歉。

我不这么认为。 :thinking: 在我测试过的两个最近更新的站点上,行为都和我预期的相同(没有 默认类别 或主题模板 = 在不先选择类别的情况下自由输入)。

我们无法弄清楚德语区域设置站点上的“未分类主题模板”来自哪里。出于任何原因偷偷自动添加一个会破坏预期功能而无人意识到。

你的站点有吗?(如果你能分享你的 默认区域设置 那也很有用)

/c/uncategorized/edit/topic-template

更新: 作为数据浏览器的替代方案,你也可以将你的管理员日志过滤为“主题模板”,看看里面是否有任何额外信息。

(我也会在这里添加 Moin 在下面分享的过滤链接)

/admin/logs/staff_action_logs?filters=%7B%22subject%22%3A%22topic_template%22%7D

这是一个很棒的插件,我强烈推荐它。 :slight_smile:

3 个赞

我认为在界面中筛选该选项有点困难,因为您只能按“操作”筛选,而不能按“主题”筛选。对于“更改类别设置”操作可能会有很多日志。但是,您可以在 URL 中添加主题筛选器:/admin/logs/staff_action_logs?filters=%7B%22subject%22%3A%22topic_template%22%7D

2 个赞

我会帮你一个大忙,安装它,因为它非常有用。 :slight_smile:

3 个赞

奇怪的是,Obsidian 的论坛和我的一样。真是奇怪……

这里也是空的。实际上,我认为我根本没有任何模板。

1 个赞

感谢 Lilly(也感谢 @JammyDodger)分享了这款插件。我一定会去看看的。

1 个赞

我认为如果你仍然好奇的话,应该可以在 try.discourse.org 上看到默认行为。 不,我弄错了。Try 设置了默认分类

我希望挖掘出那些被遗忘的。:slight_smile: 但如果“未分类”中没有自动添加的,那么我认为这可以排除潜在的 bug,那就好了。:+1:

还有员工日志(使用 Moin 分享的链接),但你似乎对你的解决方法很满意,所以我将停止向你索取更多信息。:slight_smile: