Obiettivo
- Sostituire il template Discourse originale in
discourse/app/views/topics/show.rss.erb. - Posizionare un template personalizzato nella directory del plugin:
discourse-XXX/app/views/topics/show.rss.erb. - Obiettivo: Far sì che le pagine RSS carichino il template del plugin invece del template originale.
Approcci Tentati e Risultati
Approccio 1: Posizionamento diretto del template personalizzato nella directory del plugin
- Azione: Inserire il
show.rss.erbpersonalizzato indiscourse-XXX/app/views/topics/. - Risultato: Viene ancora utilizzato il template originale; la pagina RSS non carica il template del plugin.
Approccio 2: after_initialize con prepend_view_path
after_initialize do
class ::TopicsController
prepend_view_path File.expand_path("../app/views", __dir__)
end
end
- Risultato: Il template del plugin viene ignorato; la pagina RSS continua a utilizzare il template originale.
Approccio 3: after_initialize con prepend_view_path che punta alla directory del plugin
after_initialize do
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX-plugin-name/app/views")
end
end
- Risultato: Il template del plugin non viene ancora utilizzato; la pagina RSS continua a renderizzare il template originale.
Approccio 4: Sovrascrittura del metodo feed e rendering esplicito del template del plugin
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
- Risultato: Il template del plugin sembra essere chiamato, ma la visita alla pagina
.rssdi un topic risulta in un erroreoops.
Spero che questo report riassuma chiaramente i tentativi e i problemi riscontrati. Apprezzerei molto qualsiasi intuizione, suggerimento o soluzione dalla community per sostituire con successo il template show.rss.erb. Grazie in anticipo per il vostro aiuto!