我正在组建一个简单的投资组合网站在中间人。我正在基于本地YAML数据动态生成“工作”页面。这是在config.rb中:
data.work.projects.each do |project|
page "/work/#{project[0]}.html", :proxy => "project_template.html" do
@project = project
end
end为了搜索引擎优化的目的,我希望这些动态生成的页面中的每一个都有唯一的页面标题和描述。
标题当前在布局文件中设置如下
%title
= current_page.data.title我知道我可以使用frontmatter来设置current_page变量,如下所示
---
title: "Recent Work - "
---我可以把它放到我的project_template.haml里,但是有没有办法让这样的东西工作呢?
---
title: "Recent Work - " + @project.title
---发布于 2012-10-02 07:38:24
你可以使用content_for,而不是在头版设置标题(就像你正在做的那样)。
例如在布局中:
%title= yield_content(:title)
在动态页面的模板中:
- content_for(:title, @project.title)
发布于 2014-03-07 00:06:08
这是最简单的模块化解决方案。
在你的布局中,加入:
%title= 'Your Site Title | ' + @title@title是一个可用于当前页面的ruby实例变量。
在当前页面中,插入(不要忘记破折号):
- @title = 'Your Page Title'那么你应该可以走了!
发布于 2014-01-14 23:18:25
我找到了另一种方法来解决这个限制。不去获取页面数据,而是从元数据中获取frontmatter数据:
%title = current_page.metadata[:page]['title']它不像通过current_page.data获取数据那么简单,但我只设法更改了元数据:
proxy newpath, oldpath, :page => { 'title' => newtitle }我不知道为什么,但如果我没记错的话,我还必须在ready上设置元数据资源:
resource.add_metadata :page => { 'title' => newtitle }我仍然认为/希望一定有更好的解决方案。我们不能为代理页面设置前置数据,这是完全奇怪的。
https://stackoverflow.com/questions/12671804
复制相似问题