ファイルを変更するプラグインの簡単な例は?

Discourse の非常に基本的な最初のプラグインを作成しようとしています。Ruby とその言語が提供する利点についてたくさん読んだ後です :slight_smile:

バッジ、リーダーボード(ゲーミフィケーション)などの特定のページにテキストを追加したり、検索結果の順序をデフォルトの関連性ではなく最終投稿に変更したりするような簡単な編集を行いたいと考えています。

コアをフォークするのではなく、プラグインを作成することが最善のアプローチであると理解しています。では、プラグインから Discourse の特定のファイルを変更したい場合、どこを見ればよいでしょうか?

このファイルを編集する例を挙げることができます。

Discourse にプラグイン topic_embed.rb を使用し、デフォルトのものを置き換えるように指示するにはどうすればよいですか?

「いいね!」 2

これは「モンキーパッチ」として知られるテクニックです。これを達成する方法はいくつかありますが、最も簡単なのは、プラグインで置き換えたいメソッドを定義することです。

after_initialize do
  class ::TopicEmbed
    def self.imported_from_html(url)
       # あなたのコード
    end
  end
end
「いいね!」 2

まあ、私たちはサルから進化したとされるので、あなたの例に従って良いことかもしれませんね :slight_smile:

返信ありがとうございます!試していますが、embed.rb ファイル全体を変更したい場合はどうすればよいですか?

特定のクラスを置き換えるために使用できることはわかっていますが、ボタンを削除して単純なワンボックスを表示するように、埋め込みを完全に置き換えたいのです。

ファイルを操作することはできますが、フォーク(これはゴリラパッチのようです)せずにそのファイルを Discourse に配置する方法がわかりません。

「いいね!」 1

既存の資料が非常にたくさんあります。既存のプラグインが何十個もあるのを見てください。

onebox システムをオーバーライドする例を次に示します。

パッチ適用は非常に的を絞った巧妙なものにできること(このプラグインはそれほどではありませんが!しかし、それはコアコードの構造の一部であり、オーバーライドを必然的に冗長にしています)に注意してください。その技術は、望ましい効果を得るために可能な限り最小限のことを行うことです。ファイル全体をオーバーライドすることを提案している場合は、全体的なアプローチを再考する必要があるかもしれません。

そして、リチャードが言ったように、Ruby on Rails ではファイル全体をオーバーライドすることはほとんどありません。メソッドについて考える必要があります。

「いいね!」 3