2009-08-15 22 views
8

Sıvı bir düzen içinde sıvı bir şablon oluşturmaya çalışıyorum (Sıvı Şablon lang, CSS sıvı mizanpajı değil). Düzen kısmının işlenmesini sağlayamıyorum. Şu anda kullanarak:Sıvı şablon dili kullanarak bir düzen içinde şablonu nasıl oluşturabilirim?

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 

sayfanın sonuçlanan HTML 'şablon' sıvı ince işlenen, ancak düzen ile sarılmış değil

(render şablonu ile düzeninde 'content_for_layout' yerine) olduğunu göstermektedir

cevap

7

Bu soruna kimlerin geldiğini başkalarının bilmesi için, yukarıda yayınlanan kod aslında işe yarar, sorun @template isimli değişkenle ilgilidir. @template'i yeniden adlandırdım ve @Tempalte'ye ve @ _layout'a ve her şey beklendiği gibi çalışıyor. raylar (özellikle 3 raylar) hakkında yakut sıvıyı kullanmak için

+0

Evet için sıvı damlaları eklenir, ancak şablon aramalarının ve size yukarıdaki kodu ile vazgeçmek raylar devralan diğer güzellikler bazı kaçırma vardır. Çalışırken, stil veya işlevsellikte tam olarak "raylar-ish" değildir. – Dan

2

- aşağıdaki gibidir senin sıvı şablonları işlemek (ve ayrıca sizin için yapıyor tüm çalışma rayları korumak) için İnanıyorum uygun şekilde ...

Likit gemin kendisi raylar için bir liquid_view sağlar, böylece #render çağırdığınızda "sıvı" şablonları aramak için rayları bağlayabilirsiniz. Bu liquid_view sadece raylar 2.3 ile tam çalışır ama kolayca Bu burada görülebilir

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) 

aşağıdaki güncelleştirme yaparak raylar 3 çalışmak için güncellenebilir - O>https://github.com/danshultz/liquid/commit/e27b5fcd174f4b3916a73b9866e44ac0a012b182

düzgün sıvıyı işlemek için görünüm sadece otomatik r varsayılan halk dahil etmek, ortak sıvı özelliklerin bir avuç beri bizim üs kontrol cihazındaki "işlemek" yöntemi overriden var, bizim uygulamasında

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

çağrı sıvayıp eferencing #liquid_view_assigns ilaveten işlemek çağrı

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