# Ingresso argomento come plugin per i tag

**URL:** <https://meta.discourse.org/t/topic-entrance-like-plugin-for-tags/173070>\
**Category:** Development\
**Created:** [12 Dicembre 2020, 7:22am UTC](https://meta.discourse.org/t/topic-entrance-like-plugin-for-tags/173070 "2020-12-12T07:22:16Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![Eiji](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eiji/32/468368_2.png) [@Eiji](https://meta.discourse.org/u/Eiji)\
**Post date:** [12 Dicembre 2020, 7:22am UTC](https://meta.discourse.org/t/topic-entrance-like-plugin-for-tags/173070/1 "2020-12-12T07:22:16Z")

</div>

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](http://forum.com/tag/nome-tag)) o una pagina esterna correlata di nostra scelta ([something.site.com/some-name](http://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.)

```ruby
# 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:

 ![obraz](https://global.discourse-cdn.com/meta/original/3X/5/c/5cefc8145e628cf59402b1974b65ab8935893368.png)

### 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.

---

_[View the full topic](https://meta.discourse.org/t/topic-entrance-like-plugin-for-tags/173070)._
