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 :
-
addTagsHtmlCallback- Dans ce cas, je devrais définirtopic.tagssur un tableau vide immédiatement après avoir affecté sa valeur à une autre variable. Cela me permettrait d’empêcher le rendu destagset d’écrire mon propre code. -
replaceTagRenderer- La seconde méthode me permet de modifier le rendu dutag, 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.
