<body>
各 Web アプリケーション ページのタグ内に、任意の HTML コード (またはできれば別の Markaby テンプレート) を挿入したいと考えています。
テンプレートが(多かれ少なかれ)Rubyクラスでbody
あり、そのメソッドであることを意味するMarkabyを使用しています。そのため、Ruby コードを記述してbody
メソッド呼び出しをインターセプトし、HTML を挿入できるようにする必要があります。
シナトラでそれを行うにはどうすればよいですか?
body
これは、MarkabyBuilder
クラスのメソッドを再定義することで実行できます。このコードはそれを行います:
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
body
そして、これには、タグ内の最初のものとして別の Markaby テンプレートが含まれます。
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
<%= yield %>
レイアウトでの使用を妨げているものは何 ですか? たとえば、以下のコードは、レイアウトの<body>
タグ内で現在のビューをレンダリングします。<%= yield %>
この場合、テンプレートはlayout.erb
で、ページはhello.erb
です。ステートメントの代わりにhello.erb
レンダリングされます。これはあなたが意味したものですか?layout.erb
<%= yield %>
require 'sinatra'
get '/hello/:name' do
@name = params[:name]
erb :hello
end
__END__
@@ layout
<html>
<body>
<%= yield %>
</body>
</html>
@@ hello
<h3>Hello <%= @name %>!</h3>
About.comのコード- Sinatra