JQ331
22
谢谢,@tshenry。我不确定为什么群组所有者代码对我不起作用——可能是与我设置插件的方式有关。
我发现 AJAX 方法可以作为“最小可行产品”(MVP)方案。顺便提一下,我相信你可以向 [forum-url]/groups.json 发起 API 请求来获取所有站点群组,然后从中进行循环处理,因此无需发起多次请求。
我想请教一下:
–对于 AJAX/JSON API 方案,你知道如何设置成仅当用户访问特定页面时才运行某个函数吗?目前,如果我将 AJAX 代码放在自定义仪表盘的 </head> 部分,它可以工作,但每次加载站点时都会运行(而我只希望在加载群组索引页面时运行)。
–在我的情况下,我目前使用 AJAX 不仅是因为需要显示群组所有者,还需要展示我为群组添加的一些其他新属性。这些属性类似于我正在尝试检索并显示的群组自定义字段。目前,“MVP”版本(在我仍在学习 Discourse 代码库如何运作的过程中)是将这些数据保存到另一个非 Discourse 数据库中,然后从中提取并添加到群组索引页面。
显然,更干净的解决方案是将这些自定义属性直接添加到 Discourse 数据库中的群组记录中,并从中调用。我只是想评估一下这需要什么样的工作量。这是否需要重新编写大量的 Discourse 文件(控制器、模型、模板)?
tshenry
(Taylor)
23
我有空的话可以把它放到一个小的 GitHub 仓库里。
我不认为这会提供对所有者数据的访问权限,但也许我漏掉了什么。
关于你的问题:
-
我链接的主题组件做了类似的事情,以确保 AJAX 调用仅在 /latest 或首页发生。你可以尝试基于这个思路进行构建:discourse-featured-topics/common/head_tag.html at ddf3d7e003423e2e5f83446a80cab78d51f09e2d · awesomerobot/discourse-featured-topics · GitHub
另外,如果你还没有看过,务必查看一下 Developing Discourse Themes & Theme Components
-
不像 自定义用户字段 那样,Discourse 没有内置的自定义群组字段概念。我认为你需要构建一个插件,添加所有必要的部分才能实现该功能。
JQ331
24
你说得对。我忘了——这也是我现在通过 AJAX(以及一些其他技巧)调用一个单独数据库来存储的内容。
好主意——我看到了你在该仓库中使用的 if ((url == "/") || (url == "/latest") ) 逻辑。我也可以采用类似的方法。
是的——我已经阅读了该指南以及其他我能找到的相关文档。这是一份很棒的指南,但我发现从这些指南(以及 meta 上的其他文档)过渡到实际实现这类自定义内容颇具挑战性。据我所知,这些自定义需要真正理解模板、控制器和模型在 Discourse 代码库中是如何协同工作的。
题外话
Ember 可能是一个构建高性能应用的优秀系统,但我确实觉得难以理清不同文件之间的关系。例如,在 GitHub 仓库中找到视图中的正确模板并不能告诉你它链接了哪些其他模板,更不用说哪些控制器和其他模型可能相关。这是可能的,但进展缓慢,而且你确实需要理解这些关系才能完成这些自定义。
作为替代方案,在 Angular 中,视图组件的各个部分通常与 html、typescript 和 css 文件一起组织,其他相关文件也会在这些文件中明确标记(例如,使用的服务会在 typescript 文件中标识,插入的其他组件会在 html 文件中清晰标注)。据我所见,Discourse 的 Ember 结构并非如此(并非要贬低这种结构——它是一个非常稳定且高性能的应用——只是需要时间适应)。
因此,我在使用 AJAX 等技术来达到相同效果,同时继续尝试理解 Discourse 各部分是如何协同工作的。