Использование MIddleman 3.0 - Как настроить отдельные заголовки страниц на динамических страницах?
Я собираю простой портфолио в посреднике. Я генерирую "рабочие" страницы динамически на основе локальных данных YAML. Это находится в файле config.rb:
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
---
Ответы
Ответ 1
Вместо того, чтобы устанавливать заголовок в фронте (например, вы делаете), вы можете использовать content_for.
например. в макете:
%title= yield_content(:title)
И в шаблоне динамической страницы:
- content_for(:title, @project.title)
Ответ 2
Здесь простейшее, модульное решение.
В вашем макете введите:
%title= 'Your Site Title | ' + @title
@title - это переменная экземпляра ruby, которая будет доступна для текущей страницы.
На текущей странице введите (не забывайте тире):
- @title = 'Your Page Title'
Тогда вам должно быть хорошо идти!
Ответ 3
Я нашел другой способ обойти это ограничение. Вместо того, чтобы идти за данными страницы, получите данные о фронте из метаданных:
%title = current_page.metadata[:page]['title']
Это не так хорошо и коротко, как получение данных через current_page.data, но мне удалось изменить метаданные:
proxy newpath, oldpath, :page => { 'title' => newtitle }
Я не уверен, почему, но если я правильно помню, мне пришлось также установить ресурс метаданных после этого:
resource.add_metadata :page => { 'title' => newtitle }
Я все еще думаю/надеюсь, что должно быть лучшее решение. Это совершенно странно, что мы не можем установить данные фронтматера для прокси-страниц.