Przygotowuję prostą stronę portfolio w pośredniku, generuję strony "pracy" dynamicznie w oparciu o lokalne dane YAML. To jest w pliku config.rb:
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, aby każda z tych dynamicznie generowanych stron miała niepowtarzalny tytuł i opis strony.
Tytuł jest obecnie ustawiony w pliku układu w ten sposób
%title
= current_page.data.title
i wiem, że mogę użyć frontmattera do ustawienia zmiennych current_page w ten sposób
---
title: "Recent Work - "
---
I mogę umieścić to w moim project_template.haml, ale czy jest jakiś sposób, aby coś takiego działało?
---
title: "Recent Work - " + @project.title
---
Odpowiedzi:
22 dla odpowiedzi nr 1Zamiast ustawiać tytuł w frontmatter (jak robisz), możesz użyć content_for.
Na przykład. w układzie:
%title= yield_content(:title)
I w szablonie dynamicznej strony:
- content_for(:title, @project.title)
7 dla odpowiedzi nr 2
Oto najprostsze, modułowe rozwiązanie.
W swoim layoucie rzuć:
%title= "Your Site Title | " + @title
@title to zmienna instancji ruby, która będzie dostępna dla bieżącej strony.
Na twojej obecnej stronie wrzuć (nie zapomnij kreski):
- @title = "Your Page Title"
Wtedy powinieneś być dobry, aby iść!
3 dla odpowiedzi nr 3
Znalazłem inny sposób obejścia tego ograniczenia. Zamiast szukać danych strony, pobierz dane z metadanych:
%title = current_page.metadata[:page]["title"]
To nie jest tak miłe i krótkie, jak pobieranie 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, musiałem również ustawić zasób metadanych w pogotowiu:
resource.add_metadata :page => { "title" => newtitle }
Nadal myślę / mam nadzieję, że musi istnieć lepsze rozwiązanie. To zupełnie dziwne, że nie możemy ustawić danych frontmattera dla stron proxy.