Zielsetzung
- Ersetzen der ursprünglichen Discourse-Vorlage unter
discourse/app/views/topics/show.rss.erb. - Platzieren einer benutzerdefinierten Vorlage im Plugin-Verzeichnis:
discourse-XXX/app/views/topics/show.rss.erb. - Ziel: RSS-Seiten sollen die Plugin-Vorlage anstelle der ursprünglichen Vorlage laden.
Versuchte Ansätze und Ergebnisse
Ansatz 1: Direkte Platzierung der benutzerdefinierten Vorlage im Plugin-Verzeichnis
- Aktion: Die benutzerdefinierte
show.rss.erbindiscourse-XXX/app/views/legen. - Ergebnis: Die ursprüngliche Vorlage wird weiterhin verwendet; die RSS-Seite lädt die Plugin-Vorlage nicht.
Ansatz 2: after_initialize mit prepend_view_path
after_initialize do
class ::TopicsController
prepend_view_path File.expand_path("../app/views", __dir__)
end
end
- Ergebnis: Die Plugin-Vorlage wird ignoriert; die RSS-Seite verwendet weiterhin die ursprüngliche Vorlage.
Ansatz 3: after_initialize mit prepend_view_path, der auf das Plugin-Verzeichnis zeigt
after_initialize do
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX-plugin-name/app/views")
end
end
- Ergebnis: Die Plugin-Vorlage wird immer noch nicht verwendet; die RSS-Seite rendert weiterhin die ursprüngliche Vorlage.
Ansatz 4: Überschreiben der feed-Methode und explizites Rendern der Plugin-Vorlage
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX/app/views")
alias_method :original_feed, :feed
def feed
raise Discourse::NotFound if !Post.exists?(topic_id: params[:topic_id])
begin
@topic_view = TopicView.new(params[:topic_id])
rescue Discourse::NotLoggedIn
raise Discourse::NotFound
rescue Discourse::InvalidAccess => ex
deleted =
guardian.can_see_topic?(ex.obj, false) ||
(!guardian.can_see_topic?(ex.obj) && ex.obj.access_topic_via_group && ex.obj.deleted_at)
raise Discourse::NotFound.new(
nil,
check_permalinks: deleted,
original_path: ex.obj.relative_url,
)
end
@first_post = @topic_view.posts.first
discourse_expires_in 1.minute
response.headers["X-Robots-Tag"] = "noindex, nofollow"
render file: Rails.root.join("plugins/discourse-XXX/app/views/topics/show.rss.erb"), formats: [:rss]
end
end
- Ergebnis: Die Plugin-Vorlage scheint aufgerufen zu werden, aber der Aufruf einer
.rss-Seite eines Themas führt zu einem “oops”-Fehler.
Ich hoffe, dieser Bericht fasst die Versuche und die aufgetretenen Probleme klar zusammen. Ich würde mich sehr über Einblicke, Vorschläge oder Lösungen von der Community freuen, um die show.rss.erb-Vorlage erfolgreich zu ersetzen. Vielen Dank im Voraus für Ihre Hilfe!