首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MIddleman 3.0 -如何在动态页面上设置单个页面标题?

使用MIddleman 3.0 -如何在动态页面上设置单个页面标题?
EN

Stack Overflow用户
提问于 2012-10-01 18:46:53
回答 3查看 6.1K关注 0票数 13

我正在组建一个简单的投资组合网站在中间人。我正在基于本地YAML数据动态生成“工作”页面。这是在config.rb中:

代码语言:javascript
复制
data.work.projects.each do |project|
  page "/work/#{project[0]}.html", :proxy => "project_template.html" do
    @project = project
  end
end

为了搜索引擎优化的目的,我希望这些动态生成的页面中的每一个都有唯一的页面标题和描述。

标题当前在布局文件中设置如下

代码语言:javascript
复制
  %title
    = current_page.data.title

我知道我可以使用frontmatter来设置current_page变量,如下所示

代码语言:javascript
复制
---
title: "Recent Work - "
---

我可以把它放到我的project_template.haml里,但是有没有办法让这样的东西工作呢?

代码语言:javascript
复制
---
title: "Recent Work - " + @project.title
---
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-02 07:38:24

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

例如在布局中:

%title= yield_content(:title)

在动态页面的模板中:

- content_for(:title, @project.title)

票数 24
EN

Stack Overflow用户

发布于 2014-03-07 00:06:08

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

在你的布局中,加入:

代码语言:javascript
复制
%title= 'Your Site Title | ' + @title

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

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

代码语言:javascript
复制
- @title = 'Your Page Title'

那么你应该可以走了!

票数 9
EN

Stack Overflow用户

发布于 2014-01-14 23:18:25

我找到了另一种方法来解决这个限制。不去获取页面数据,而是从元数据中获取frontmatter数据:

代码语言:javascript
复制
%title = current_page.metadata[:page]['title']

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

代码语言:javascript
复制
proxy newpath, oldpath, :page => { 'title' => newtitle }

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

代码语言:javascript
复制
resource.add_metadata :page => { 'title' => newtitle }

我仍然认为/希望一定有更好的解决方案。我们不能为代理页面设置前置数据,这是完全奇怪的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12671804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档