Comment récupérez-vous les données de la DB pour vos composants de thème ?

Quelqu’un sait s’il existe un guide ou un exemple quelque part, s’il vous plaît ?

Par exemple, si j’utilise un composant de thème pour créer une colonne latérale, comment puis-je afficher les 20 derniers sujets publics (ou, si c’est plus simple, ceux provenant des catégories que je spécifie dans la requête) dans cette colonne latérale ou ce composant de thème ?

1 « J'aime »

Il existe plusieurs façons de procéder. La plus simple consiste à utiliser un appel Ajax vers le point de terminaison de l’API Rails qui fournit les données que vous souhaitez afficher. Si vous voulez les 20 derniers sujets, vous pourriez essayer /latest.json.

Le défi survient lorsque vous devez combiner des informations provenant de plusieurs points de terminaison : vous devez alors attendre que plusieurs appels se terminent, ce qui peut vraiment ralentir les performances du composant de thème.

4 « J'aime »

Merci pour ta réponse, Justin :slight_smile:

Existe-t-il un moyen simple de réutiliser directement les flux/les données que Discourse fournit déjà ? (De sorte qu’ils respectent également les paramètres de l’utilisateur.)

Par exemple, dans une colonne latérale, nous pourrions afficher :

  • Les 10 derniers sujets (flux de la page « Derniers », mais respectant également les catégories muettes)
  • Les sujets les plus populaires cette semaine (de /top)
  • Les sujets les plus populaires ce mois-ci
  • Les sujets les plus populaires cette année
  • Les utilisateurs les plus actifs ce mois-ci (de /u?period=monthly)

C’est en fait assez facile à faire sur d’autres plateformes de forum et j’ai vraiment l’impression de manquer cette fonctionnalité avec Discourse :sob:

Tout à fait. Les appels Ajax vers les points de terminaison associés respecteront les paramètres actuels de l’utilisateur.

L’appel à /latest.json affichera uniquement les derniers sujets que cet utilisateur peut voir.

Effectuez une requête GET sur les mêmes chemins avec .json ajouté à l’URL et voyez ce que vous trouvez !

1 « J'aime »

Pensez-vous que cela serait plus ou moins équivalent à interroger directement la base de données avec les requêtes que ces points de terminaison exécutent de toute façon ? (Ou cela consommerait-il significativement plus de ressources, car cela pourrait équivaloir à charger 5 pages supplémentaires – une pour chaque point de terminaison ?)

Quoi qu’il en soit, j’aimerais beaucoup expérimenter cela : existe-t-il des guides ou des tutoriels montrant comment récupérer des données depuis un point de terminaison dans un composant de thème ? (Ou serait-il préférable ou plus efficace de créer un plugin à la place ?)

Je sais comment créer un composant de thème et un plugin « factice », mais je n’ai trouvé aucun guide montrant comment récupérer des données depuis la base de données dans ceux-ci.

https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949

Ce guide montre comment procéder avec un tag spécifique, mais vous pouvez reproduire cette approche avec n’importe quel point de terminaison.

3 « J'aime »