创建自定义筛选器主页

我能创建一个像这样的动态主页吗:

  • 10个最近活跃的主题(本周)
  • 5个最新创建的主题(今天)
  • 5个更近期的主题(本周)
  • 5个回复最多的主题(本周)
  • 5个最受欢迎的主题(本周)
  • 5个最新创建的主题(昨天或今天)

有一个主题组件,通过它可以像在Discourse过滤主题列表中那样创建一个主页,但我觉得缺点是它只在特定的时间范围内有效,所以我必须每天更改时间范围。

我的意思是,目前,它的工作方式是我可以向其添加日期,例如:

activity-before:YYYY-MM-DD 在指定日期之前最新回复的主题
activity-after:YYYY-MM-DD 在指定日期之后最新回复的主题
created-before: YYYY-MM-DD 在指定日期之前创建的主题
created-after:YYYY-MM-DD 在指定日期之后创建的主题

但是这样我就必须总是更改日期。在论坛中,我还有其他替代方案吗?

2 个赞

此外,此组件的主要问题在于它在每次排序中都会重复主题

您的情况是否需要这些主题是字面意义上回复/点赞最多的?如果您使用 /top 主题列表,您可以获得自动时间段……最高因素是浏览量、点赞数和帖子数(您可以通过站点设置稍微调整这些权重)。

是的,这是从多个主题列表中提取的复杂问题,一个组件需要交叉引用每个列表并删除重复项。并不复杂,但我认为在任何可用组件中都没有实现这一点。

1 个赞

不完全取决于回复和点赞,但是的,只是想创建一个动态的主页。

所以,一个可以从任一字段中删除重复主题的组件就可以完成工作了吗?

是的,如果 @gormus 有兴趣,在 Filtered Topic Lists 中添加一个“隐藏重复项”功能不会太复杂。可以修改 findFilteredTopics 操作来将每个主题 ID 存储在一个列表中,然后过滤掉重复项。

缺点是,如果你想要一个包含 10 个主题的列表,在删除重复项后可能只剩下 5 个……但这可以通过获取比设置中指定的数量多一些的额外主题来部分避免。

1 个赞

在多个项目中,我都曾为首页添加过过滤列表,我想提醒大家,要用重叠的过滤器来填充多个“最新”列表,你首先需要一个非常活跃的社区。当你的社区如此活跃时,你也会拥有更丰富的内容来构建一个动态的首页。在这种情况下,一堆不同的列表可能会显得静态且不那么吸引人。

不过,从另一个角度来看,你也可以尝试只放置一两个带有手动时间过滤器的列表。这甚至可能让用户感觉更动态。就像在这个视图中一样:

这是我从Central主题中借鉴的一个功能,在这里可以作为一个块组件使用:Manuel Kostka / Discourse / Blocks / Top Topics · GitLab

4 个赞

没错,这可能行得通,但实际上我希望在页面上填充多个筛选器。

2 个赞

是的,这实际上可行。如果@gormus有兴趣的话 :))

我今天进行了一项更新,将对此有所帮助:FEATURE: allow date-based filters to accept a day count by awesomerobot · Pull Request #33197 · discourse/discourse · GitHub (下次更新 Discourse 时您应该会收到此更新)

这将允许您在 activity/created-before/after 过滤器中输入所需的日数,因此您可以执行以下操作:

activity-after:7 过去 7 天内活跃的主题
created-after:1 1 天前创建的主题

您也可以使用 0 表示今天(即午夜之后)

7 个赞

哇,真快。谢谢!!

2 个赞

您好 @awesomerobot ,只想告诉您我已经进行了必要的更改,现在运行得非常完美。谢谢 :))

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.