/ / Używanie MIddleman 3.0 - Jak ustawić poszczególne tytuły stron na dynamicznych stronach? - rubin, pośrednik

Korzystanie z MIddleman 3.0 - Jak ustawić poszczególne tytuły stron na dynamicznych stronach? - rubin, pośrednik

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 1

Zamiast 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.