Изменить поведение по умолчанию кнопки «New Topic»

Всем привет,

Я пытаюсь изменить поведение по умолчанию кнопки «Создать тему» в Discourse 2.6.1. У меня есть плагин, который модифицирует стандартные действия Ember для запуска моей функции. Это работало корректно в предыдущей версии Discourse (1.8.0), но я не могу понять, как добиться того же результата в новой версии. Код выглядит следующим образом:

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

function myFunction() {
    КОД ЗДЕСЬ
}
...
NavigationDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

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

Первый контроллер определяет действия для основного сайта (что не работает в новой версии), а второй — действия, которые выполняются при поиске в приложении (и это работает в новой версии).

Я заметил, что кнопки «Создать тему» создаются с использованием действий «createTopic» и «clickCreateTopicButton», но ни одно из них не работает на основном сайте. Нужно ли мне изменить другое действие или использовать другой контроллер?

Спасибо

Кто-нибудь может помочь?

Мне вас жаль.

Как добавить пользовательское поле к теме — моя лучшая идея. Это довольно далеко от вашей проблемы, но документация по этому вопросу отличная.

Привет, @pfaffman,

Спасибо за предложение. Однако, если я не ошибаюсь, этот плагин позволяет добавлять новое пользовательское поле к теме, а я хочу запускать свой собственный JavaScript-код при нажатии на кнопку «Новая тема». Мне кажется, моя проблема связана с тем, какой контроллер Discourse использовать, как называется функция, которая выполняется, и как переопределить эту функцию. Не могли бы вы прояснить этот момент?

Спасибо.

Ну, черт. Извините. Я думал, что там есть какой-то JavaScript-код (например, в discourse-topic-custom-fields/assets/javascripts/discourse), который мог бы помочь понять, как это подключить. Я всё ещё не очень силен в фронтенде, так что боюсь, это был мой лучший ответ без помощи. :man_shrugging:

Спасибо за вашу помощь, @pfaffman. Я наконец-то нашёл контроллер и действие, которые нужно было изменить, и плагин снова работает в Discourse 2.6.x

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

function myFunction() {
    КОД ЗДЕСЬ
}
...
NavigationDefaultController.reopen({
  actions: {
    clickCreateTopicButton: myFunction,
  },
});

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

Примечание: это код плагина внутри yourPlugin/assets/javascripts/discourse/initializers

Как только я нажимаю кнопку «Создать тему», выполняется мой JavaScript-код, и пользователи видят меню, которое я создал для форума.

Отлично! Очень рад, что у вас получилось! Хотя куда именно всё размещать и как это называть, для меня всё ещё остаётся загадкой, но я постепенно разбираюсь.