即将到来的主题列表变更——如何准备主题和插件

抱歉占用您的周末时间 David,是的,刚看到 API,谢谢

3 个赞

您好,我尝试像这样为“topic-list-columns”使用值转换器:

export default {
    name: "assignment-topic-list-column-modifier",

    initialize(container) {
        const router = container.lookup("service:router");

        withPluginApi("1.39.0", (api) => {
            api.registerValueTransformer(
                "topic-list-columns",
                ({ value: columns }) => {
                    if (ASSIGN_LIST_ROUTES.includes(router.currentRouteName)) {
                        columns.add("posters-recent", {
                            header: AssignHeaderCell,
                            item: AssignCell,
                            after: "posters",
                        });
                    }
                    return columns;
                }
            );
        });
    },
};

目标是在“posters”列之后插入新的列项和标题,它对项有效,但标题仍然不在正确的位置,它被放置在“activity”列之后。

我的代码有什么遗漏吗?是否有任何文档解释了如何正确执行此操作?

有一个新指南:

但是,在这种情况下它可能不是很有用。

@NateDhaliwal 谢谢你的信息,我会去查看。

我认为代码应该看起来像这样:

columns.add(
  "posters-recent",
  { header: AssignHeaderCell, item: AssignCell }
  { after: "posters" }
});

您可能需要指定一个 before

{after: "posters", before: "replies"}
1 个赞

@Arkshine 非常感谢,你的代码奏效了!!!太棒了 :+1:

1 个赞

我们现在为这些弃用功能启用了警告横幅,因此社区管理员将收到有关仍需更新的主题或插件的通知。

我们还发布了一份参考指南,其中包含指向您可以自定义新主题列表的所有不同方式的链接:

我已将链接添加到 OP。

6 个赞

大卫,不确定你更喜欢这个主题还是另一个,但这是:

我的新(我认为)符合规范的组件在“启用 Glimmer 主题列表”设置为“自动”时失败……

这表明新的 API 在“自动”时未被激活……我是否需要做些什么来指示主题组件,以便 Discourse 在“自动”时使用新的 Glimmer API?

3 个赞

我注意到这里的警告:

但它仍然没有搞砸任何事情,尽管您上面提供的日期已经过去,而我使用的是最新版本……?

事情有点延迟,但我们希望在未来一到两周内完成旧代码的弃用。

那么,这会完全破坏尚未更新的主题吗?我们应该避免更新吗?或者,如果我们分叉主题,有什么可以简单做的吗?

1 个赞

是的,这会阻止它们对主题列表的自定义生效。

我不建议这样做。Discourse 核心更新通常包含安全修复程序,如果您停止更新,您的社区可能会面临风险。

听起来您已经在另一个主题中解决了这个问题:您已经解决了 :chefs_kiss:

2 个赞

Discourse 核心已移除旧的主题列表和“原始 Handlebars”系统(请参阅此处的提交)。感谢所有为此次更改更新插件和主题的各位!:rocket:

5 个赞

太棒了!祝贺 CDCK 团队完成了这项工作。 :partying_face:

也要感谢您和您的团队对功能请求的积极响应以及新 API 设计的深思熟虑 :heart_eyes:

我曾担心我们会失去一些功能。但实际上,我们获得了更多功能,同时使用起来也更加方便! :rocket:

6 个赞

关于原始模板,我是否正确理解,在模板中使用带有自动完成功能的组件(例如 emoji)将不再可能?

this.textManipulation.autocomplete({
      template: renderEmojiAutocomplete,

看起来现在只能返回 HTML 了。
我认为您说过自动完成将在某个时候被重新设计,但这可能不会很快实现。

您是否看到了这里的解决方法?(尝试修复 Emoji Fluff TC)

3 个赞

抱歉,我们没有为自动完成功能设置适当的弃用消息!但有一个前进的方向——请查看:Autocomplete still using Raw Templates - #4 by david

2 个赞