覆盖投票默认值,使 public=true

我想知道有多少网站也面临这个问题。我也希望它能默认为“公开”。

我也认为 UI 可以做得更好。

  • 您可以从多选投票中创建单选投票,所以我认为没有必要单独设置单选。
  • 我总是会显示扩展 UI。
  • 我希望默认选项为 Public=True,或者如果更容易实现,则为 Anonymous=False。
  • 我会将“公开”的复选框移到顶部,或者为公开投票和匿名投票分别设置 UI,因为它太容易被忽略了。

我不熟悉更改主题组件,如果现在有人制作了简单的解决方法,我很想了解如何实现以及在更新 Discourse 时需要检查什么。

2 个赞

我是新手,但我想解决这个问题,所以我问了 chat-gpt:

这是答案:

你找到的脚本是一个很好的开始。它修改了 poll-ui-builder 控制器,以便在控制器调用 onShow() 函数时将 publicPoll 属性设置为 true。这确实打算添加为一个主题组件。

但是,代码可能无法正常工作,因为执行顺序。原始的 onShow() 方法将 publicPoll 设置为 false,然后修改将其设置为 true

正确的方法是先调用父类的 onShow 方法,然后将 publicPoll 设置为 true

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
  }
});
</script>

你可以通过以下步骤将此脚本添加到你的主题中:

  1. 进入 Discourse 管理仪表板。
  2. 在“自定义”部分下,单击“主题”。
  3. 选择要修改的主题。
  4. 在主题编辑屏幕中,单击“编辑 CSS/HTML”。
  5. 在左侧边栏中,单击“</> Common”。
  6. 将上面的脚本粘贴到“</> Common”部分。
  7. 单击“保存”按钮。

这将把更改应用到你的主题。请记住,主题更改仅应用于使用该特定主题的用户。如果你有多个主题,则需要将此修改添加到每个主题。

另外,请记住清除浏览器缓存或执行硬重新加载,以确保正确加载更改。

我将尝试按照这些步骤与我们的论坛管理员一起操作,但这需要一些时间,如果这里有人想先尝试一下并提供反馈,我将非常高兴。

另外,我想改变 UI 的行为,我想跳过简单的屏幕,所以我再次问了 chat-gpt:

在你当前的 এটা 码中,扩展视图由 showAdvanced 属性控制。如果将其设置为 true,则会显示扩展视图。

要始终显示扩展视图,你可以修改 poll-ui-builder 控制器中的 onShow() 方法,将 showAdvanced 设置为 true。你可以将此修改添加到你之前创建的主题组件中。这是更新后的脚本:

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
    this.set('showAdvanced', true);
  }
});
</script>

再次,请记住按照我之前概述的步骤将此脚本添加到你的主题中。保存脚本后,加载投票 UI 时应始终显示扩展视图。

同样,请记住清除浏览器缓存或执行硬重新加载,以确保正确加载更改。

我想尝试自己测试一下,但如前所述,我只是我们网站的版主,而不是管理员,所以这需要几天或几周的时间。

2 个赞

很高兴你解决了这个问题。:+1:

顺便说一句,当你想要修改多个属性时,可以使用这种语法:

    this.setProperties({
        'publicPoll': true,
        'showAdvanced': true
    });
2 个赞

并不是我,我只是把这个链接给的代码喂给 Chat-GPT:

然后我给了他@JammyDodger的第一次尝试,并问他是否能解决我的两个要求 :smiley:

如果它能工作那将是太好了,这也是我从 discourse 学到的另一个很酷的东西。

2 个赞

我已测试过,它有效! :partying_face:

太棒了。 :pray: 非常感谢。

1 个赞

这是它作为主题组件的样子:

4 个赞

我们的实例不再起作用了。
由于我没有权限,因此无法检查代码片段是否仍然存在。

@JammyDodger@nathank ,在你们的论坛里它还能用吗?

1 个赞

我的测试站点现在似乎也不起作用了。是否需要更新以适应最近的一些更改?

我将把它拆分到一个 Dev 主题中 :+1:

2 个赞

我发现这个模态框的调用方式已根据以下内容进行了重构:

但是,我不知道如何通过 API 与其进行交互。新的模态框文件在这里:

https://github.com/discourse/discourse/blob/main/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.js

据我所知,文档中没有涵盖如何操作,所以我不知道现在如何调用它。有人能帮忙吗?

1 个赞

好消息。:slight_smile: 我认为我们可能对此有所帮助……

6 个赞