Как вставить мой HTML / шаблон внутри каждого тега <body>? - PullRequest
0 голосов
/ 24 марта 2012

Я хотел бы вставить фрагмент произвольного HTML-кода (или, предпочтительно, другого шаблона Markaby) внутри тега <body> на каждой странице моего веб-приложения.

Я использую Markaby, что означает, что шаблонявляется (более или менее) классом Ruby, а body является его методом.Таким образом, должна быть возможность написать некоторый код Ruby для перехвата вызова метода body и вставить мой HTML.

Как мне это сделать с Sinatra?

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Это можно сделать, переопределив метод body в классе Markaby 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
0 голосов
/ 24 марта 2012

Что мешает вам использовать <%= 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 - Синатра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...