Встроенный алгоритм сортировки «Популярное» очень прост и может не подходить для различных сценариев использования. Исходя из моего базового понимания кодовой базы Discourse, на данный момент отсутствуют настройки сайта, доступные пользователю, или подходящие точки внедрения для плагинов, позволяющие настроить алгоритм сортировки «Популярное». Существует событие topic_hot_scores_updated, но оно вызывается уже после обновления оценок; оно служит для уведомления, но не позволяет переопределить встроенные оценки популярности. Есть две настройки сайта: hot_topics_gravity и hot_topics_recent_days, но у них установлено значение hidden: true, поэтому они не отображаются в административном интерфейсе.
Мы рассматриваем возможность создания плагина для замены встроенного алгоритма оценки популярности. Какой подход будет лучше с точки зрения совместимости и простоты обновления Discourse в будущем? Ниже приведены некоторые из наших идей:
- Использование monkey-patch для класса
TopicHotScoreи обновление базы данных в соответствии с нашим собственным алгоритмом. - Создание отдельной таблицы для хранения оценок популярности тем и запуск отдельного фоновой задачи для их обновления. Добавление нового маршрута (вместо /hot) для отображения списка тем по нашему собственному алгоритму.
- Или, возможно, кодовую базу Discourse можно улучшить, чтобы поддержать такой сценарий использования?