プラグインまたはテーマコンポーネントシステムを介して、ヘルパー内の関数を変更することは可能でしょうか?

クラスを再オープンして関数を上書きする方法はありますか?

上書きしたいのは、こちらの javascripts/discourse/helpers/category-link.js.es6 の 15 行目にある function categoryStripe(color, classes) {} です。

そうだと思います。Developing Discourse Themes & Theme Components をご覧になりましたか?

「いいね!」 4

ご質問の目的を達成する方法はいくつかあります。categoryStripe を上書きする目的は何でしょうか?

「いいね!」 3

以下のように変更したいと考えています。

function categoryStripe(color, classes) {
  var style = color ? "style='background-color: #" + color + ";'" : "";
  return "<span class='" + classes + "' " + style + "><\/span>";
}

以下のように変更します。

function categoryStripe(color, classes) {
  var style = color ? "style='border: 1px solid #" + color + ";'" : "";
  return "<span class='" + "my-class" + classes + "' " + style + "><\/span>";
}

つまり、背景色を境界線に変更し、クラスを追加したいのです。

これを達成するための最善の方法は何か、Justin さん?


それはお読みしましたが、記憶ではテンプレート(とウィジェット)の上書き機能のみを扱っており、ヘルパーについては言及されていなかったと思います。いかがでしょうか?

「いいね!」 1

[quote=“AstonJ, 投稿:4, トピック:140964”]
それは読みましたが、記憶が正しければ、それはテンプレート(およびウィジェット)を上書きする機能のみを対象としており、ヘルパーについては言及されていないと思います。[/quote]

あなたの最初の投稿からは、その点は一切明確ではありませんでした。今では、私も興味深く見ている役立つ回答が得られると思います!

「いいね!」 1

JavaScript でクラスを追加するか、スタイルシートで !important を使用してインラインスタイルを上書きすることを検討しましたか?この方法を上書きすることもできますが、いずれ機能しなくなる可能性があります。JS で DOM に追加するのが、おそらく最も安定した方法です。

先日私が試行錯誤していたのは、まさにそれでした。すべてのトピックの投稿にカスタムクラスを追加したいと考えていましたが、トピックの最初の投稿(OP)は除きます。そのカスタムクラスは、ユーザーグループやトピックの作成日時に基づいてオン/オフ切り替えできるようにしたかったのですが、まずは投稿にカスタムクラスを追加する方法を把握できれば、その後の設定も考えられると判断しました。探していた例はすぐには見つかりませんでしたが、その例にたどり着く前に、いくつか他のことに気を取られていたのかもしれません。

それはうまくいかないと思います。なぜなら、色はカテゴリ設定から取得する必要があるからです。つまり、カテゴリごとにボーダーの色が異なります。(この点を反映させるため、上記の投稿を更新しました。)

ただし、JS(DOMへの追加)を通じて取得できる場合はどうでしょうか?(もし可能であれば、例を提示していただけますか?)

具体的な部分を確認して、JavaScript の選択だけで可能かどうかをチェックする必要があります(残念ながら今すぐ時間がありません)。

ただし、クラス追加の例はここにあります:discourse-knowledge-base-theme/javascripts/discourse/components/knowledge-base.js.es6 at 4694d4a8ad788f8884e3341c852d3f77b2c1d103 · discourse/discourse-knowledge-base-theme · GitHub

JavaScript でインラインスタイルを変更することもできます:Setting CSS Styles using JavaScript | KIRUPA

「いいね!」 4

ありがとう、ジャスティン。見ておきますね。

あるいは、テンプレートやコンポーネント、ウィジェットなどと同じように、ヘルパーも上書きできる方法はありませんか?(https://github.com/discourse/discourse/blob/b25d9e96c1414bf78b44221da4d385675843991e/app/assets/javascripts/discourse/helpers/category-link.js.es6)

必要なら、そのファイルの将来の変更を常にチェックすることに問題はありませんよ :smiley:

テーマの javascripts/discourse/helpers/category-link.js.es6 にファイルを作成し、その関数の修正版を追加してみてください。あの辺りまで手を加えるのは久しぶりなので、これでうまくいくかは保証できません!:smiley:

「いいね!」 5

はい、それで問題ないはずです。

「いいね!」 3

ありがとうございます!

最後の質問(たぶん!)ですが、そこでファイルを作成するにはどうすればよいですか?:relaxed:

簡単なプラグインの場合は、フォルダを作成してコピー&ペーストするだけです!

「いいね!」 1

ああ!!ありがとう、ロバート!

ちょっと外に出ないといけないけど、戻り次第試してみます:ok_hand:

「いいね!」 1

デモ:

プラグインのフォルダ構造:

image

こっそり編集された部分を見つけよう :male_detective:

image

「いいね!」 5

ロバート、ありがとう!

でも、動作しないんです :sob:

私がやったことはこれです:

rails g plugin CategoryAlternative

そして、これを入力しました:

作成する必要があった helpers フォルダに:

その後:

rm -rf tmp
rails s

AdminCP には表示されているのですが、実際のページには反映されません(プラグイン版ではないファイルを同じ編集内容で編集すると、変更は反映されますが)。

何か見落としていますか?他に設定が必要なものはありますか?

「いいね!」 1

JavaScriptのコンソールエラーは表示されていますか?

ファイル全体をすべて含めましたか?

なお、プラグインジェネレーターは使用せず、すべて手動で作成しました。

「いいね!」 1

書き当时は含めていませんでした(Justin はその関数だけを含めるつもりだと思っていたため)。しかし、ファイル全体を含めると動作するようになりましたが、ファイルを直接編集した場合とは同じではありませんでした。

例えば、latest ページでは動作しましたが、all categories のドロップダウンでは動作しませんでした。これはファイルを直接編集した場合には動作していました!

そのため、最終的には少し messy な CSS で必要な変更を加えることになりました :joy: いくつかの妥協も必要でした。できないよりはましですが、理想を言えば、カテゴリのスタイルを変更するだけでもテンプレートを編集するくらいシンプルにできればよかったのにと思います :sweat:

「いいね!」 2

私も同じことをやりたいです。
テーマコンポーネントで上書きしようとしているファイルのパスは以下の通りです:
custom_loader\javascripts\discourse\helpers\loading-spinner.js
しかし、JS ファイルが読み込まれていません。何が足りないのでしょうか?

「いいね!」 1