Цель
- Заменить оригинальный шаблон Discourse в
discourse/app/views/topics/show.rss.erb. - Разместить пользовательский шаблон в директории плагина:
discourse-XXX/app/views/topics/show.rss.erb. - Цель: заставить RSS-страницы загружать шаблон плагина вместо оригинального шаблона.
Попытки и результаты
Подход 1: Прямое размещение пользовательского шаблона в директории плагина
- Действие: Поместить пользовательский
show.rss.erbвdiscourse-XXX/app/views/topics/. - Результат: Используется оригинальный шаблон; 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. Заранее спасибо за помощь!