L’algorithme intégré de tri par popularité (Hot sorting) est très simple et pourrait ne pas convenir à différents cas d’utilisation. D’après ma compréhension de base de la base de code de Discourse, il n’existe actuellement aucun paramètre de site visible par l’utilisateur ni de point d’injection de plugin approprié pour personnaliser l’algorithme de tri par popularité. Il existe un événement topic_hot_scores_updated, mais il est appelé après la mise à jour des scores, ce qui sert à la notification sans la possibilité de remplacer les scores de popularité intégrés. Il existe deux paramètres de site, hot_topics_gravity et hot_topics_recent_days, mais ils ont la valeur hidden: true et ne sont pas visibles dans l’interface d’administration.
Nous envisageons d’écrire un plugin pour remplacer l’algorithme de score de popularité intégré. Quelle approche serait préférable en termes de compatibilité et de facilité de mise à niveau de Discourse à l’avenir ? Voici quelques-unes de mes idées :
- Faire un monkey-patch de
TopicHotScoreet mettre à jour la base de données selon notre algorithme personnalisé. - Créer une table séparée pour stocker les scores de popularité des sujets et exécuter une tâche d’arrière-plan distincte pour les mettre à jour. Ajouter une autre route (au lieu de /hot) pour notre liste personnalisée de sujets populaires.
- Ou peut-être que la base de code de Discourse pourrait être améliorée pour prendre en charge un tel cas d’utilisation ?