创建主题排序

:information_source: 摘要 为主题列表添加一个可排序的创建日期列
:eyeglasses: 预览 \u003chttps://discourse.theme-creator.io/theme/Alteras/created-topic-sort\u003e
:hammer_and_wrench: 代码库 GitHub - Alteras1/discourse-created-topic-sort: Discourse theme component adds topic sorting by created date
:question: 安装指南 如何安装主题或主题组件
:open_book: 刚接触 Discourse 主题? Discourse 主题使用入门指南

安装此主题组件

这为主题列表添加了一个可排序的创建日期列。还为导航栏添加了一个可选的“创建日期”选项卡。

在桌面视图中,会添加一整列。在移动设备上,仅当选择了“创建日期”排序时,创建日期才会内联显示在活动日期旁边(见下面的屏幕截图)。

\u003e :information_source: 在使用此组件之前,最好评估一下您的社区是否需要知道创建日期。已经有一个内置的方法可以自动标记在特定时间段内新创建的主题(用户可在“首选项”>“跟踪”>“主题”中自定义)。

设置

启用按创建日期排序的导航栏项目

在导航菜单中添加一个“按创建日期排序”的导航栏项目。默认值:true

屏幕截图

桌面

移动设备

仅在创建日期过滤器时启用创建日期列

阻止在创建日期过滤器之外显示创建日期列。需要启用“启用按创建日期排序的导航栏项目”。默认值:false

在主页中启用导航栏项目

在主页中添加“按创建日期排序”的导航栏项目。默认值:true

在主页中启用列

在主页中添加“创建日期”列。默认值:true

显示导航栏项目的类别

在“按创建日期排序”导航栏项目中显示的类别列表。留空则在所有类别中显示。默认值:empty

显示创建日期列的类别

显示“创建日期”列的类别列表。留空则在所有类别中显示。默认值:empty

导航栏项目位置

调整导航栏项目在列表中的位置。默认值:top

屏幕截图

排序


移动设备视图

带类别和标签

兼容性与注意事项

在移动设备上,排序功能本身已经受到很大限制,因此创建日期只能作为信息显示。仅当创建日期与最后活动日期不同时,才会显示附加字段。

主题列表缩略图 的兼容性有限。在列表样式中,它将正常工作。在博客样式中,创建日期将移至右下角。在网格样式和马赛克样式中,仅当选择了“创建日期”过滤器时,创建日期才会显示,并且会替换活动日期。在最小样式中,创建日期将被隐藏。

16 个赞

太棒了,又一个完美的插件改变了论坛!如果能与 Discourse Nav Item Icon / Emoji 插件集成那就太好了。

3 个赞

我认为它应该可以正常工作。:slight_smile:
只需像这样添加它,例如:
emoji:created_date:twitter:spiral_calendar:filter

4 个赞

可以确认添加设置,就像 Don 那样,它确实有效!


5 个赞

太棒了!不幸的是,它与“主题缩略图 TC”配合不佳,不知何故会增加额外的时间:

请注意中间底部多出的 7 小时。

看起来我只需要隐藏 .topic-list .topic-list-data:last-of-type,但我想还是告诉你一下 :grin:

编辑:我发现了另一个奇怪的现象,当我点击“最新”时,它会高亮显示“创建”,当我点击“创建”时,它会高亮显示“最新”:zany_face:

1 个赞

嗯。真有趣。看起来这只是主题缩略图和创建主题排序同时添加到模板中的一个奇怪的副作用。会不会只是 masonry 和 grid 模式的问题?我会在 CSS 中进行适当的调整,而不是仅仅隐藏它,一旦我找到一种干净的方法来检测主题组件的使用情况。

最新和创建的突出显示听起来真的很奇怪。创建应该只在 URL 包含 /latest?order=created 时才突出显示……嗯……

我已经更新了一些组件,使其更美观(或至少与“主题缩略图”组件匹配)。

在博客样式中,创建日期显示在右下角。我找不到一种简洁的方法将其放在紧邻“最后回复”日期旁边,所以就这样吧。在网格样式和砌体样式中,创建日期仅在选择了“创建”过滤器时可见,并且将替换活动日期。我曾尝试同时显示活动日期和创建日期,但这会让卡片显得拥挤。在最小样式中,创建日期被隐藏。

是否可以为此添加一个类别范围?我们希望在公告部分使用它,但不需要在一般讨论等部分显示它。

1 个赞

一点也没有!我刚刚发布了一个更新,增加了四个新设置,以帮助控制导航栏项目和列的显示位置。

  • 在主页中启用导航栏项目:在主页中添加“按创建日期排序”导航栏项目。
  • 在主页中启用列:在主页中添加“创建日期”列。
  • 显示导航栏项目的类别:将在“按创建日期排序”导航栏项目中显示的类别列表。留空则显示在所有类别中。
  • 显示创建日期列的类别:将显示“创建日期”列的类别列表。留空则显示在所有类别中。

但是,请注意,仅在新主题列表更改的网站上,列的显示限制才有效。

2 个赞

非常感谢!:star_struck: 太棒了!

有什么方法可以将此设为默认主页吗?我看到一些插件将选项添加到了“顶部菜单”站点设置中,所以我想这是可能的。

然后,我可以通过 CSS 隐藏标准的“最新”页面来有效地替换它。

可以通过一些 JS 设置默认的主页:

import { setDefaultHomepage } from "discourse/lib/utilities";
setDefaultHomepage("/latest?order=created");

在顶部菜单设置中添加这个选项当然更为理想,但我不认为可以通过 TC 来实现,至少根据我上次确认的情况。我还得看看中间是否有什么变化。

1 个赞

谢谢!这应该可以工作,但它会向网址附加 %3F_discourse_homepage_rewrite,这会干扰排序。:confounded_face:

2 个赞

我通过执行 setDefaultHomepage("latest?order=created&"); 解决了这个问题。
但是现在的问题是,尽管所有指标都显示如此,但实际排序并未生效。

所以我尝试使用 Custom Homepage for Groups 上的相同 URL,结果确实奏效了 :tada: 不确定为什么该组件的重定向会以不同的方式工作,因为我确信它使用了相同的方法。

2 个赞

明白了,需要清除 PreloadStore

因此,您可以编辑默认主题或添加一个新组件来将以下内容添加到 JS 中:

import { apiInitializer } from "discourse/lib/api";
import { setDefaultHomepage } from "discourse/lib/utilities";
import PreloadStore from "discourse/lib/preload-store";

export default apiInitializer((api) => {
  setDefaultHomepage("latest?order=created&");
  PreloadStore.remove("topic_list");
});

以及此 CSS 来移除“最新”选项卡:

li.nav-item_latest {
    display: none;
}

希望它能停留在根主页 URL,但这可能需要一个插件。

3 个赞

最终制作了那个插件:Created as Default Sort Order
所以我的主页干净地按创建时间排序。我仍然使用此组件来添加列。

4 个赞

感谢您提供如此出色的主题组件!

我做了一个非常小且简单的 PR,允许配置导航栏项出现的位置。

2 个赞

感谢您的 PR!我已将其合并,并更新了 OP 上的设置说明。

1 个赞