2009-08-15 6 views
8

Próbuję wyrenderować szablon płynny w układzie płynnym (szablon Płynny szablon, a nie układ płynnego układu CSS). Nie mogę sprawić, by część układu była renderowana. Obecnie przy użyciu:Jak można renderować szablon w układzie za pomocą języka szablonów płynnych?

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 

Powstały HTML strony pokazuje, że „szablon” wydanego w ciekłym w porządku, ale to nie jest owinięty z układem (zastępując „content_for_layout” w układzie z wytopione szablonie)

Odpowiedz

7

Aby powiadomić kogokolwiek innego, kto napotyka ten problem, powyższy kod faktycznie działa, problem dotyczy zmiennej o nazwie @template. Zmieniłem nazwę na @template i @layout na @_tempalte i @_layout i wszystko działa zgodnie z oczekiwaniami.

+0

Tak, ale istnieją pewne porwanie wyszukiwań szablon i innych smakołyków można dziedziczyć z szyn, które rezygnują z powyższym kodzie. Chociaż działa, nie jest to dokładnie "szyny" w stylu lub funkcjonalności. – Dan

2

Dla użyciu cieczy w Ruby on Rails (zwłaszcza szyn 3) - Wierzę właściwy sposób, aby uczynić swoje płynnych szablony (a także zachować wszystkie szyny pracy robi dla ciebie) jest następujący ...

Płynny klejnot sam w sobie zapewnia widok cieczy dla szyn, więc możesz połączyć szyny, aby wyszukać "płynne" szablony, gdy zadzwonisz #. Ten liquid_view działa tylko w pełni z szyn 2,3 ale może być łatwo zaktualizowane do pracy z szyn 3 poprzez następującą aktualizację

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) 

ten można zobaczyć tutaj ->https://github.com/danshultz/liquid/commit/e27b5fcd174f4b3916a73b9866e44ac0a012b182

Następnie poprawnie renderować cieczy widok po prostu zadzwoń

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

w naszej aplikacji, ponieważ mamy kilka wspólnych cech cieczy mamy nadpisane na „render” metody w naszym sterownika bazowego automatycznie zawierają domyślne mieszkańców przez R eferencing #liquid_view_assigns który zakasać dodatkowo dodaje ciekłe krople na wezwanie renderowania

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