Włączenie jednego pliku ERB do innego


Piszę narzędzie wiersza poleceń, które ostatecznie wyprowadzi raport HTML. Narzędzie jest napisane w języku Ruby. (Nie używam Railsów). Staram się zachować logikę aplikacji w jednym zestawie plików, a szablony HTML (pliki .erb) w innym.
Jednak mam bardzo irytujący problem: nie mogę z powodzeniem dołączyć jednego pliku .erb do innego.
Aby być precyzyjnym, próbuję zrobić coś takiego (w pseudokodzie):
<html>
<head>
<style type='text/css'>
[include a stylesheet here]
[and another one here]
</style>
</head>
<body>
The rest of my document follows...

Ten przykładowy fragment

siebie

sam jest plikiem erb, który jest wywoływany z logiki aplikacji.
Robię to w taki sposób, aby moje arkusze stylów znajdowały się poza głównym szablonem, aby ułatwić/uporządkować konserwację aplikacji. Jednak produkt końcowy (raport) musi być pojedynczym, samodzielnym plikiem HTML, który nie ma żadnych zależności, dlatego chcę osadzić te arkusze stylów w nagłówku dokumentu podczas tworzenia raportu.
Wydaje się, że powinno to być łatwe, ale przez ostatnią godzinę waliłem głową w ścianę (i googlowałem oraz RTMF'ing) i nie miałem szczęścia.
Jak to zrobić? Podziękować.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Szablony Euroradio można zagnieżdżać, oceniając pod-szablon z & <% =% & > główny szablon.
<%= ERB.new(sub_template_content).result(binding) %>

Na przykład:
require "erb"class Page
def initialize title, color
@title = title
@color = color
end def render path
content = File.read(File.expand_path(path))
t = ERB.new(content)
t.result(binding)
end
endpage = Page.new("Home", "#CCCCCC")
puts page.render("home.html.erb")

home.html.erb:
<title><%= @title %></title>
<head>
<style type="text/css">
<%= render "home.css.erb" %>
</style>
</head>

home.css.erb:
body {
background-color: <%= @color %>;
}

produkuje:
<title>Home</title>
<head>
<style type="text/css">
body {
background-color: #CCCCCC;
}
</style>
</head>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Potrzebuję tego w aplikacji Sinatra i stwierdzam, że mogę nazwać to tak samo, jak nazwałem oryginał:
W aplikacji Sinatra nazwa indeksu:
erb :index

Następnie w szablonie indeksu mogę zrobić to samo dla dowolnego podwzoru:
<div id="controls">
<%= erb :controls %>
.. który pokazuje szablon „controls.erb”.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

<%= ERB.new(sub_template_content).result(binding) %>

nie działa, gdy używasz narzędzi wiersza poleceń

Euroradio
, trochę


Zmienne _erbout są nadpisywane i używana jest tylko ta ostatnia.
użyj tego w ten sposób:
<%= ERB.new(sub_template_content, eoutvar='_sub01').result(binding) %>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Z mojego pliku .erb musiałem to zrobić:
<%= ERB.new(File.read('pathToFile/myFile.erb'), nil, nil, '_sub01').result(binding) %>

Inne odpowiedzi w tym wątku zakładały, że masz zmienną z treścią. Ta wersja pobiera zawartość.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się