Einfaches Beispiel für ein Plugin zum Ändern von Dateien?

Ich versuche, meine ersten sehr einfachen Plugins für Discourse zu schreiben, nachdem ich viel über Ruby und die Vorteile, die die Sprache uns bietet, gelesen habe :)\n\nIch möchte Text auf bestimmten Seiten wie Badges, Leaderboard (Gamification) und ähnlichen einfachen Bearbeitungen hinzufügen, wie z. B. das Ändern des Standardverhaltens bei Suchergebnissen, die letzten Beiträge anstelle der Relevanz.\n\nIch verstehe, dass der beste Ansatz darin besteht, das Kernsystem nicht zu forken und stattdessen Plugins zu schreiben. Wo kann ich also nachsehen, wenn ich bestimmte Dateien in Discourse aus einem Plugin ändern möchte?\n\nWir können als Beispiel die Bearbeitung dieser Datei nehmen:\n\ndiscourse/app/models/topic_embed.rb at 5584fb1e3b7a29d7ee5d7e43520191081dd10a16 · discourse/discourse · GitHub sage ich Discourse, dass es das Plugin topic_embed.rb verwenden und das Standard-Plugin ersetzen soll?*

2 „Gefällt mir“

Dies ist eine Technik, die als „Monkey Patching“ bekannt ist. Es gibt mehrere Möglichkeiten, dies zu erreichen, aber am einfachsten ist es, einfach die Methode, die Sie ersetzen möchten, in Ihrem Plugin zu definieren.

after_initialize do
  class ::TopicEmbed
    def self.imported_from_html(url)
       # Ihr Code
    end
  end
end
2 „Gefällt mir“

Nun, wir sollen von Affen abstammen, also könnte das nach allem, was Sie tun, eine gute Sache sein :slight_smile:

Danke für Ihre Antwort! Ich probiere es aus, aber was kann ich tun, wenn ich die gesamte embed.rb-Datei ändern möchte?

Ich sehe, dass dies nur verwendet werden kann, um eine bestimmte Klasse zu ersetzen, aber ich möchte das Embed vollständig ersetzen, die Schaltflächen entfernen und eine einfache Onebox anzeigen.

Ich kann an der Datei arbeiten, aber ich weiß nicht, wie ich diese Datei in Discourse einfügen kann, ohne zu forken (das scheint Gorilla Patching zu sein).

1 „Gefällt mir“

Hier gibt es so viel vorhandenes Material. Schauen Sie sich nur die Dutzenden von vorhandenen Plugins an.

Hier ist ein Beispiel für das Überschreiben des Onebox-Systems:

Beachten Sie, dass Patches sehr gezielt und clever sein können (dieses Plugin ist es nicht besonders! Aber das liegt teilweise an der Struktur dieses Kerncodes, die Überschreibungen zwangsläufig wortreich macht) und die Kunst darin besteht, so wenig wie möglich zu tun, um den gewünschten Effekt zu erzielen: Wenn Sie das Überschreiben ganzer Dateien vorschlagen, sollten Sie Ihren Gesamtansatz noch einmal überdenken.

Und nochmals, wie Richard sagte, überschreibt man fast nie (zumindest in Ruby on Rails) ganze Dateien. Sie müssen über Methoden nachdenken.

3 „Gefällt mir“