2012-10-01 8 views
13

Ich stelle eine einfache Portfolio-Website in Vermittler. Ich erzeuge die 'Arbeits' Seiten dynamisch basierend auf lokalen YAML Daten. Dies ist in dem config.rb:Verwenden von Middleman 3.0 - Wie lege ich einzelne Seitentitel auf dynamischen Seiten fest?

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

für SEO Zwecke, ich jede dieser dynamisch generierten Seiten mochte einen einzigartigen Seitentitel und Beschreibung haben.

Der Titel wird zur Zeit in der Layout-Datei wie diese

%title 
    = current_page.data.title 

gesetzt und ich weiß, dass ich frontmatter verwenden können current_page Variablen wie diese

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

Und ich kann das einstechen meine project_template einstellen .haml, aber gibt es irgendeinen Weg, etwas wie das zu arbeiten?

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

Antwort

21

Statt den Titel in der frontmatter der Einstellung (wie Sie tun), könnten Sie content_for verwenden.

z. im Layout:

%title= yield_content(:title)

Und in der Vorlage der dynamischen Seite:

- content_for(:title, @project.title)

+0

danke! Die Methode content_for funktioniert, nur im Layout ist es yield_content (: title) –

+0

danke, aktualisiert die Antwort zu verwenden 'yield_content' – ghempton

2

Ich habe eine andere Art und Weise zu arbeiten, um diese Einschränkung zu finden. Statt für die Seitendaten gehen, bekommen Sie die Daten aus dem frontmatter Metadaten:

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

Es ist nicht so schön und so kurz wie die Daten durch current_page.data bekommen, aber ich habe es geschafft, nur die Metadaten zu ändern:

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

ich bin mir nicht sicher, warum, aber wenn ich richtig erinnere ich musste auch die Metadaten Ressource anschließend auf bereit gesetzt:

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

ich denke immer noch/hoffen, dass es ein besserer Sol sein . Es ist irgendwie komisch, dass wir keine Frontmatter-Daten für Proxy-Seiten setzen können.

6

Hier ist die einfachste, modulare Lösung.

In Ihrem Layout, werfen in:

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

@title ist ein Rubin-Instanz-Variable, die auf die aktuelle Seite zur Verfügung stehen wird.

In Ihrer aktuellen Seite, werfen in (nicht den Strich vergessen):

- @title = 'Your Page Title' 

Dann sollten Sie gut zu gehen!

Verwandte Themen