在MiddleMan中为日历页面定义自定义标题

时间:2014-03-21 15:17:33

标签: ruby middleman

我刚刚使用middleman 3和middleman-blogging宝石设置了一个小型静态博客,目前正在对所有内容进行处理。我从SEO的角度看我的页面,并注意到我的所有日​​历页面都显示相同的标题(这对于SEO来说非常糟糕,afaik)。

目前,我使用它在我的布局(Slim模板引擎)中生成标题标记:

title
  | #{current_article.title unless current_article.nil?} 
  | #{ " | " unless current_article.nil?}
  | My blog name

对于文章来说,这很简单,因为我只需要在frontmatter中定义标题,但我显然无法通过这种方式来动态生成日历页面。除非我可以在calendar.slim的frontmatter中使用变量,但到目前为止我无法获得任何工作。也许通过config.rb文件?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您可以设置yearmonthday个变量集。您也可以像在其他地方(current_resource.data)一样在日历模板中使用frontmatter,并且可以在articles中访问该日历页面的文章并循环浏览它们以从每个文章中提取数据一。有很多选择。

默认生成的calendar.html.erb包含使用这些内容的示例。

答案 1 :(得分:0)

最后,这是我选择继续的方式:在我的calendar.slim和tag.slim模板中,我只是定义了一个我在默认布局中使用的@title变量。在calendar.slim中,我使用内置变量yearmonthday来构建标题字符串,在tag.slim中,我使用内置变量在tagname变量中。

[calendar.slim]

- case page_type
- when 'month'
  - date = date_to_fr Date.new(year, month, 1).strftime('%B %Y')
- when 'year'
  - date = year

- @title = "#{date} - Archives"

(...)

然后在布局中,我使用以下代码显示我的@title变量,后跟我的博客名称,除非@title不存在(然后我只使用我的博客名称作为页面标题):

[layout.slim]

title 
      = "#{@title} | " unless @title.nil?
      | Pierre-Adrien Buisson : Le Blog !

答案 2 :(得分:0)

建立在pabuisson's answer上。

您无法动态设置前置变量。

current_page.data.foo = true
current_page.data.too #=> nil

并且前线不是模板化的

---
title: <%= "foo" %>
---
<%= current_page.data.title %> == <%%= "foo" %>

所以我所做的是在我的布局中,我首先检查了实例变量,然后又回到了前端。

<title><%= @title || current_page.data.title %></title>

这样我可以在frontmatter中设置我的大部分变量,但是当我需要动态变量时,我可以使用实例变量。