网站超过1000个类别的子类别视图问题

我正在托管一个拥有 1,000 多个类别的网站。该社区运行的网站更喜欢使用类别进行语义分离,而不是使用标签。

这运行得相当好,但是,我最近遇到了一个问题(我不确定它是什么时候开始的):

浏览一个拥有 20 多个子类别并且使用“Boxes”来渲染子类别链接元素的类别视图时,列表中只显示(第一个?)20 个类别。
点击 details 下拉选择元素会显示完整的列表

根据我的初步调查,我遇到了 discourse/app/models/category_list.rb at main · discourse/discourse · GitHub 以及它如何处理拥有 1,000 多个类别的网站的一些行为。

我怀疑视图 discourse/app/views/categories/index.html.erb at main · discourse/discourse · GitHub 如何处理它接收到的类别列表,并且不进行分页,导致视图只显示 20 个子类别。

这是预期行为吗?

是的,我认为你的怀疑是对的。Discourse 的设计初衷并不是为了处理数千个类别,原因有很多。我们一直在对类别加载进行一些工作,未来可能会有所改变。

3 个赞

感谢您的澄清。

您是否会考虑至少以某种方式使 CategoryList::CATEGORIES_PER_PAGECategoryList::MAX_UNOPTIMIZED_CATEGORIES 可配置?即使是隐藏的站点设置在我的情况下也适用。

编写插件代码来替换它们有点难看,因为我找不到其他方法,只能通过 monkey patching CategoryList 来实现,这感觉非常脆弱。

Monkey patching 的世界当然不是理想的选择。

话虽如此,但我担心会去修改 CategoryList::MAX_UNOPTIMIZED_CATEGORIES,我们选择这个值是因为数量再多就会出现问题。不过 CategoryList::CATEGORIES_PER_PAGE 应该可以轻松地提高到 100。

@nbianca / @hugh 有什么想法吗?

2 个赞

我已经修复了一个 Bug:

我们引入此功能是为了解决拥有超过 1000 个分类的站点,“/categories”页面无法使用的问题。但不幸的是,这引入了一个 Bug,即如果一个站点有超过 1000 个分类,它将尝试强制子分类也进行懒加载(或分页),即使并非如此。

3 个赞