2010-06-02 9 views
5

Statik HTML oluşturmak için tek başına Haml (Haml/Sass 3.0.9 - Classy Cassidy) kullanıyorum. Diğer tüm şablonların devraldığı paylaşılan bir düzen şablonu oluşturmak istiyorum.Haml Inherit Şablonları

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 

üretmek için:

Content.html

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

Ancak bu mümkün görünmemektedir. Haml'ı Rails ile kullanırken kısmi işlenmeyi kullandım ancak Haml'ı tek başına kullanırken herhangi bir çözüm bulamıyorum.

Tüm şablonlarımdaki düzen kodunu yerleştirmek bir bakım kabusu olurdu; Bu yüzden sorum şu: Bunu yapmayı nasıl engellerim? Bu sorunu çözmek için standart bir yol var mı? Temel bir şeyi özledim mi? Rendering HAML partials from within HAMLoutside of Rails

cevap

4

İhtiyacım olanı yapan bir prototip oluşturdum. Bunu bir modül olarak oluşturmam ve düzeni şablonu ve içerik şablonunu argüman olarak (veri kümesi ile birlikte) kabul etmesine izin vermem gerekiyor.

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. 

Çıkış

<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

Haml o partials ve düzenleri gibi şeyler sağlayan bazı Yakut çerçevesinde birlikte kullanılır olacağım varsayımıyla oluşturulmuştur:

Ben benzer bir soru bulundu. Statik Haml kodunu düzen ve kısmi olarak işlemek için basit bir yöntem istiyorsanız, StaticMatic'a bakın.

+0

+1 Teşekkürler, StaticMatic'e bakıyordum. Düzen şablonları için tam olarak ne istediğimi sağlar, ancak diğer alanlarda sorunları gündeme getirir. – kjfletch