Wie können Sie eine Vorlage in einem Layout mit Flüssigkeit Template-Sprache machen?

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

  •  16-09-2019
  •  | 
  •  

Frage

Ich versuche, eine Flüssigkeit Vorlage innerhalb einer Flüssigkeit Layouts (Liquid Vorlage lang, nicht CSS Flüssigkeit Layout Sachen) zu machen. Ich kann nicht scheinen, das Layout Teil zu bekommen zu machen. Derzeit verwenden:

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

Der resultierende HTML-Code der Seite zeigt, dass die ‚Vorlage‘ in Flüssigkeit fein gemacht, aber es ist nicht mit dem Layout (als Ersatz für ‚content_for_layout‘ im Layout mit der gerenderten Vorlage)

gewickelt
War es hilfreich?

Lösung

Nur, damit jeder andere wissen, wer über dieses Problem kommt, erzielte der obigen Code tatsächlich funktioniert, ist das Problem mit der Variable mit dem Namen @Template. I umbenannt @Template und @layout @_tempalte und @_layout und alles funktioniert wie erwartet.

Andere Tipps

Für Flüssigkeit in Ruby on Rails mit (vor allem Schienen 3) - ich die richtige Art und Weise glauben, dass Ihre Flüssigkeit Vorlagen zu machen (und auch alle Arbeitsschienen zu halten für Sie tun) ist wie folgt ...

Das flüssige Juwel selbst bietet eine liquid_view für Schienen, so dass Sie die Schienen verdrahten für „flüssig“ Vorlagen suchen, wenn Sie #render nennen. Diese liquid_view funktioniert nur voll mit Schienen 2.3 kann aber leicht aktualisiert werden, mit Schienen zu arbeiten 3 durch das folgende Update zu machen

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)

Das hier zu sehen -> https://github.com/danshultz/liquid/ commit / e27b5fcd174f4b3916a73b9866e44ac0a012b182

Dann richtig zu machen Ihre Flüssigkeit Ansicht rufen Sie einfach

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

In unserer Anwendung, da wir eine Handvoll von gemeinsamen Flüssigkeits Attribute haben wir außer Kraft gesetzt, das Verfahren in unserem Basis-Controller „machen“, um die Standard Einheimischen automatisch schließen durch #liquid_view_assigns Referenzierung, die zusätzlich hinzugefügt Flüssigkeitstropfen für den Render Anruf aufrollen

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top