Jekyll Page 数据不会持久化
Jekyll Page data does not persist
Jekyll 版本 2.5.3
我们正在尝试编写一个插件来推广不可知的内容,无论是页面还是 post。但是,页面和 posts 之间存在一些不明确的差异。
# 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
关于为什么改变 post 的 .data
散列在 liquid 中是可访问的,但改变页面的 .data
散列没有效果的任何想法?
我们还用 .data["title"]
测试了它,它对 posts
有影响,但 page
标题不受影响。
{% for post in site.posts %}
<div class="postbaz">{{ post.baz }}</div>
{% endfor %}
{% for page in site.pages %}
<div class="pagebaz">{{ page.baz }}</div>
{% endfor %}
产量
<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="pagebaz"></div>
<div class="pagebaz"></div>
你错过了一些东西。向 data
添加值对于页面和 posts 都非常有效。
Here 我将 'foo' 属性添加到所有页面和 posts
_plugins/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
这里我将'foo'添加到post的布局中:
post.html
<article class="post-content">
{{ content }}
{{ page.foo }}
</article>
然后 pages layout:
page.html
<article class="post-content">
{{ content }}
{{ page.foo }}
</article>
在我 运行 jekyll b
之后,我可以在两个 post and page 中看到输出,就在我期望的位置。
在单独的 b运行ch 中,我重新创建了您的设置,您在其中遍历所有页面和 posts:
default.html (source)
{% for post in site.posts %}
<div class="postbaz">{{ post.foo }}</div>
{% endfor %}
{% for page in site.pages %}
<div class="pagebaz">{{ page.foo }}</div>
{% endfor %}
_plugins/foo.rb (source)
site.pages.each do |page|
page.data['foo'] = 'bar'
end
site.posts.each do |post|
post.data['foo'] = 'baz'
end
(注意 属性 对于页面是 'bar',对于 post 是 'baz'。)
它按预期呈现:
site/index.html (source)
<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>
Jekyll 版本 2.5.3
我们正在尝试编写一个插件来推广不可知的内容,无论是页面还是 post。但是,页面和 posts 之间存在一些不明确的差异。
# 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
关于为什么改变 post 的 .data
散列在 liquid 中是可访问的,但改变页面的 .data
散列没有效果的任何想法?
我们还用 .data["title"]
测试了它,它对 posts
有影响,但 page
标题不受影响。
{% for post in site.posts %}
<div class="postbaz">{{ post.baz }}</div>
{% endfor %}
{% for page in site.pages %}
<div class="pagebaz">{{ page.baz }}</div>
{% endfor %}
产量
<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="postbaz">Foo</div>
<div class="pagebaz"></div>
<div class="pagebaz"></div>
你错过了一些东西。向 data
添加值对于页面和 posts 都非常有效。
Here 我将 'foo' 属性添加到所有页面和 posts
_plugins/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
这里我将'foo'添加到post的布局中:
post.html
<article class="post-content">
{{ content }}
{{ page.foo }}
</article>
然后 pages layout:
page.html
<article class="post-content">
{{ content }}
{{ page.foo }}
</article>
在我 运行 jekyll b
之后,我可以在两个 post and page 中看到输出,就在我期望的位置。
在单独的 b运行ch 中,我重新创建了您的设置,您在其中遍历所有页面和 posts:
default.html (source)
{% for post in site.posts %}
<div class="postbaz">{{ post.foo }}</div>
{% endfor %}
{% for page in site.pages %}
<div class="pagebaz">{{ page.foo }}</div>
{% endfor %}
_plugins/foo.rb (source)
site.pages.each do |page|
page.data['foo'] = 'bar'
end
site.posts.each do |post|
post.data['foo'] = 'baz'
end
(注意 属性 对于页面是 'bar',对于 post 是 'baz'。)
它按预期呈现:
site/index.html (source)
<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>