Objetivo
- Substituir o template original do Discourse em
discourse/app/views/topics/show.rss.erb. - Colocar um template personalizado no diretório do plugin:
discourse-XXX/app/views/topics/show.rss.erb. - Meta: Fazer com que as páginas RSS carreguem o template do plugin em vez do template original.
Abordagens Tentadas e Resultados
Abordagem 1: Colocar diretamente o template personalizado no diretório do plugin
- Ação: Colocar o
show.rss.erbpersonalizado emdiscourse-XXX/app/views/. - Resultado: O template original ainda é usado; a página RSS não carrega o template do plugin.
Abordagem 2: after_initialize com prepend_view_path
after_initialize do
class ::TopicsController
prepend_view_path File.expand_path("../app/views", __dir__)
end
end
- Resultado: O template do plugin é ignorado; a página RSS continua a usar o template original.
Abordagem 3: after_initialize com prepend_view_path apontando para o diretório do plugin
after_initialize do
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX-plugin-name/app/views")
end
end
- Resultado: O template do plugin ainda não é usado; a página RSS continua a renderizar o template original.
Abordagem 4: Substituir o método feed e renderizar explicitamente o template do 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
- Resultado: O template do plugin parece ser chamado, mas visitar a página
.rssde um tópico resulta em um errooops.
Espero que este relatório resuma claramente as tentativas e os problemas encontrados. Agradeceria muito quaisquer insights, sugestões ou soluções da comunidade para substituir com sucesso o template show.rss.erb. Obrigado antecipadamente pela sua ajuda!