Modifica il comportamento predefinito del pulsante "Nuovo argomento"

Ciao a tutti,

Sto cercando di modificare il comportamento predefinito del pulsante “Nuovo argomento” in Discourse 2.6.1. Ho un plugin personalizzato che modifica le azioni Ember predefinite per eseguire la mia funzione. Funzionava correttamente con una versione precedente di Discourse (1.8.0), ma non riesco a ottenere lo stesso risultato nella nuova versione. Il codice è il seguente:

const NavigationDefaultController = require('discourse/controllers/navigation/default').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...

function myFunction() {
    CODICE QUI
}
...
NavigationDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

SearchResultsDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

Il primo controller definito gestisce le azioni del sito principale (che non funzionano nella nuova versione), mentre il secondo definisce le azioni da eseguire durante una ricerca nell’app (e funziona anche nella nuova versione).

Ho notato che i pulsanti “Nuovo argomento” vengono creati utilizzando le azioni “createTopic” e “clickCreateTopicButton”, ma nessuna di esse funziona nel sito principale. Devo modificare un’altra azione o devo utilizzare un controller diverso?

Grazie

1 Mi Piace

Qualcuno può aiutarmi?

1 Mi Piace

Capisco il tuo problema.

Come aggiungere un campo personalizzato a un argomento è la mia migliore idea. Anche se si tratta di un argomento piuttosto distante dal tuo problema, è ben documentato.

1 Mi Piace

Ciao @pfaffman,

Grazie per il suggerimento. Tuttavia, se non sbaglio, quel plugin ti consente di aggiungere un nuovo campo personalizzato a un argomento, ma ciò che vorrei fare è eseguire il mio codice JavaScript quando si fa clic sul pulsante “Nuovo argomento”. Credo che il mio problema riguardi principalmente il controller di Discourse da utilizzare, il nome della funzione da eseguire e come sovrascrivere tale funzione. Puoi darmi una mano in merito?

Grazie

Beh, dannarzia. Scusa. Pensavo che ci fosse del codice JavaScript al suo interno (ad esempio in discourse-topic-custom-fields/assets/javascripts/discourse) che potesse essere utile per capire come collegare tutto ciò. Non sono ancora molto bravo con le cose del front-end, quindi temo che questa fosse la mia migliore risposta gratuita. :man_shrugging:

Grazie per il tuo aiuto, @pfaffman. Ho finalmente trovato il controller e l’azione che dovevo modificare e il plugin funziona di nuovo su Discourse 2.6.x

const NavigationDefaultController = require('discourse/components/d-navigation').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...

function myFunction() {
    CODICE QUI
}
...
NavigationDefaultController.reopen({
  actions: {
    clickCreateTopicButton: myFunction,
  },
});

SearchResultsDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

Nota: Questo è il codice del plugin all’interno di yourPlugin/assets/javascripts/discourse/initializers

Non appena clicco sul pulsante “Nuovo argomento”, il mio codice JavaScript viene eseguito e gli utenti ricevono il menu che ho creato per il forum.

3 Mi Piace

Ottimo! Sono così felice che tu l’abbia trovato! Anche se per me rimane un po’ un mistero dove vanno le cose e come chiamarle, sto migliorando.