2012-03-23 4 views
0

Ich möchte einen Teil beliebigen HTML-Codes (oder vorzugsweise eines anderen Markaby-Templates) innerhalb des Tags <body> auf jeder meiner Webapp-Seiten einfügen.Wie füge ich meine HTML/Vorlage in jedes <body> Tag ein?

Ich benutze Markaby, was bedeutet, dass eine Vorlage (mehr oder weniger) eine Ruby-Klasse ist und body ist ihre Methode. Daher muss es möglich sein, Ruby-Code zu schreiben, um den Methodenaufruf body abzufangen und meinen HTML-Code einzufügen.

Wie mache ich das mit Sinatra?

Antwort

0

Was verhindert die Verwendung von <%= yield %> in Ihrem Layout? Zum Beispiel wird der Code unter der aktuellen Ansicht innerhalb der <body> Tags Layout machen von <%= yield %>

In diesem Fall mit der Vorlage layout.erb und die Seite ist hello.erb. hello.erb wird innerhalb von layout.erb anstelle der <%= yield %>-Anweisung gerendert. Hast du das gemeint?

require 'sinatra' 

get '/hello/:name' do 
    @name = params[:name] 
    erb :hello 
end 

__END__ 
@@ layout 
<html> 
    <body> 
    <%= yield %> 
    </body> 
</html> 

@@ hello 
<h3>Hello <%= @name %>!</h3> 

-Code von About.com - Sinatra

+0

Dank für Vorschlag, aber was ich wirklich brauchen, ist so etwas wie Ich habe in einer anderen Antwort gepostet –

0

, die durch die Neudefinition der body Methode in Markaby Builder Klasse durchgeführt werden kann. Dieses Stück Code wird es tun:

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 

Und dieser wird eine weitere Markaby Vorlage als das erste, was im Inneren des body Tag enthalten:

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 
Verwandte Themen