Variabili di Middleman Visibilità in config.rb e pagine
Domanda
Mi manca qualcosa sulla visibilità delle variabili. Nella mia config.rb sto usando una struttura dati per generare pagine dinamiche:
@pages = [
{
id: "cookies",
title: "Happy Chocolate Chip Cookies",
quote: "These cute cookies are full of sweet chocolate and ready to give you energy!",
content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
},
....]
@pages.each do |p|
page "/creations/#{p[:id]}.html", :proxy => "item-template.html", :ignore => true do
@tile = p
end
end
La generazione delle pagine va bene, nessun problema con questo. Ma..
Come posso accedere a questa struttura di dati anche al fine di fornire collegamenti dinamici alle pagine generate? Vorrei poter creare una pagina dell'indice (chiamiamo It Creations.html) con il seguente codice:
<ul>
<% @pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
Soluzione
Non è necessario creare un aiutante personalizzato, è possibile utilizzare un file di dati YAML per popolare il modello e generare l'elenco dei collegamenti. Lasciatemi spiegare.
Allo stesso livello delle directory di origine e build assicurati di creare una directory di dati. cioè:
- costruire
- fonte
- dati
All'interno di questo crea un file chiamato "Pages.yml" (ad esempio).
Questo file deve essere formattato specificamente, quindi fai attenzione (o usa un parser Yaml Per assicurarti di non avere errori, come una virgola mancante o un preventivo sfuggito).
Utilizzando i dati nel file config.rb, un esempio sarebbe qualcosa di simile:
- id: "cookies"
title: "Happy Chocolate Chip Cookies"
quote: "These cute cookies are full of sweet chocolate and ready to give you energy!"
content: "Orecchini a monachella. Realizzati in fimo, dipinti a mano e rivestiti con vernice lucida."
- id: "bacon"
title: "Smoked bacon bits"
quote: "everything tastes better with bacon!"
content: "blah"
eccetera...
Ora, nel tuo file config.rb sostituire @pagine.each do | p | insieme a data.pages.each do | p |
Data.Pages.Ey Loops tramite ogni elemento nel file YAML di recente creazione
Puoi quindi semplicemente fare riferimento allo stesso file nel tuo file indice (creations.html) come: così:
<ul>
<% data.pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
Ho avuto un problema simile sulle pagine dinamiche a cui puoi fare riferimento qui
Spero che sia di aiuto. Buona fortuna!
Altri suggerimenti
Forse aggiungi un aiutante che restituisce il @pages
Struttura dei dati nel tuo file creations.erb
. Cioè nel tuo config.rb
File Aggiungi:
helpers do
def dynamic_pages()
@pages
end
end
e poi nel tuo creations.erb
avere:
<ul>
<% dynamic_pages.each do |tile| %>
<li><a href="creations/<%= tile[:id]%>.html">
<%= tile[:title] %>
</a></li>
<% end %>
</ul>
E, se vuoi fare riferimento a pagine dinamiche nelle tue pagine dinamiche (!), Un aiutante potrebbe generare quell'HTML e potresti chiamare il ... nah, non importa!