Jekyll Page数据不会持续存在

Fre*_*all 5 ruby liquid jekyll

Jekyll版本2.5.3

我们正在尝试编写一个插件来宣传与页面或帖子无关的内容.但是,页面和帖子之间存在一些不明确的区别.

  # this does not work
  site.pages.each do |page|
    # this does not show up in liquid
    page.data['baz'] = 'Foo'
  end

  # this does work
  site.posts.each do |post|
    # this does show up in liquid
    post.data['baz'] = 'Bar'
  end
Run Code Online (Sandbox Code Playgroud)

关于为什么要改变.data帖子的哈希值的任何想法都可以在流动中访问,但改变.data页面的哈希值没有效果?

我们也对此进行了测试.data["title"],但它会产生影响postspage标题不受影响.


{% for post in site.posts %}
   <div class="postbaz">{{ post.baz }}</div>
{% endfor %}

{% for page in site.pages %}
   <div class="pagebaz">{{ page.baz }}</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

产量

<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="pagebaz"></div>
<div class="pagebaz"></div>
Run Code Online (Sandbox Code Playgroud)

Eug*_*Zol 2

你缺少一些东西。添加值到data对于页面和帖子都非常有效。

请参阅我的存储库以供参考。

这里我为所有页面和帖子添加 'foo' 属性

_插件/foo.rb

module Foo
  class Generator < Jekyll::Generator
    def generate(site)
      puts "Our plugin is running"
      puts site.pages.inspect
      puts site.posts.inspect
      site.pages.each do |page|
        page.data['foo'] = 'bar'
      end
      site.posts.each do |post|
        post.data['foo'] = 'bar'
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这里我将“foo”添加到帖子布局中:

帖子.html

<article class="post-content">
  {{ content }}
  {{ page.foo }}
</article>
Run Code Online (Sandbox Code Playgroud)

以及页面布局

页面.html

<article class="post-content">
  {{ content }}
  {{ page.foo }}
</article>
Run Code Online (Sandbox Code Playgroud)

运行后jekyll b我可以在帖子页面中看到输出中看到输出,就在我期望的位置。

在单独的分支中,我重新创建了您的设置,您可以在其中迭代所有页面和帖子:

默认.html(来源

{% for post in site.posts %}
   <div class="postbaz">{{ post.foo }}</div>
{% endfor %}

{% for page in site.pages %}
   <div class="pagebaz">{{ page.foo }}</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

_plugins/foo.rb(来源

site.pages.each do |page|
  page.data['foo'] = 'bar'
end
site.posts.each do |post|
  post.data['foo'] = 'baz'
end
Run Code Online (Sandbox Code Playgroud)

(请注意,页面的属性为“bar”,帖子的属性为“baz”。)

它按预期呈现:

site/index.html(来源

<div class="postbaz">baz</div>



<div class="pagebaz">bar</div>

<div class="pagebaz">bar</div>

<div class="pagebaz">bar</div>

<div class="pagebaz">bar</div>
Run Code Online (Sandbox Code Playgroud)