¿Cómo se puede reproducir una plantilla dentro de un diseño utilizando el lenguaje de plantillas líquido?

StackOverflow https://stackoverflow.com/questions/1283083

  •  16-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de hacer una plantilla de líquido dentro de un diseño líquido (Liquid Plantilla lang, no CSS líquido materia de diseño). Me parece que no puede obtener la parte de la presentación de render. Actualmente el uso de:

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

El HTML resultante de la página muestra que la 'plantilla' generado en finas de líquido, pero no se envuelve con la disposición (reemplazando 'content_for_layout' en el diseño con la plantilla mostrada)

¿Fue útil?

Solución

Sólo para que nadie más sepa que se encuentra con este problema, el código publicado anteriormente en realidad no trabajo, el problema está en la variable llamada @Template. Retitulé @Template y @layout a @_tempalte y @_layout y todo funciona como se esperaba.

Otros consejos

Para usar el líquido en Ruby on Rails (especialmente los carriles 3) - Creo que la forma correcta de hacer las plantillas de líquidos (y también mantener todos los carriles de trabajo está haciendo por usted) es el siguiente ...

La propia joya líquida proporciona una liquid_view para los carriles para que pueda cablear los rieles para buscar plantillas "líquidos" cuando se llama #render. Este liquid_view sólo funciona plenamente con los carriles de 2.3 pero puede ser fácilmente actualizado para trabajar con los carriles 3 al hacer la siguiente actualización

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)

Esto se puede ver aquí -> https://github.com/danshultz/liquid/ cometer / e27b5fcd174f4b3916a73b9866e44ac0a012b182

A continuación, para rendir adecuadamente su punto de vista líquida justo llamar

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

En nuestra aplicación, ya que tenemos un puñado de atributos líquidos comunes que hemos anulado el método "render" en nuestro controlador base para incluir automáticamente los locales por defecto al hacer referencia #liquid_view_assigns la que se enrollan las gotas de líquido añadido, además, para hacer que la llamada

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top