플러그인에서 .erb 템플릿 작업하기

최근 Discourse에서 .erb 템플릿을 다루는 방법에 대한 조언을 해 주면서, 메타(meta)에 이 주제에 대한 자세한 정보가 거의 없다는 것을 알게 되었습니다. 그래서 이 주제에 위키를 시작해 보았습니다. 이 위키는 .erb 템플릿이 무엇인지, 그리고 Discourse 및 더 넓은 범위인 Rails에서 그 역할이 무엇인지 이미 알고 있다고 가정합니다. 배경에 대한 더 자세한 정보가 필요하시다면 먼저 아래 글을 읽어 보시기 바랍니다.

서버 플러그인 아웃렛

서버 플러그인 아웃렛은 클라이언트 플러그인 아웃렛과 유사한 방식으로 작동하지만, 그 수가 매우 적습니다. 이를 사용하면 discourse/discourse의 .erb 템플릿에 사용자 정의 .erb 템플릿을 삽입할 수 있습니다. 정의 방식은 다음과 같습니다:

<%= server_plugin_outlet [name] %>

예시로, 채팅 플러그인에서 unsubscribe_options 아웃렛의 사용법을 확인해 보세요:

HTML 빌더

HTML 빌더는 템플릿과 플러그인 아웃렛을 사용하지 않고 동적으로 생성되는 표준 HTML을 위해 설계되었습니다. .erb 템플릿에서 HTML 빌더를 사용하려면 다음 삽입 지점을 찾으세요:

<%= build_plugin_html [name] %>

plugin.rb의 register_html_builder 블록에 HTML을 반환하여 이러한 지점에 HTML을 삽입할 수 있습니다. 예를 들어 다음과 같습니다:

register_html_builder([name]) do |controller|
   ## 사용자 정의 HTML을 생성하고 반환합니다
end

예시로, solved 플러그인에서 server:before-head-close-crawler의 사용법을 확인해 보세요:

실제로 클라이언트 측 HTML을 추가하기 위해 html 빌더를 등록할 수도 있지만, 이는 권장되지 않습니다. 클라이언트 측 HTML은 클라이언트 측 플러그인 아웃렛과 템플릿을 사용하여 추가하세요.

비슷한 맥락으로, 유사한 목적으로 사용될 수 있는 서버 측 플러그인 API 메서드인 register_custom_html도 있습니다. 하지만 특별한 이유가 있고, 자신이 무엇을 하고 있는지 정확히 알고 있지 않는 한 사용하지 않는 것이 좋습니다.

템플릿 오버라이딩

플러그인의 뷰를 컨트롤러의 view_paths에 추가하여 플러그인에서 .erb 템플릿을 오버라이드할 수 있습니다. 이는 Rails의 기본 기능이며 Discourse에 고유한 것이 아닙니다. 이 작동 방식은 Rails 가이드의 다음 링크에서 다루고 있습니다:

예를 들어, app/views/email/unsubscribed.html.erb를 오버라이드하려면 두 가지 작업을 수행해야 합니다:

플러그인 뷰를 동일한 네임스페이스로 구성하기

템플릿은 다음 위치에 있어야 합니다:

your-plugin-folder/app/views/email/unsubscribed.html.erb

관련 컨트롤러에 플러그인 뷰 경로를 앞에 추가하기

이 경우 관련 컨트롤러는 EmailController입니다. plugin.rb 파일에 다음을 추가하세요:

EmailController.prepend_view_path File.expand_path("../views", __FILE__)

플러그인 뷰를 전역 뷰 경로에 추가할 수도 있지만, 대부분의 경우 그럴 필요는 없습니다.

8개의 좋아요