【问题标题】:Jekyll Page data does not persistJekyll 页面数据不持久
【发布时间】:2015-10-15 17:20:00
【问题描述】:

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

关于为什么改变帖子的 .data 散列可以在液体中访问,但改变页面的 .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>

【问题讨论】:

  • 在我的产品代码中是page。在我的复制代码中是pages,很好;我把它移回page 并遇到了同样的问题。
  • @Fresheyeball 你有关于这个问题的最新消息吗?
  • 自上一个以来没有。

标签: ruby jekyll liquid


【解决方案1】:

你错过了一些东西。向data 添加值对于页面和帖子都非常有效。

参考my repository

Here我为所有页面和帖子添加了'foo'属性

_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.html

<article class="post-content">
  {{ content }}
  {{ page.foo }}
</article>

还有pages layout:

page.html

<article class="post-content">
  {{ content }}
  {{ page.foo }}
</article>

在我运行jekyll b 之后,我可以在postpage 中看到输出,这正是我所期望的。

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

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”,帖子的属性是“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>

【讨论】:

  • 你永远不知道一个人做 50 次可以跨越哪些界限。赏金。我什至为你建立了一个存储库! :D
猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2016-01-27
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多