Modificar el comportamiento predeterminado del botón "Nuevo tema"

Hola a todos,

Estoy intentando modificar el comportamiento predeterminado del botón “Nuevo tema” en Discourse 2.6.1. Tengo un plugin personalizado que modifica las acciones predeterminadas de Ember para ejecutar mi función. Funcionaba correctamente con una versión anterior de Discourse (1.8.0), pero no logro obtener el mismo resultado en la nueva versión. El código es el siguiente:

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

function myFunction() {
    CÓDIGO AQUÍ
}
...
NavigationDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

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

El primer controlador define las acciones del sitio principal (lo cual no funciona en la nueva versión) y el segundo define las acciones que se ejecutan al realizar una búsqueda en la aplicación (y funciona en la nueva versión también).

He visto que los botones “Nuevo tema” se crean utilizando las acciones “createTopic” y “clickCreateTopicButton”, pero ninguna de ellas funciona en el sitio principal. ¿Necesito modificar otra acción o debemos usar un controlador diferente?

Gracias.

1 me gusta

¿Puede alguien ayudarme?

1 me gusta

Entiendo lo que sientes.

Cómo agregar un campo personalizado a un tema es mi mejor propuesta. Aunque está bastante lejos de tu problema, está muy bien documentado.

1 me gusta

Hola @pfaffman,

Gracias por la sugerencia. Sin embargo, si no me equivoco, ese plugin te permite agregar un nuevo campo personalizado a un tema, pero lo que quiero hacer es ejecutar mi propio código de JavaScript al hacer clic en el botón “Nuevo tema”. Creo que mi problema se relaciona básicamente con el controlador de Discourse que debo usar, el nombre de la función que se ejecuta y cómo sobrescribir esa función. ¿Podrías aclararme esto?

Gracias.

Bueno, maldita sea. Lo siento. Pensé que tenía algún código de JavaScript (por ejemplo, en discourse-topic-custom-fields/assets/javascripts/discourse) que podría ser útil para ver cómo conectar esas cosas. Todavía no soy muy bueno con lo del frontend, así que temo que esa fue mi mejor respuesta gratuita. :man_shrugging:

Gracias por tu ayuda, @pfaffman. Finalmente encontré el controlador y la acción que necesitaba modificar, y el plugin vuelve a funcionar en Discourse 2.6.x.

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

function myFunction() {
    CÓDIGO AQUÍ
}
...
NavigationDefaultController.reopen({
  actions: {
    clickCreateTopicButton: myFunction,
  },
});

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

Nota: Este es el código del plugin dentro de tuPlugin/assets/javascripts/discourse/initializers

Una vez que hago clic en el botón “Nuevo tema”, se ejecuta mi código JavaScript y los usuarios obtienen el menú que construí para el foro.

3 Me gusta

¡Genial! Me alegra mucho que lo hayas conseguido. Aunque todavía me resulta un misterio dónde van las cosas y cómo se deben llamar, estoy mejorando.