2009-08-15 29 views
8

Tôi đang cố gắng hiển thị mẫu chất lỏng trong bố cục lỏng (Dạng lỏng mẫu lang, không phải bố cục CSS lỏng). Tôi không thể có vẻ để có được một phần bố trí để render. Hiện đang sử dụng:Làm cách nào bạn có thể hiển thị mẫu trong bố cục bằng ngôn ngữ mẫu của 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 

Kết quả là HTML của trang hiển thị rằng 'mẫu' rendered in tốt lỏng, nhưng nó không được bọc với cách bố trí (thay thế 'content_for_layout' trong cách bố trí với các mẫu render)

Trả lời

7

Chỉ để cho bất kỳ ai khác biết ai gặp phải vấn đề này, mã được đăng ở trên thực sự không hoạt động, vấn đề là với biến có tên @template. Tôi đổi tên @template và @layout thành @_tempalte và @_layout và mọi thứ hoạt động như mong đợi.

+0

Có, nhưng có một số xâm nhập tra cứu mẫu và các quà tặng khác mà bạn thừa hưởng từ đường ray mà bạn bỏ qua bằng mã bên trên. Trong khi nó hoạt động, nó không chính xác "rails-ish" trong phong cách hoặc chức năng. – Dan

2

Để sử dụng chất lỏng trong Ruby on Rails (đặc biệt là đường ray 3) - Tôi tin rằng cách thích hợp để làm mẫu chất lỏng của bạn (và cũng có thể duy trì tất cả các đường ray công việc đang làm cho bạn) như sau ...

Đá quý lỏng tự cung cấp một liquid_view cho đường ray để bạn có thể dây lên đường ray để tìm các mẫu "lỏng" khi bạn gọi #render. liquid_view này chỉ hoạt động đầy đủ với đường ray 2.3 nhưng có thể dễ dàng được cập nhật để làm việc với đường ray 3 bằng cách làm cho bản cập nhật sau

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) 

này có thể được nhìn thấy ở đây ->https://github.com/danshultz/liquid/commit/e27b5fcd174f4b3916a73b9866e44ac0a012b182

Sau đó hiển thị chính xác chất lỏng của bạn xem chỉ cần gọi

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

trong ứng dụng của chúng tôi, vì chúng tôi có một số ít các thuộc tính phân lỏng thông thường, chúng tôi đã overriden các "render" phương pháp trong điều khiển cơ sở của chúng tôi để tự động bao gồm người dân địa phương mặc định bằng cách r eferencing #liquid_view_assigns cuộn lên các giọt chất lỏng bổ sung được thêm vào để hiển thị cuộc gọi

def render(...) 
    options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns) 
    super 
end 
Các vấn đề liên quan