2012-10-01 120 views
13

我在中間人一起組建一個簡單的投資組合網站。我基於本地YAML數據動態生成「工作」頁面。這是config.rb:使用MIddleman 3.0 - 如何在動態頁面上設置個別頁面標題?

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

對於SEO的目的,我想這些動態生成的頁面中的每一個都有獨特的網頁標題和描述。

標題在佈局文件當前設置這樣

%title 
    = current_page.data.title 

,我知道我可以使用frontmatter設置CURRENT_PAGE變量這樣

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

而且我能堅持到這一點我project_template .haml,但有什麼辦法讓這樣的東西工作?

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

回答

21

您可以使用content_for來代替在frontmatter中設置標題。

E.g.佈局:

%title= yield_content(:title)

而在動態頁面的模板:

- content_for(:title, @project.title)

+0

謝謝! content_for的方法工作,只是在佈局它的yield_content(:標題) –

+0

謝謝,更新了使用'yield_content'的答案 – ghempton

2

我找到了另一種方式來解決這個限制。而不是去爲頁的數據,從元數據獲取frontmatter數據:

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

這不是因爲漂亮和短通過current_page.data獲取數據,但我只設法改變的元數據:

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

我不知道爲什麼,但如果我記得正確的,我不得不還設置了元數據資源上後準備:

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

我仍然認爲/希望,必須有一個更好的溶膠ution。我們無法爲代理頁面設置frontmatter數據,這有點奇怪。

6

這是最簡單的模塊化解決方案。

在你的佈局,扔在:

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

@title是紅寶石實例變量將提供給當前頁面。

在當前網頁,扔在(不要忘了破折號):

- @title = 'Your Page Title' 

那你應該是好去!