# Проблема отображения подкатегорий для сайтов с более чем 1000 категориями

**URL:** https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920
**Category:** Bug
**Created:** [23.Февраль.2025 12:59:45 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920 "2025-02-23T12:59:45Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![av203](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av203/32/243894_2.png) [@av203](https://meta.discourse.org/u/av203)
#### Post date: [23.Февраль.2025 12:59:45 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920/1 "2025-02-23T12:59:45Z")

</div>

Я размещаю сайт, на котором более 1000 категорий. Сообщество, для которого он работает, предпочитает использовать категории для семантического разделения, а не, например, теги.

Это работает вполне нормально, однако недавно я столкнулся с проблемой (и не уверен, когда она появилась):

При переходе к просмотру категории, в которой более 20 подкатегорий и для отображения элементов ссылок на подкатегории используется «Boxes», в списке отображается только (первые?) 20 категорий.

При нажатии на выпадающий список `details` **отображается полный список**.

По результатам первоначального расследования я обнаружил файл [discourse/app/models/category\_list.rb at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/app/models/category_list.rb) и то, как в нём реализовано поведение для сайтов с более чем 1000 категориями.

Я подозреваю, что вместе с тем, как представление [discourse/app/views/categories/index.html.erb at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/app/views/categories/index.html.erb) обрабатывает полученный список категорий и не использует пагинацию, это приводит к тому, что в представлении отображаются только 20 подкатегорий.

Является ли это ожидаемым поведением?

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [23.Февраль.2025 20:18:20 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920/2 "2025-02-23T20:18:20Z")

</div>

Да, я думаю, что ваши подозрения абсолютно верны. Discourse не был спроектирован для работы с тысячами категорий по многим причинам. Мы проводим работу над загрузкой категорий, так что в будущем это может измениться.

---

<div class="post-metadata">

### Author: ![av203](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/av203/32/243894_2.png) [@av203](https://meta.discourse.org/u/av203)
#### Post date: [24.Февраль.2025 05:55:45 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920/3 "2025-02-24T05:55:45Z")

</div>

Спасибо за разъяснение.

Не могли бы вы хотя бы сделать `CategoryList::CATEGORIES_PER_PAGE` или `CategoryList::MAX_UNOPTIMIZED_CATEGORIES` настраиваемыми каким-либо образом? Даже скрытая настройка сайта подошла бы в моём случае.

Написание кода плагина для замены этих значений выглядит не очень красиво, так как я не нахожу другого способа, кроме как использовать monkey patching для `CategoryList`, что кажется крайне ненадёжным.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [24.Февраль.2025 06:02:21 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920/4 "2025-02-24T06:02:21Z")

</div>

Вход в мир monkey patching, безусловно, не идеален.

Тем не менее, я бы опасался возиться с `CategoryList::MAX_UNOPTIMIZED_CATEGORIES`, мы выбрали это значение, потому что при больших числах возникают проблемы. `CategoryList::CATEGORIES_PER_PAGE` же, вероятно, можно без проблем увеличить до 100.

@nbianca / @hugh, есть какие-то мысли по этому поводу?

---

<div class="post-metadata">

### Author: ![nbianca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nbianca/32/157984_2.png) [@nbianca](https://meta.discourse.org/u/nbianca)
#### Post date: [25.Февраль.2025 18:40:11 UTC](https://meta.discourse.org/t/subcategories-view-problem-for-site-larger-than-1-000-categories/353920/6 "2025-02-25T18:40:11Z")

</div>

Это ошибка, которую я только что исправил здесь:

> <https://github.com/discourse/discourse/pull/31507>
>
> Commit f1700ca58929bcbfad23565861d1d3084ae1b3f8 ensures that categories are load…ed lazily, in pages, if the number of visible categories is over
> 1000. This affected the list of subcategories on the category page too.
> 
> The logic has been changed to only paginate if the number of categories that would have been returned is grater than 1000. For example, if there is a parent category filter, pagination will only be enforced if the number of subcategories is over 1000.

Мы внедрили эту функцию, потому что на сайтах с более чем 1000 категориями страница «/categories» становилась непригодной для использования. К сожалению, это привело к ошибке: если на сайте более 1000 категорий, система пытается принудительно включить ленивую загрузку (или постраничную) также для подкатегорий, даже когда это не требуется.
