13

我正在中间人中建立一个简单的投资组合网站。我正在根据本地 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
---
4

3 回答 3

24

您可以使用 content_for,而不是在 frontmatter 中设置标题(就像您正在做的那样)。

例如在布局中:

%title= yield_content(:title)

并且在动态页面的模板中:

- content_for(:title, @project.title)

于 2012-10-01T23:38:23.753 回答
9

这是最简单的模块化解决方案。

在您的布局中,输入:

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

@title 是一个可用于当前页面的 ruby​​ 实例变量。

在您当前的页面中,输入(不要忘记破折号):

- @title = 'Your Page Title'

那你应该好好去!

于 2014-03-06T16:06:07.657 回答
3

我找到了另一种解决该限制的方法。从元数据中获取前端数据,而不是获取页面数据:

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

它不像通过 current_page.data 获取数据那么好和短,但我只设法更改了元数据:

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

我不知道为什么,但如果我没记错的话,我还必须在准备好之后设置元数据资源:

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

我仍然认为/希望必须有更好的解决方案。我们不能为代理页面设置前端数据,这有点奇怪。

于 2014-01-14T15:18:24.770 回答