目標
discourse/app/views/topics/show.rss.erbの元の Discourse テンプレートを置き換える。- カスタム テンプレートをプラグイン ディレクトリ
discourse-XXX/app/views/topics/show.rss.erbに配置する。 - 目標: RSS ページが元のテンプレートではなくプラグイン テンプレートを読み込むようにする。
試行したアプローチと結果
アプローチ 1: カスタム テンプレートをプラグイン ディレクトリに直接配置する
- アクション: カスタム
show.rss.erbをdiscourse-XXX/app/views/に配置する。 - 結果: 元のテンプレートが引き続き使用され、RSS ページはプラグイン テンプレートを読み込みません。
アプローチ 2: after_initialize と prepend_view_path を使用する
after_initialize do
class ::TopicsController
prepend_view_path File.expand_path("../app/views", __dir__)
end
end
- 結果: プラグイン テンプレートは無視され、RSS ページは引き続き元のテンプレートを使用します。
アプローチ 3: プラグイン ディレクトリを指す after_initialize と prepend_view_path を使用する
after_initialize do
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX-plugin-name/app/views")
end
end
- 結果: プラグイン テンプレートは依然として使用されず、RSS ページは引き続き元のテンプレートをレンダリングします。
アプローチ 4: feed メソッドをオーバーライドし、プラグイン テンプレートを明示的にレンダリングする
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
- 結果: プラグイン テンプレートが呼び出されているように見えますが、トピックの
.rssページにアクセスするとoopsエラーが発生します。
このレポートが試行されたことと発生した問題を明確に要約していることを願っています。show.rss.erb テンプレートを正常に置き換えるための洞察、提案、または解決策があれば、コミュニティからいただけると大変助かります。ご協力に感謝いたします!