목표
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/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 템플릿을 성공적으로 대체하기 위해 커뮤니티의 통찰, 제안 또는 해결책을 진심으로 부탁드립니다. 미리 도움을 주셔서 감사합니다!