Entrée de sujet comme plugin pour les tags

Bonjour, je travaille sur mon premier plugin Discourse.

L’idée

Nous souhaitons modifier légèrement le comportement des liens de tags : lorsqu’un tag est cliqué n’importe où dans Discourse, au lieu d’y accéder directement, deux options s’affichent ; l’URL normale du tag (forum.com/tag/nom-du-tag) ou une page externe (liée) de notre choix (quelquechose.site.com/quelque-nom). Cette option ne s’afficherait que pour les tags présents dans la liste.

La liste sera sous la forme d’un tableau Ruby de hachages (ou JSON) et peut soit être ajoutée directement au plugin, soit être accessible via une URL. (La première option semble plus économe en ressources : nous pouvons simplement mettre à jour la liste et reconstruire le plugin lors des mises à jour, qui ne seront pas fréquentes.)

# Tableau Ruby de hachages
array = [
  {forum_tag: "discourse", external_slug: "discourse"},
  {forum_tag: "dc", external_slug: "discourse"},
  {forum_tag: "xenforo", external_slug: "xenforo"},
  {forum_tag: "xf", external_slug: "xenforo"}
]

# OU

array.to_json
=> "[{\"forum_tag\":\"discourse\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"dc\",\"external_slug\":\"discourse\"},{\"forum_tag\":\"xenforo\",\"external_slug\":\"xenforo\"},{\"forum_tag\":\"xf\",\"external_slug\":\"xenforo\"}]"

Nous souhaitons essentiellement avoir la possibilité d’afficher un menu similaire à celui qui apparaît lorsque vous cliquez sur le nombre de réponses sur la page principale du forum :

Mes réflexions

J’ai trouvé deux méthodes dans l’API Discourse liées aux tags :

  1. addTagsHtmlCallback - Dans ce cas, je devrais définir topic.tags sur un tableau vide immédiatement après avoir affecté sa valeur à une autre variable. Cela me permettrait d’empêcher le rendu des tags et d’écrire mon propre code.

  2. replaceTagRenderer - La seconde méthode me permet de modifier le rendu du tag, ce qui semble moins « hacky » que la première méthode.

Cependant, dans les deux cas, je dois retourner une chaîne raw. D’après mes recherches, je ne peux pas écrire et compiler manuellement un modèle Ember. Évidemment, je pourrais simplement rendre des liens personnalisés et écrire une fonction simple avec jQuery en la plaçant à la racine de app/assets/javascripts, mais c’est une solution très différente par rapport au code de Discourse.

Suis-je sur la bonne voie ? Toute aide sera grandement appréciée.

Pour tous ceux que cela intéresse, je suis ravi d’annoncer la première version de mon plugin !

J’ai hâte de recevoir vos retours !

Pour tous ceux qui sont intéressés, je recommande de consulter les dernières modifications, en particulier :

Bonne… journée (?) à tous !

:smiling_imp:

Bravo @Eiji !


Nous espérons utiliser ce plugin sur Devtalk… Si vous avez de l’expérience avec les plugins Discourse, pourriez-vous jeter un coup d’œil pour voir si des améliorations peuvent être apportées, s’il vous plaît ? Nous vous en serions reconnaissants :blush: