2012-03-23 52 views
0

我想在每個webapp頁面的<body>標記內插入一段任意的HTML代碼(或最好是另一個Markaby模板)。如何在每個<body>標記內插入我的HTML /模板?

我正在使用Markaby,這意味着模板是(或多或少)一個Ruby類,而body是它的方法。因此,必須編寫一些Ruby代碼來截獲body方法調用並插入我的HTML。

我如何用Sinatra做到這一點?

回答

0

什麼阻止您在佈局中使用<%= yield %>?例如,下面的代碼將在模板layout.erb和頁面是hello.erb使用<%= yield %>

在這種情況下呈現佈局的<body>標籤內當前視圖。 hello.erb被呈現在layout.erb內,而不是<%= yield %>聲明。這是你的意思嗎?從About.com - Sinatra

+0

感謝的建議,但我真正需要的是一樣的東西我張貼在另一個答案 – 2012-03-24 19:59:43

0

require 'sinatra' 

get '/hello/:name' do 
    @name = params[:name] 
    erb :hello 
end 

__END__ 
@@ layout 
<html> 
    <body> 
    <%= yield %> 
    </body> 
</html> 

@@ hello 
<h3>Hello <%= @name %>!</h3> 

代碼,可以通過重新定義Markaby的肩頭Builder類的body方法來完成。這段代碼將做到這一點:

class Markaby::Builder 
    alias body_orig body 
    def body(*args, &block) 
    str = capture(&block) 
    block = proc { text('ON EVERY PAGE' + str) } 
    body_orig(*args, &block) 
    end 
end 

而這其中將包括另一Markaby的肩頭模板作爲body標籤內的第一件事:

class Markaby::Builder 
    alias body_orig body 
    def body(*args, &block) 
    str = capture(&block) 
    str2 = render :mab, :include_template_name, *args 
    block = proc { text(str2 + str) } 
    body_orig(*args, &block) 
    end 
end 
相關問題