Как вставить мой HTML/ шаблон в каждый тег <body>?
Я хотел бы вставить часть произвольного HTML-кода (или, предпочтительно, другой шаблон Markaby) внутри <body>
тег на каждой из моих страниц веб-приложения.
Я использую Markaby, что означает, что шаблон является (более или менее) классом Ruby и body
это его метод. Таким образом, должна быть возможность написать некоторый код Ruby для перехвата body
вызов метода и вставка моего HTML.
Как мне это сделать с Синатрой?
2 ответа
Это может быть сделано путем переопределения 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
Что мешает вам использовать <%= 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 - Синатра