“새 주제” 버튼의 기본 동작 수정

여러분 안녕하세요,

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() {
    CODE HERE
}
...
NavigationDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

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

첫 번째 컨트롤러는 메인 사이트의 액션을 정의합니다(새 버전에서는 작동하지 않음), 두 번째 컨트롤러는 앱에서 검색을 실행할 때 실행될 액션을 정의합니다(새 버전에서도 작동함).

“새 주제” 버튼이 "createTopic"과 “clickCreateTopicButton” 액션을 사용하여 생성된다는 것을 확인했지만, 메인 사이트에서는 둘 다 작동하지 않습니다. 다른 액션을 수정해야 하는지, 아니면 다른 컨트롤러를 사용해야 하는지 궁금합니다.

감사합니다

도와주실 분 계신가요?

그 마음 잘 이해합니다.

주제에 사용자 지정 필드 추가하는 방법이 제가 생각한 최선의 방법입니다. 질문하신 내용과는 다소 거리가 있지만, 문서화가 잘 되어 있습니다.

@pfaffman 님,

제안해 주셔서 감사합니다. 하지만 제가 잘못 알고 있는 게 아니라면, 해당 플러그인은 주제에 새로운 사용자 지정 필드를 추가할 수는 있지만, 제가 원하는 것은 “새 주제” 버튼을 클릭할 때 제 자체 자바스크립트 코드를 실행하는 것입니다. 제 문제는 기본적으로 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() {
    CODE HERE
}
...
NavigationDefaultController.reopen({
  actions: {
    clickCreateTopicButton: myFunction,
  },
});

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

참고: 이 코드는 yourPlugin/assets/javascripts/discourse/initializers 내에 있는 플러그인 코드입니다.

“새 주제” 버튼을 클릭하면 제 자바스크립트 코드가 실행되고, 사용자가 포럼을 위해 만든 메뉴를 볼 수 있습니다.

좋아요! 드디어 해결하셨군요! 파일들을 어디에 두어야 하고 어떤 이름으로 붙여야 하는지는 여전히 저에게 미스터리이지만, 점점 나아지고 있어요.