覆盖 Jekyll Block 插件中的上下文寄存器
Overriding a context register in a Jekyll Block plugin
我正试图在 Jekyll 中更好地控制我的 post 摘录。在我的情况下,使用默认摘录代码似乎效果不佳,因为它 (a) 需要成为第一段,并且 (b) 仍呈现在页面上。对于我的博客 post 的大部分内容,我想要自定义文本,这不是实际博客 post 的一部分,或者稍后在博客 post 中的一些文本。我希望用一个块来做到这一点,它可以选择采用一个参数来呈现内容(尽管我稍后会添加该特定功能)。我目前有这个概念验证插件:
require "jekyll"
module Jekyll
class RenderExcerptBlock < Liquid::Block
def render(context)
page = context.registers[:page]
content = super
page["excerpt"] = content.lines[0..50]
content
end
end
end
Liquid::Template.register_tag "excerpt", Jekyll::RenderExcerptBlock
理论上可以让我这样做:
{% excerpt %}
A snippet of this post
{% endexcerpt %}
然而,当 运行 jekyll build
:
Liquid Exception: Key excerpt cannot be set in the drop. in /Users/nick.chambers/blog/_posts/2020-01-21-unix-shell-scripting-with-bash.md
ERROR: YOUR SITE COULD NOT BE BUILT:
------------------------------------
Key excerpt cannot be set in the drop.
是否可以通过某种方式覆盖该寄存器的值?或者,是否有更多的 Jekyll 方法来实现此目的?
Jekyll 方法 为您的 post(或集合中的任何文档)自定义摘录,只需将其添加到前面:
---
title: Test Doc
excerpt: This is a custom excerpt
---
The opening paragraph of this document.
Another paragraph in this document.
然后在您的布局中引用它以呈现它:
<div class="post-excerpt">
{{ page.excerpt }}
</div>
或
<div>
{% for post in site.posts %}
<h2>{{ post.title }}</h2>
<div>{{ post.excerpt }}</div>
{% endfor %}
</div>
我正试图在 Jekyll 中更好地控制我的 post 摘录。在我的情况下,使用默认摘录代码似乎效果不佳,因为它 (a) 需要成为第一段,并且 (b) 仍呈现在页面上。对于我的博客 post 的大部分内容,我想要自定义文本,这不是实际博客 post 的一部分,或者稍后在博客 post 中的一些文本。我希望用一个块来做到这一点,它可以选择采用一个参数来呈现内容(尽管我稍后会添加该特定功能)。我目前有这个概念验证插件:
require "jekyll"
module Jekyll
class RenderExcerptBlock < Liquid::Block
def render(context)
page = context.registers[:page]
content = super
page["excerpt"] = content.lines[0..50]
content
end
end
end
Liquid::Template.register_tag "excerpt", Jekyll::RenderExcerptBlock
理论上可以让我这样做:
{% excerpt %}
A snippet of this post
{% endexcerpt %}
然而,当 运行 jekyll build
:
Liquid Exception: Key excerpt cannot be set in the drop. in /Users/nick.chambers/blog/_posts/2020-01-21-unix-shell-scripting-with-bash.md
ERROR: YOUR SITE COULD NOT BE BUILT:
------------------------------------
Key excerpt cannot be set in the drop.
是否可以通过某种方式覆盖该寄存器的值?或者,是否有更多的 Jekyll 方法来实现此目的?
Jekyll 方法 为您的 post(或集合中的任何文档)自定义摘录,只需将其添加到前面:
---
title: Test Doc
excerpt: This is a custom excerpt
---
The opening paragraph of this document.
Another paragraph in this document.
然后在您的布局中引用它以呈现它:
<div class="post-excerpt">
{{ page.excerpt }}
</div>
或
<div>
{% for post in site.posts %}
<h2>{{ post.title }}</h2>
<div>{{ post.excerpt }}</div>
{% endfor %}
</div>