2009-08-15 6 views
8

액체 레이아웃 (액체 레이아웃 템플릿이 아닌 Liquid Template lang) 내에서 액체 템플릿을 렌더링하려고합니다. 레이아웃 부분을 렌더링 할 수없는 것 같습니다. 현재 사용 :Liquid 템플릿 언어를 사용하여 레이아웃에서 템플릿을 어떻게 렌더링 할 수 있습니까?

assigns = {'page_name' => 'test'} 
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read) 
@template = Liquid::Template.parse(File.new(self.template.path).read) 

@rend_temp = @template.render(assigns) 
@rend_layout = @layout.render({'content_for_layout' => @rend_temp}) 

render :text => @rend_layout, :content_type => :html 

페이지 생성 된 HTML은 '템플릿'액체 미세 렌더링하지만,이 레이아웃 래핑되지는

(렌더링 템플릿 레이아웃에 'content_for_layout'를 대체하는) 것을 나타낸다

답변

7

누가이 문제를 겪고 있는지 알 수 있도록하기 위해 위에 게시 된 코드가 실제로 작동하지만 문제는 @template라는 변수에 있습니다. @template, @layout을 @_tempalte로 바꿨고 @_layout과 모든 것이 예상대로 작동합니다. 레일 (특히 3 레일)에 루비에 액체를 사용하기 위해

+0

예에 대한 액체 방울을 추가했지만 템플릿 조회하고 위의 코드와 함께 지내다 레일에서 상속 다른 케이크의 일부 하이재킹이있다. 작동하는 동안 스타일이나 기능면에서 "레일스 틱"은 아닙니다. – Dan

2

- 다음과 같이 당신의 액체 템플릿을 렌더링 (또한 당신을 위해하고있는 모든 일 레일을 유지)하는 내가 믿는 적절한 방법을 ...

액상 보석 자체는 레일에 대한 liquid_view를 제공하므로 #render를 호출 할 때 레일을 연결하여 "액체"템플릿을 찾을 수 있습니다. 이 liquid_view은 레일 2.3 을 완벽하게 작동하지만 쉽게이 여기에서 볼 수 있습니다

if content_for_layout = @view.instance_variable_get("@content_for_layout") 
    assigns['content_for_layout'] = content_for_layout 
elsif @view.content_for?(:layout) 
    assigns["content_for_layout"] = @view.content_for(:layout) 
end 
assigns.merge!(local_assigns.stringify_keys) 

다음 업데이트하여 레일 3와 함께 작동하도록 업데이트 할 수 있습니다 - 그리고>https://github.com/danshultz/liquid/commit/e27b5fcd174f4b3916a73b9866e44ac0a012b182

제대로 액체를 렌더링에게 보기 만 자동으로 연구하여 기본 현지인을 포함하는 우리는 일반적인 액체 속성의 소수를 가지고 있기 때문에 우리는 우리의 기본 컨트롤러에서 "렌더링"방법을 오버라이드 (override) 한 우리의 응용 프로그램에서

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop } 

전화 롤업 eferencing #liquid_view_assigns 추가로 렌더링 호출

def render(...) 
    options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns) 
    super 
end