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

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

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

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

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

По результатам первоначального расследования я обнаружил файл discourse/app/models/category_list.rb at main · discourse/discourse · GitHub и то, как в нём реализовано поведение для сайтов с более чем 1000 категориями.

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

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

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

3 лайка

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

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

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

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

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

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

3 лайка

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

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

4 лайка