2012-10-01 14 views
13

Sto mettendo insieme un sito di portfolio semplice in middleman. Sto generando le pagine 'lavoro' in modo dinamico in base ai dati YAML locali. Questo è nel config.rb:Utilizzo di MIddleman 3.0 - Come si impostano i singoli titoli di pagina nelle pagine dinamiche?

data.work.projects.each do |project| 
    page "/work/#{project[0]}.html", :proxy => "project_template.html" do 
    @project = project 
    end 
end 

per scopi SEO, vorrei ognuna di queste pagine generate dinamicamente per avere un titolo di pagina unica e descrizione.

Il titolo è attualmente impostato nel file di layout come questo

%title 
    = current_page.data.title 

e so che posso usare frontmatter per impostare le variabili CURRENT_PAGE come questo

--- 
title: "Recent Work - " 
--- 

E posso attaccare che nel mio project_template .haml, ma c'è un modo per far funzionare qualcosa del genere?

--- 
title: "Recent Work - " + @project.title 
--- 

risposta

21

Invece di impostare il documento nella frontmatter (come si sta facendo), è possibile utilizzare content_for.

E.g. nel layout:

%title= yield_content(:title)

E nel template della pagina dinamica:

- content_for(:title, @project.title)

+0

grazie! l'approccio content_for funziona, proprio nel layout è yield_content (: title) –

+0

grazie, aggiornato la risposta per usare 'yield_content' – ghempton

2

ho trovato un altro modo per aggirare questa limitazione. Invece di andare per i dati della pagina, ottenere i dati frontmatter dai metadati:

%title = current_page.metadata[:page]['title'] 

Non è così bello e breve come ottenere i dati attraverso current_page.data, ma ho solo riuscito a modificare i metadati:

proxy newpath, oldpath, :page => { 'title' => newtitle } 

non so perché, ma se non ricordo corrette ho dovuto impostare anche la risorsa metadati dopo il pronto:

resource.add_metadata :page => { 'title' => newtitle } 

Continuo a pensare/speranza che ci deve essere un sol meglio ution. È abbastanza strano che non possiamo impostare i dati di frontmaster per le pagine proxy.

6

Ecco la soluzione più semplice e modulare.

nel layout, gettare:

%title= 'Your Site Title | ' + @title 

@title è una variabile di istanza rubino che sarà disponibile alla pagina corrente.

Nella pagina corrente, gettare in (non dimenticate il trattino):

- @title = 'Your Page Title' 

allora si dovrebbe essere pronti per partire!

Problemi correlati