AstonJ
(AstonJ)
1
我已经仔细阅读了出色的插件和主题组件指南,但我在快速找到所需的模板、组件、小部件或插件插槽方面仍有些困惑。
我想先从三个简单的修改开始——如果有人能指点我正确的方向,那将非常有帮助:
我需要修改哪个模板、组件或插件插槽来实现以下更改?
- 查看主题页面(即查看某个主题时)HTML 的部分中的标签。我希望这些更改对搜索引擎机器人和人类用户都生效。
- 类别框的标记(无论在何处显示)。这些位于:管理控制面板 > 设置 > 类别样式。
- 关于页面(如何在管理员和版主区块中修改内容)。
在使用其他论坛软件进行主题定制时,通常会有一个父模板,其中包含构成该页面的所有元素的引用,从而可以快速找到需要编辑的模板。例如,会有一个名为 forumdisplay 的文件/模板(在 Discourse 中对应“查看类别”页面),其中包含主要 HTML 并引用其他所有模板;另一个用于 showthread 页面(即 Discourse 中的“查看主题”页面),还有一个用于成员个人资料页面等。这些文件就像查找所需内容的列表或映射。因此,如果您想编辑底层帖子标记,只需进入 showthread(即“查看主题”)文件/模板,浏览其中内容,就能发现需要编辑或查看的是 postbit 模板。
Discourse 是否有类似的功能?如果没有,能否请团队考虑添加类似的功能?这将会提供巨大的帮助:
6 个赞
AstonJ
(AstonJ)
3
我看到了(抱歉之前没提!),这对可见的插件出口非常有用,但模板/组件/小部件等呢?Robert,你是如何快速轻松地找到它们的?你知道第一帖中提到的那些在哪里吗?
1 个赞
我的建议是始终从简单入手。先处理一个简单的需求,弄清楚如何实现,然后再进行下一步。
至于主题定制,我认为大部分工作都是对 CSS 的修改。请使用 常规资源。如果遇到无法通过 CSS 解决的情况,则需要考虑使用 jQuery 修改模板,或者在必要时覆盖模板。为新颖的使用场景构建自己的组件或小部件并将其附加上去。
源代码永远是您的朋友,浏览 GitHub 上的 discourse/discourse 目录结构,您就能找到应用程序的各个部分。我认为模板是相对容易理解的部分。如果您还不熟悉 Ember 的目录结构,那么现在正是熟悉它的好时机。
5 个赞
AstonJ
(AstonJ)
6
谢谢两位的回复 
我本来就是这么想的(我觉得没有比编辑标题标签更简单的了)。在其他论坛软件上,我只需打开“显示帖子”页面的文件/模板并进行编辑,整个过程 literally 不到一分钟。我多么希望 Discourse 的主题定制也能如此简单(当然,也许正是因为我目前不熟悉 Discourse 的主题定制,才感到如此迷茫)。
我认为我帖子开头提到的所有项目都需要这样做,因为它们需要修改现有内容(而不是在特定位置追加或前置内容,而插件出口似乎更侧重于后者)。
我觉得这很可能就是问题所在。我不了解 Ember,也许正是这一点让这一切感觉有些陌生。我多么希望有一个像 (deprecated) Plugin outlet locations theme component 这样的资源,但是针对模板以及其他所有可定制的内容——那将是一个巨大的帮助。
那你通常是怎么找到你需要的东西的呢,Kris?
啊,谢谢,这真是很好的建议!
你确定吗,Kris?我以为插件(或插件出口)只能让你在特定出口的位置添加内容。而如果要更改标题标签的格式,我可能需要打开现有的模板(或组件或小部件)并进行复制/编辑。至少这是我阅读了关于插件和主题定制的两份指南后的理解。
谢谢!这看起来就是我需要的那个 
再次感谢,哈哈!鉴于它们的命名方式以及你的指点,现在这两个看起来都相对容易找到了。我想,之前被更改标题标签难住可能也是一个因素 
目前感觉我好像漏掉了什么,正如 @merefield 指出的那样,这可能是由于我对 Ember 不熟悉。有人知道有什么 YouTube 视频能快速带你入门吗?也许你或者 @merefield 可以做一个?
1 个赞
Ember 非常值得学习。它功能强大、可扩展且快速。
阅读以下内容将有助于更好地理解源代码:
请学习模板、计算属性、路由器和组件。
Discourse 并不完全等同于原生的 Ember 应用,但无论如何,官方指南都非常有帮助。
还有一个重要提示:找一个现有的(优秀的)插件,它实现了与你目标类似的功能。查看其代码并借鉴其实现方法。
8 个赞
AstonJ
(AstonJ)
8
谢谢罗伯特!它提示该版本的指南已过时——是 Discourse 正在使用该版本,还是我应该阅读最新的 3.15 版指南?
1 个赞
暂时请阅读 3.10 版本,这是 Discourse 当前使用的版本。如果您打开 JavaScript 控制台,可以看到实例运行的 Ember 和 jQuery 版本。
另外请注意,代码装饰存在多种“风格”,因此源代码中的内容有时会有细微差异。
7 个赞
AstonJ
(AstonJ)
10
可惜不是这个 :–(
我也试过了这些:
我创建了一个主题组件,并向其中添加了以下内容:
<script type="text/x-handlebars" data-template-name="components/categories-boxes">
test
</script>
但是将 data-template-name 改为上述所有名称都没有效果。(当我将其改为 components/topic-list 时,则能正常工作。)
有人知道这个模板在哪里吗?
我想编辑的是这个(但在“方框”格式显示时,路径为:管理面板 > 设置 > 分类样式):
非常感谢您的帮助。
1 个赞
AstonJ
(AstonJ)
11
看起来使用主题组件无法实现这一点,因为似乎没有相关的模板或组件可用:sob:
看起来这个 Ruby 模块正在注入内联样式:discourse/lib/category_badge.rb at 888e68a1637ca784a7bf51a6bbb524dcf7413b13 · discourse/discourse · GitHub
这原本是否只是一个临时措施?如果不是,您认为是否可能允许我们指定自定义样式呢?@sam
它可以与现有的 none 选项绑定,这样我们可以在管理设置面板中添加两个字段,分别粘贴各自的样式(如果未粘贴任何样式,其行为就与当前的 none 选项相同):
<span class="badge-category-bg" style="background-color: #25AAE2;"></span>
以及
<span style="color: #FFFFFF;" data-drop-close="true" class="badge-category clear-badge restricted" title="A category exclusive to members with trust level 3 and higher."><svg class="fa d-icon d-icon-lock svg-icon svg-string" xmlns="http://www.w3.org/2000/svg"><use xlink:href="#lock"></use></svg><span class="category-name">Lounge</span></span>
来自此代码片段:
我们只需要从常规的分类编辑页面访问背景色和文字颜色变量即可。
或者,Sam,还有其他方法可以编辑这个吗?我只是想移除背景色,并给它添加一个与文字颜色相同的边框(如在常规分类编辑页面中指定的那样)。
任何帮助都将不胜感激。
编辑:看来问题并不出在那个 Ruby 文件上(我在开发环境中编辑了它,但没有任何变化)……进一步挖掘后发现,问题似乎出在这个文件上:discourse/app/assets/javascripts/discourse/helpers/category-link.js.es6 at b25d9e96c1414bf78b44221da4d385675843991e · discourse/discourse · GitHub 有没有办法创建一个插件来修改它?
2 个赞