0

原来下面不是我需要的一个很好的描述。通过所有这些研究,我已经弄清楚如何提出我应该提出的问题。新帖子:这里。留下这个问题,以防它有利于别人。


我正在构建一个激活了多个“博客”的站点,并且在某些情况下,能够获取blog.prefixfrom之类的内容会很有用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

我最初在中间人论坛上发布了这个,但 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>

4

1 回答 1

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")

如果你为博客使用模板,你可以在 frontmatter 中指定博客名称:

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

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

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

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

更新 2 - 终于解决了

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

blog("blog1").options.prefix

与其他选项相同。

于 2015-01-26T06:22:22.163 回答