<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