Haml Inherit Templates - PullRequest
       7

Haml Inherit Templates

5 голосов
/ 03 июня 2010

Я использую Haml (Haml / Sass 3.0.9 - Classy 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

<html>
  <head>
    <title>My Content</title>
  </head>
  <body>
    <div class="Content">
      <p>This is my content</p>
    </div>
  </body>
</html>

Но это не представляется возможным. Я видел использование рендеринга партиалов при использовании Haml с Rails, но не могу найти никакого решения при использовании Haml в автономном режиме.

Наличие кода макета во всех моих шаблонах было бы кошмаром обслуживания; поэтому мой вопрос: как мне избежать этого? Есть ли стандартный способ решения этой проблемы? Я что-то упустил фундаментальное?

Я нашел похожий вопрос: Рендеринг HAML-частей из HAMLoutside of Rails

Ответы [ 3 ]

4 голосов
/ 03 июня 2010

Я создал прототип, который делает то, что мне нужно. Мне просто нужно создать это как модуль и позволить ему принимать шаблон макета и шаблон контента в качестве аргументов (вместе с набором данных).

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>
2 голосов
/ 03 июня 2010

Haml построен с предположением, что он будет использоваться вместе с некоторой платформой Ruby, которая обеспечивает такие вещи, как частичные разметки и макеты. Если вы хотите простой способ визуализации статического кода Haml с макетами и частями, посмотрите StaticMatic .

1 голос
/ 28 июля 2011

StaticMatic был заброшен его создателем, который теперь использует http://middlemanapp.com/

...