【问题标题】:Access blog config variables in layouts在布局中访问博客配置变量
【发布时间】:2015-01-25 16:42:48
【问题描述】:

事实证明,以下内容不能很好地描述我需要什么。通过所有这些研究,我已经弄清楚了如何提出我应该一直在问的问题。新帖子:here。留下这个问题以防其他人受益。


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

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

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

更新

我尝试在page do 块中传递实例变量,以及使用locals =&gt; { :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>

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

&lt;p&gt;The blog prefix is: blog1&lt;/p&gt;

&lt;p&gt;The blog prefix is: blog2&lt;/p&gt;

&lt;p&gt;The blog prefix is: blog3&lt;/p&gt;

【问题讨论】:

  • 你想让所有博客对象的前缀都是常量吗?
  • 也许吧?对不起,我不是 100% 如果那是我所追求的。我想要的是能够获得 each 博客的blog.prefix 和其他blog 设置,因此当从一个模板生成页面时,会显示正确的blog.prefix(或其他)。目前无法从布局文件中访问该设置,因此布局不知道它正在为哪个blog 生成页面。 (至少,我不知道......)

标签: ruby middleman static-site


【解决方案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

与其他选项相同。

【讨论】:

  • 这意味着每个博客都有一个特定的布局。我希望能够从布局中访问博客信息,以便blog1 info 自动与 blog1 一起使用。如果我声明布局适用于哪个博客,它只能适用于一个博客。
  • 我看到一些人说你可以从 layouts/content 中调用blog.prefix,但我实际上并没有看到它起作用。你测试过吗?也许我做错了什么。
  • 这和我写的完全一样:“如果你使用多个博客实例,你不能使用简单的'blog',你应该使用'blog()'”。这与博客的单个或多个布局无关。
  • @lyonsinbeta 为什么要投反对票?您是否已经尝试过我的建议并遇到任何错误?
  • 我检查了github.com/middleman/middleman-blog/blob/master/lib/…,发现你可以试试 blog("blog1").options.prefix
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 2012-06-10
  • 2019-02-09
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多