在布局中访问博客配置变量

时间:2015-01-25 16:42:49

标签: ruby middleman static-site

原来以下不是我需要的好描述。通过所有这些研究,我发现了如何提出我一直在问的问题。新帖子:here。离开这个问题,以防其他人受益。


我正在构建一个激活了多个“博客”的网站,并且有些情况下能够从blog.prefix获取config.rb之类的内容。我知道你可以set变量并通过config.rb使用实例变量,但这意味着在模板中我必须知道我所在的哪个博客无法解决我的问题。 (我希望所有博客都有一个布局,而不是每个博客的重复布局。)

有没有办法可以从blog.prefix获取config.rb和其他激活变量,并在以下布局中使用它:

<p>The blog prefix is: <%= blog.prefix %></p>

更新

我尝试在page do块中传递实例变量,以及使用locals => { :variable = value },在渲染页面时都会产生Error: cannot find _auto_layout

我原来在the middleman forums发布了这个,但Stackoverflow往往会更多地关注它。 :-D

更新2

如果我必须为每个变量分别设置一个变量(例如blog1_prefixblog2_prefixblog3_prefix),那么我必须知道我从模板中调用的变量。我需要模板来知道哪个博客正在获取前缀(或其他)。

在我的config.rb我有一个看起来像这样的块:

my_blogs = ["blog1", "blog2", "blog3"]

my_blogs.each do |my_blog|
  activate :blog do |blog|
    blog.prefix = my_blog
  end
end

有没有办法可以设置一个变量,让布局知道它正在调用哪个博客,所以我可以像上面的例子那样做:

<p>The blog prefix is: <%= blog.prefix %></p>

这将在一个布局中呈现三个博客中的每一个:

<p>The blog prefix is: blog1</p>

<p>The blog prefix is: blog2</p>

<p>The blog prefix is: blog3</p>

1 个答案:

答案 0 :(得分:1)

我使用多个博客,中间人应用程序的“博客”属性是一个数组,您应该使用博客名称来指定您想要获得的博客。

<强>更新

因此,如果您激活博客:

my_blogs = ["blog1", "blog2", "blog3"]

my_blogs.each do |my_blog|
   activate :blog do |blog|
     blog.name = my_blog
     blog.prefix = my_blog
   end
end

您可以通过

评估特定博客
blog("blog1")

如果您使用博客模板,则可以在前端指定博客名称:

---
pageable: true
per_page: 5
blog: blog1
---

并在模板中使用“blog”变量(在此上下文中将是“blog('blog1')”),例如获取标签(如果您设置标签页模板):

<% blog.tags.each do |tag, articles| %>

在这种情况下,将为“blog1”博客提取文章

更新2 - 最终解决

为了访问博客选项(博客配置变量),例如你需要的前缀

blog("blog1").options.prefix

与其他选项相同。