Objetivo
- Reemplazar la plantilla original de Discourse en
discourse/app/views/topics/show.rss.erb. - Colocar una plantilla personalizada en el directorio del plugin:
discourse-XXX/app/views/topics/show.rss.erb. - Objetivo: Que las páginas RSS carguen la plantilla del plugin en lugar de la plantilla original.
Enfoques Intentados y Resultados
Enfoque 1: Colocar directamente la plantilla personalizada en el directorio del plugin
- Acción: Poner
show.rss.erbpersonalizado endiscourse-XXX/app/views/topics/. - Resultado: Todavía se utiliza la plantilla original; la página RSS no carga la plantilla del plugin.
Enfoque 2: after_initialize con prepend_view_path
after_initialize do
class ::TopicsController
prepend_view_path File.expand_path("../app/views", __dir__)
end
end
- Resultado: La plantilla del plugin es ignorada; la página RSS continúa utilizando la plantilla original.
Enfoque 3: after_initialize con prepend_view_path apuntando al directorio del plugin
after_initialize do
class ::TopicsController
prepend_view_path Rails.root.join("plugins/discourse-XXX-plugin-name/app/views")
end
end
- Resultado: La plantilla del plugin todavía no se utiliza; la página RSS continúa renderizando la plantilla original.
Enfoque 4: Sobrescribir el método feed y renderizar explícitamente la plantilla 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
- Resultado: La plantilla del plugin parece ser llamada, pero al visitar la página
.rssde un tema se produce un erroroops.
Espero que este informe resuma claramente los intentos y los problemas encontrados. Agradecería enormemente cualquier información, sugerencia o solución de la comunidad para reemplazar con éxito la plantilla show.rss.erb. ¡Gracias de antemano por su ayuda!