Я использую Haml (Haml/Sass 3.0.9 - Классный Cassidy) автономный для генерации статического HTML. Я хочу создать общий шаблон расположения, который наследовали все мои другие шаблоны.
Layout.haml
%html
%head
%title Test Template
%body
.Content
Content.haml
SOMEHOW INHERIT Layout.haml
SOMEHOW Change the title of the page "My Content".
%p This is my content
Произвести:
Content.html
My Content
This is my content
Но это не кажется возможным. Я видел использование рендеринга partials при использовании Haml с направляющими, но не могу найти решение при использовании автономного Haml.
Необходимость поместить код расположения во все мои шаблоны была бы кошмаром обслуживания; таким образом, мой вопрос состоит в том, как я стараюсь не делать это? Существует ли стандартный способ решить эту проблему? Я пропустил что-то фундаментальное?
Я нашел подобный вопрос: Рендеринг HAML partials из HAMLoutside направляющих
Я создал прототип, который делает то, что мне нужно. Мне просто нужно создать это как модуль и позволить ему принимать шаблон макета и шаблон содержимого в качестве аргументов (вместе с набором данных).
require "haml"
layoutTemplate = File.read('layout.haml')
layoutEngine = Haml::Engine.new(layoutTemplate)
layoutScope = Object.new
output = layoutEngine.render(scope=layoutScope) { |x|
case x
when :title
scope.instance_variable_get("@haml_buffer").buffer << "My Title\n"
when :content
contentTemplate = File.read('page.haml')
contentEngine = Haml::Engine.new(contentTemplate)
contentOutput = contentEngine.render
scope.instance_variable_get("@haml_buffer").buffer << contentOutput
end
}
puts output
layout.haml
%html
%head
%title
- yield :title
%body
.content
- yield :content
page.haml
%h1 Testing
%p This is my test page.
Вывод
<html>
<head>
<title>
My Title
</title>
</head>
<body>
<div class='content'>
<h1>Testing</h1>
<p>This is my test page.</p>
</div>
</body>
</html>
Haml построен с предположением, что он будет использоваться вместе с некоторым Ruby framework, который предоставляет такие вещи, как партиалы и макеты. Если вам нужен простой способ визуализации статического кода Haml с макетами и частичными данными, ознакомьтесь с StaticMatic .