jotamartos
(Juan Jose Martos)
2021 年 3 月 25 日午後 12:31
1
こんにちは、皆さん。
Discourse 2.6.1 において、「新しいトピック」ボタンのデフォルト動作を変更しようとしています。カスタムプラグインを作成し、デフォルトの Ember アクションを変更して独自の関数を呼び出すようにしています。以前のバージョン(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,
},
});
最初のコントローラーはメインサイトのアクションを定義していますが、新しいバージョンでは機能しません。2 番目のコントローラーはアプリ内で検索を実行する際のアクションを定義しており、こちらは新しいバージョンでも機能します。
「新しいトピック」ボタンは「createTopic」および「clickCreateTopicButton」アクションを使用して作成されているようですが、メインサイトではどちらも機能しません。別のアクションを変更する必要がありますか、それとも異なるコントローラーを使用する必要がありますか?
よろしくお願いいたします。
「いいね!」 1
pfaffman
(Jay Pfaffman)
2021 年 3 月 28 日午後 9:21
3
お気持ちお察しします。
トピックにカスタムフィールドを追加する方法 が私の最善の案です。あなたの問題とはやや異なりますが、詳細なドキュメントが用意されています。
「いいね!」 1
jotamartos
(Juan Jose Martos)
2021 年 3 月 29 日午後 3:59
4
@pfaffman さん、こんにちは。
ご提案ありがとうございます。ただし、私の認識が間違っていなければ、そのプラグインはトピックに新しいカスタムフィールドを追加する機能を提供するものの、私が目指しているのは「New Topic」ボタンをクリックした際に独自の JavaScript コードを実行することです。私の課題は、基本的にどの Discourse コントローラーを使用するか、どの関数が実行されるか、そしてその関数をどのように上書きするかという点に関連していると思います。この点についてご教示いただけますでしょうか。
よろしくお願いいたします。
pfaffman
(Jay Pfaffman)
2021 年 3 月 29 日午後 4:23
5
まあ、残念ですね。すみません。そこに何らかのJavaScriptコード(例:discourse-topic-custom-fields/assets/javascripts/discourse 内など)が含まれていて、その仕組みを結びつける方法がわかるかもしれないと考えていました。まだフロントエンドの分野にはあまり慣れていないので、これが私にできる最善の回答になってしまいました。
jotamartos
(Juan Jose Martos)
2021 年 3 月 31 日午前 6:53
6
@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 コードが実行され、ユーザーにはフォーラム用に作成したメニューが表示されます。
「いいね!」 3
pfaffman
(Jay Pfaffman)
2021 年 3 月 31 日午後 12:13
7
よかったです!手に入ったんですね!ただ、どこに何を配置し、何と名付けるかは、まだ私にも謎ですが、少しずつ上手くなってきました。