您好
我最近开始使用 Discourse,根据我一周的经验,我可以肯定地说,对于那些需要修改核心功能的开发者来说,入门门槛相当高。这是由于缺乏真实的文档/信息,特别是如果我们谈论的是最新的选项。我只能找到适用于 3.6.0 版本但已不再工作的旧方法,而不是新的方法。即使我找到了一些,其中的细节也很少,没有实际的例子或关于如何使用这些功能的更详细的解释。
尽管如此,我需要修改 second-factor-add-totp.gjs 组件,但我无法做到,因为没有关于如何在我的自定义主题中正确完成此操作的信息。
我发现有一个叫做 PluginOutlet 的东西,它被设计为一个钩子,您可以使用它来注入自定义代码,甚至修改被 PluginOutlet 包裹的元素的输出(我不确定,有一个类似 api.renderInOutlet 的东西,但我没有找到任何关于如何使用它的正常信息)。查看那些 Ember 组件,我没有看到 PluginOutlet,它可能有助于至少使用纯 JS 来操作结构。
您能否澄清一下是否可以将其添加到那里,以及我是否可以使用它来修改模态窗口结构或至少使用纯 JS 来移动一些元素?
另外,也许我没有找到,但是否有关于新方法的文档和示例?
1 个赞
Falco
(Falco)
2
您能否分享更多关于您的最终目标的信息,以便我们提供更好的建议?
1 个赞
当然可以。
因此,根据我拥有的“修改后”版本,我需要稍微更新 MFA 模态框的设计(当用户应设置 MFA 的身份验证器应用时)。
更新是指例如在 HTML 结构中移动 QR 码,更具体地说,“js.user.second_factor.enable_description”站点文本,QR 码应位于提供的文本(HTML 标记)之间。
另一个例子是确保“手动输入”显示实际代码,该代码在单击时可以复制(手动通过 JS 触发单击使其出现并仅移动它)。
所有这些都可以通过常规的 JS 操作来实现,而无需重建原始组件的实际结构,但我面临的主要挑战是找到一个可以放置此 JS 的位置,以便在模态框打开时触发它,但我还没有找到。
附加说明:我正在使用通过 GIT 选项存储的自定义主题。
如有不清楚之处,请告知。
david
(David Taylor)
6
您好 @Yan_Rudenko,开始阅读的最佳文档可能是本教程:
正如您提到的,插件出口 (Plugin Outlets) 是自定义 UI 的最佳方式。但它们并非随处可用。只有 UI 的某些部分设计为可自定义。
使用常规 JS 操作 DOM 会导致错误,因为我们的渲染框架将失去对其渲染到屏幕的元素的控制。最好坚持使用支持的插件出口和其他 Discourse JS API(教程中也涵盖了这些)。
3 个赞
您好 @david ,感谢您提供的教程链接,但我已经查看过了,没有找到我想要的答案。示例本身很简单,没有涵盖例如如何获取特定类别(而不是进行 ajax 调用)或如何在代码中全部使用 Discourse API(我所知和所见,它存在于 https://docs.discourse.org/),这就是为什么我在这里写信是为了从日常使用 Discourse 的人那里获得更多详细信息,他们了解许多文档中没有的东西。
我完全理解使用纯 JS 可能会导致问题,但这是我目前能想到的唯一方法,也许将来我能够以更合适的方式修改一些东西,如果存在的话。
所以,如果我理解正确的话,在我目前使用的 Discourse 版本 3.6.0.beta2-latest 中,我提到的更改将无法通过 Discourse 内置工具完成?因为这些组件缺少 PluginOutlets?
开发团队是否考虑在未来的版本中将这些添加到提到的组件中,因为我认为这没有技术问题,而是那些正在为此工作的人的决定问题?
谢谢。
david
(David Taylor)
8
是的!欢迎您创建一个 Discourse core 的 PR,其中引入新的 outlet。
我不能保证它会立即被接受。但一旦我们有了起点,讨论就会更容易继续。
2 个赞
@david,感谢您的提议,我会在有时间的时候考虑它,但您需要明白,对于刚接触 Discourse 的人来说,这可能需要一些时间,因为我需要弄清楚如何进行正确的修改,再加上您提到的审批阶段以及在下一个版本发布之前的时间。
我希望更有能力的开发团队可以在一小时内完成,如果只是添加 PluginOutlet 包装器和在不同位置的组件中添加一些内容(我可能错了),这将缩短其进入新版本发布所需的时间。
尽管如此,正如我上面提到的,我会考虑您的提议。
我仍然没有收到关于我的问题的答复,即是否可以在当前版本的 Discourse 中完成我提到的事情,或者我提到的更改是否需要先添加/贡献(在这些组件中添加 PluginOutlet)?
我之所以这样问,是因为我有一项工作范围需要完成,但我无法完成,我需要向团队解释我为什么无法完成,所以要么工作范围会更改为做我们可以做的事情,要么我将不得不为此做出贡献,并希望它能被添加到核心并在即将发布的版本中发布。所以我需要 Discourse 开发团队确认这是否可行。
另外,查看主仓库 https://github.com/discourse/discourse,我没有在拉取请求旁边看到问题部分,人们通常在那里创建描述问题是否损坏或缺失的问题。
Moin
10
损坏的东西归类到 Bug,缺失的功能归类到 Feature(或者例如插件插槽 Dev)。
您使用的是稳定分支吗?那么距离下一个稳定版本还有相当长的时间,但否则您无需等待 PR 合并后提交被添加到最新分支。
1 个赞
您好 @Moin ,感谢您的信息!
我使用 Discourse 的 Docker 设置,您关于分支的建议很好,是的,我可能可以在 PR 合并时更改它,而不必等到实际发布。
查看 app.yml,我可以看到它使用了 tests-passed 版本(分支),从 GIT 来看,我认为这并不是最稳定的选择。是更倾向于使用 main 还是切换到 latest tag?对于 Docker 设置,是否可以切换到 tag?
1 个赞
Moin
12
tests-passed 是最新版本:"tests-passed" is now "latest"
不建议在生产环境中使用 Main 分支。
1 个赞
@david, @Falco 我创建了一个PR,请审阅并告知我是否缺少任何内容。我需要尽快推进此事,如果您能以某种方式优先处理,我将非常感激。
3 个赞
@david ,只想感谢您如此快速地审查和合并 PR。
2 个赞