您好!我打算将我的 Discourse 实例用于 RPG。 用户作品集主题组件 非常适合展示用户提交的内容。具体来说,我希望能够在个人资料中看到用户角色、背景故事提交和 RPG 场景的列表。
唯一的问题是,这个主题组件一次只支持一个类别。我尝试将类别设置为 0 以包含所有类别,然后添加多个标签,但这导致作品集页面显示为空白。因此,我想编辑并安装此主题组件的多个实例,以便为这些单独的项目拥有多个作品集页面。
我尝试下载主题组件并编辑文件(例如,将 portfolio 改为 portfolio_2),然后在安装新副本的同时保留原始副本,但它们都不起作用。
当两者都启用时……
- 用户卡片上只显示一个作品集按钮实例(portfolio_2)
- 用户个人资料中只显示一个作品集按钮实例(portfolio_2)
- 用户个人资料中的 portfolio_2 页面为空白
这有可能实现,还是我应该放弃?
此功能源自 Topic List Previews。您也可以尝试使用它。
在 TLP 中,您还可以通过标签指定投资组合包含。
这将允许您跨多个类别选择主题。
1 个赞
谢谢,这里是个很棒的参考。我认为我更喜欢将“作品集”按钮放在个人资料的水平菜单中(在“摘要”、“活动”等旁边),但我遇到的更大问题是,如果存在多个标签,我希望能够按标签进行筛选,即用户可以点击按钮一次只查看作品集中的“角色”或“场景”。
我可能会尝试将这两个主题组件拼凑起来以达到此目的,但我会先再研究一下。如果任何人有其他想法,请分享!
1 个赞
没关系,但从逻辑上讲,它处于一般情况下的最佳位置:它就像其他“分类”一样,是所有活动的过滤器。
但请随意查看源代码,尽你所能!

我百分之百同意,这里是通用用例的好地方。我的特定用例是针对一个以角色扮演为中心的社区,用户会定期查找这些信息,因此我希望角色和场景跟踪按钮尽可能少点击即可访问,并且非常显眼。我并不是要贬低你的解决方案!
1 个赞
别担心,我没那么想。\n\n是的,我看到了你那里的用处。是时候定制解决方案了!
1 个赞
好的,我换了个方向,不再尝试使用 portfolio 插件。不确定是应该发在这里还是新开一个帖子——如果需要的话请告诉我!
有人能帮我看看,告诉我哪里做错了(希望也能告诉我为什么/如何修复)吗?我花了无数小时阅读教程、编写和修改代码,但我还是个新手,已经到了不知道下一步该尝试什么的程度了。
目标:在用户的摘要页面上显示特定类别的主题列表。
在此用例中,它用于一个 RPG 论坛,用户可以在其中创建角色来发布故事。我希望这个插件能显示用户创建了哪些角色,这样就不用费力去挖掘了。所有角色表都将存储在同一个论坛中。所以,我认为我只需要创建一个主题列表,从正确的用户和正确的论坛获取主题。
我使用了以下作为参考:
https://meta.discourse.org/t/add-a-featured-topic-list-to-your-discourse-homepage/132949
这是我的尝试。到目前为止,主题列表的标题(主题/回复/活动)显示在正确的位置,但没有填充主题。
<script type="text/discourse-plugin" version="0.8">
const ajax = require('discourse/lib/ajax').ajax;
const Topic = require('discourse/models/topic').default;
const User = require('discourse/models/user').default;
// 需要 ajax、Topic 和 User
api.registerConnectorClass('above-user-summary-stats', 'character-list', {
// above-user-summary-stats 是插件出口,character-list 是自定义组件名称
setupComponents(args, component) {
const store = getOwner(this).lookup("service:store");
return ajax(userPath(`/topics/created-by/${this.username_lower}.json`)).then(function (result) {
// 从 user.js 模型中的 summary() 获取的行;尝试查找我们正在查看的用户配置文件的用户名,以便访问他们创建的主题的 json
let characterList = [];
// 用于推送主题的空数组
result.topic_list.topics.forEach.category_id(4)(function(topic){
// 仅来自我们想要的确切类别的主题
// 大约在这个地方,Kris 的教程有一些将用户与主题关联的行。我忽略了它,因为我不需要除原始发帖人以外的用户显示在主题旁边。这重要吗?
//topic.posters.forEach(function(poster){
//poster.user = $.grep(featuredUsers, function(e){ return e.id == poster.user_id; })[0];
//});
characterList.push(Topic.create(topic));
// 将主题添加到主题列表中
});
component.set('characterList', characterList);
// 使用数组中的主题设置我们的组件
}); // 结束 ajax
} // 结束 setupComponents
});
</script>
<script type="text/x-handlebars" data-template-name="/connectors/above-user-summary-stats/character-list">
<div class="custom-character-list-wrapper">
{{topic-list topics=characterList showPosters=false}}
</div>
</script>