Ingresso argomento come plugin per i tag

Ciao, sto lavorando al mio primo plugin per Discourse.

L’idea

Vogliamo modificare leggermente il comportamento dei collegamenti ai tag: quando si clicca su un tag in qualsiasi punto di Discourse, invece di reindirizzare direttamente ad esso, vengono mostrate due opzioni: l’URL normale del tag (forum.com/tag/nome-tag) o una pagina esterna correlata di nostra scelta (something.site.com/some-name). Questa opzione dovrebbe apparire solo per i tag presenti nell’elenco.

L’elenco sarà sotto forma di un array Ruby di hash (o JSON) e può essere aggiunto direttamente al plugin o reso disponibile tramite un URL. (La prima opzione sembra più efficiente in termini di risorse: possiamo aggiornare l’elenco e ricostruire il plugin quando necessario, dato che gli aggiornamenti non saranno frequenti.)

# Array Ruby di hash
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"}
]

# OPPURE

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\"}]"

In pratica, vogliamo che l’opzione appaia come quando si clicca sul numero di risposte nella pagina principale del forum:

Le mie riflessioni

Ho trovato 2 metodi nell’API di Discourse relativi ai tag:

  1. addTagsHtmlCallback - In questo caso, dovrei impostare topic.tags come array vuoto subito dopo aver assegnato il suo valore a un’altra variabile. In questo modo impedirei il rendering dei tag e potrei scrivere il mio codice personalizzato.

  2. replaceTagRenderer - Il secondo metodo mi permette di modificare il rendering del tag, il che sembra meno “hacky” rispetto al primo metodo.

Tuttavia, in entrambi i casi devo restituire una stringa raw. Da quanto ho scoperto, non posso scrivere e compilare manualmente un template Ember. Ovviamente potrei semplicemente renderizzare collegamenti personalizzati e scrivere una semplice funzione con jQuery inserendola nella radice di app/assets/javascripts, ma si tratta di una soluzione molto diversa rispetto al codice di Discourse.

Sto seguendo la strada giusta? Qualsiasi aiuto sarà molto apprezzato.

5 Mi Piace

Per chiunque sia interessato, sono felice di annunciare la prima release del mio plugin!

Non vedo l’ora di ricevere i vostri feedback!

3 Mi Piace

Per tutti coloro che sono interessati, consiglio di controllare le ultime modifiche, in particolare:

Buon… giorno (?) a tutti!

:smiling_imp:

1 Mi Piace

Bene fatto @Eiji!


Speriamo di utilizzare questo plugin su Devtalk… per chiunque abbia esperienza con i plugin di Discourse, potreste dare un’occhiata per vedere se è possibile apportare qualche miglioramento? Lo apprezzeremmo molto :blush:

1 Mi Piace