如何在每个标签内插入我的HTML /模板?

时间:2012-03-23 20:26:59

标签: ruby sinatra markaby

我想在每个webapp页面的<body>标记内插入一段任意HTML代码(或者最好是另一个Markaby模板)。

我正在使用Markaby,这意味着模板(或多或少)是一个Ruby类,body是它的方法。所以必须编写一些Ruby代码来拦截body方法调用并插入我的HTML。

我如何使用Sinatra做到这一点?

2 个答案:

答案 0 :(得分:0)

什么阻止您在布局中使用<%= yield %>?例如,下面的代码将使用<body>

在布局的<%= yield %>标记内呈现您当前的视图

在这种情况下,模板为layout.erb,页面为hello.erbhello.erblayout.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> 语句。这是你的意思吗?

{{1}}

来自About.com - Sinatra的代码

答案 1 :(得分:0)

可以通过重新定义Markaby body类中的Builder方法来完成。这段代码将会这样做:

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