2012-10-01 7 views
13

Stawiam prostą stronę portfolio w pośredniku. Generuję strony "pracy" dynamicznie w oparciu o lokalne dane YAML. Jest w config.rb:Korzystanie z MIddleman 3.0 - Jak ustawić poszczególne tytuły stron na dynamicznych stronach?

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

Dla celów SEO, chciałbym każdą z tych stron generowanych dynamicznie mieć unikalny tytuł i opis.

tytuł jest aktualnie ustawiony w pliku układ jak ten

%title 
    = current_page.data.title 

i wiem, że mogę używać frontmatter ustawić zmienne CURRENT_PAGE jak ten

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

I mogę trzymać to pod moim project_template .haml, ale czy istnieje jakiś sposób, aby coś takiego zadziałało?

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

Odpowiedz

21

Zamiast ustawiać tytuł w frontmatter (jak robisz), możesz użyć content_for.

E.g. w układzie:

%title= yield_content(:title)

I w szablonie dynamicznej strony:

- content_for(:title, @project.title)

+0

dzięki! content_for approach działa, tylko w układzie jest yield_content (: title) –

+0

dzięki, zaktualizował odpowiedź, aby użyć 'yield_content' – ghempton

2

znalazłem inny sposób na obejście tego ograniczenia. Zamiast iść do danych stron, uzyskać dane frontmatter z metadanych:

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

To nie jest tak ładne i krótkie jak uzyskaniu danych przez current_page.data, ale udało mi się tylko zmienić metadane:

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

nie jestem pewien dlaczego, ale jeśli dobrze pamiętam poprawny musiałem również ustawić zasób metadanych potem na gotowe:

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

wciąż myślę/mam nadzieję, że nie musi być lepszy sol ution. To zupełnie dziwne, że nie możemy ustawić danych frontmattera na stronach proxy.

6

Oto najprostsze, modularne rozwiązanie.

w układzie, rzucać w:

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

@title jest rubin instancji zmienną, która będzie dostępna dla bieżącej strony.

W bieżącej strony, rzucać się (nie zapomnij myślnika):

- @title = 'Your Page Title' 

Wtedy powinno być dobrze iść!

Powiązane problemy