Personnaliser les entrées de la liste de sujets (tri, regroupement, filtrage) pour une meilleure organisation

TLDR :
Quelle est la manière la plus rapide de modifier la composition de filteredTopics (ligne 26) ? J’aimerais avoir un contrôle total sur les sujets (avec quelles propriétés) collectés.

Bonjour la communauté,

J’utilise le composant de thème GitHub - discourse/discourse-topic-thumbnails: Display thumbnails in topic lists sur notre environnement hébergé et nous souhaitions y apporter des modifications supplémentaires pour répondre à nos besoins.

Au lieu d’avoir tous les sujets mélangés dans un seul grand bloc d’éléments de grille, nous aimerions y apporter un peu d’ordre.
Nous visons ce qui suit :
Initialement, nous voulons trier par lu/non lu, puis par catégorie ; ensuite, nous aimerions les regrouper par chronologie (et créer des groupes, par exemple Aujourd’hui (tous les messages pertinents d’aujourd’hui), Hier, La semaine dernière.

Notre liste de sujets devrait donc ressembler à ceci avec 3 grilles distinctes les unes sous les autres :

<AUJOURD’HUI, HIER, LA SEMAINE DERNIÈRE> représente un regroupement

ÉPINGLÉS :
Sujet 20, Sujet 30, Sujet 40

NON LU :
<AUJOURD’HUI : [ART : Sujet 1, Sujet 2], [DESIGN : Sujet 4]> <HIER : [CONCEPT : Sujet 3], [AUTRE_CATÉGORIE : Sujet 6, Sujet 11]> <LA SEMAINE DERNIÈRE : Sujet 8, Sujet 10>

LU :
<AUJOURD’HUI : [ART : Sujet 4, Sujet 12], [DESIGN : Sujet 4]> <HIER : [CGI : Sujet 13], [AUTRE_CATÉGORIE : Sujet 16, Sujet 21]>, <LA SEMAINE DERNIÈRE : Sujet 18, Sujet 100>

Ma question principale serait comment créer/étendre la requête qui génère le jeu de résultats qui est ensuite parcouru dans

via filteredList.

J’ai trouvé un endroit où cela est peut-être peuplé mais je n’étais pas sûr de comment l’“étendre”. Il semble y avoir un système de queryParam et des éléments de route qui peuvent affecter un jeu de résultats mais je n’ai pas compris.

Quelqu’un peut-il m’indiquer le bon endroit ?

Nous utilisons le composant de thème mentionné ci-dessus, ce qui signifie que nous sommes limités dans ce que nous pouvons faire.
Ce serait utile si quelqu’un pouvait me montrer comment limiter filteredList aux seuls sujets de messages non lus, par exemple - je pourrais ensuite continuer à partir de là.

Merci beaucoup !

CC @pfaffman

Juste pour info, mais Topic List Thumbnails est un Customization > Theme component plutôt qu’un plugin. :+1:

Oui, merci, j’étais au courant mais j’avais manqué les bons termes. Je vais ajuster cela.

Jammy, j’ai ajouté un tldr. Avez-vous des indices sur cette question raccourcie ?
Merci

Je crains que cela ne dépasse mes compétences. :slight_smile:

Avez-vous consulté la section sur la modification des classes dans le guide pour développeurs de thèmes Discourse : Developing Discourse Themes & Theme Components ? Il pourrait y avoir quelque chose qui puisse vous aider. Une recherche pourrait également donner des exemples utiles si vous élargissez vos mots-clés ?

Oui merci Jammy, je suis au courant de ces choses et j’ai également écrit certains plugins privés (ou les ai étendus). Le truc ici, c’est que je ne comprends pas où la liste est agrégée et comment fonctionne toute la logique de RECHERCHE DE SUJETS ou où elle se trouve réellement. Si je connaissais l’une ou l’autre de ces deux choses, je pourrais avancer.

J’ajoute d’autres personnes en copie car je les ai vues dans le code Git.

Juste pour information, c’est en fait une très mauvaise étiquette Meta de taguer les membres de l’équipe de cette façon, j’ai donc supprimé ces tags afin de ne pas créer un modèle que d’autres pourraient tenter de reproduire. :+1:

Je suis vraiment désolé que votre sujet n’ait pas suscité plus d’intérêt. Je ne connais pas ce domaine, je ne peux donc pas répondre directement.

Avez-vous progressé dans vos recherches/tentatives ?

Je pensais être malin en mettant en copie les bonnes personnes :rofl:

Et non, je n’ai pas avancé davantage. J’ai essayé d’afficher la liste des sujets 3 fois, puis de masquer les sujets indésirables dans chacun d’eux, mais la fonctionnalité “charger plus” s’est activée et une grande partie du DOM a été réécrite, et mes calculs JS sont devenus trop lourds et ont provoqué des effets étranges.

J’ai compris que je devais le faire correctement en utilisant les API fournies par Discourse.

J’ai fait des progrès significatifs ici et j’ai eu quelques questions supplémentaires en cours de route :

  • Existe-t-il un point de terminaison d’API que je peux utiliser pour obtenir tous les sujets épinglés ? Similaire à /latest.json ou /top.json ?
  • Existe-t-il une commande JS (en supposant que je suis dans un plugin) que je peux utiliser pour forcer le re-rendu de la liste des sujets, après avoir effectué un changement de statut sur les éléments de la liste des sujets, afin que le changement soit immédiatement reflété ? Je suppose que je dois travailler avec un observateur sur topics. ?

De plus, j’ai trouvé l’article suivant qui contient tout ce dont j’ai besoin pour personnaliser la liste des sujets que je souhaite.

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

Je suis content que vous ayez fait des progrès - vous êtes clairement en territoire inconnu !

Les sujets épinglés peuvent être obtenus en interrogeant /search.json?expanded=true&q=in%3Apinned
Utilisation de la recherche sans mot-clé de recherche réel.

Cela ne renvoie qu’une liste d’identifiants de sujet ou, disons, un ensemble de données de sujet simplifié. Vous devrez effectuer des requêtes ajax de suivi vers /t/${topic.id}.json pour obtenir l’ensemble de données complet entourant un sujet.

Je suis toujours intéressé par la façon dont je peux forcer un nouveau rendu d’une liste de sujets via JS.