如何解决Jekyll/Liquid:我如何将帖子前端内容传递给自定义标签?
我正在关注构建自定义液体标签的 this demonstration。
我想创建一个标签,用于获取给定帖子的图像并返回一个带有其等效缩略图路径的图像标签。
说一个帖子的前端看起来像这样:
---
title: Build a plugin
layout: post
image: plugin.jpg
---
我的标签看起来像这样:
{% thumb_for post.image %}
所需的输出是:
<img src="https://example.com/images/thumbs/plugin.jpg">
到目前为止,我的尝试是这样的:
module Jekyll
class RenderThumbTag < Liquid::Tag
def initialize(tag_name,image,tokens)
super
@image = image
end
def render(context)
"<img src='#{context["site"]["url"]}/images/thumbs/#{@image}'>"
end
end
end
Liquid::Template.register_tag('thumb_for',Jekyll::RenderThumbTag)
然而,呈现的标签最终为 http://example.com/images/thumbs/post.image
。显然我希望 post.image
评估文件名。我需要采取哪些步骤? (还是我把 Liquid 弄错了?)
编辑
我意识到我的主要问题是我不知道如何在这个 posts
循环中引用当前的迭代:
{% for post in site.posts %}
<li class="post">
{% thumb_for %}
</li>
{% endfor %}
thumb_for
应返回 post
中每个 posts
的缩略图标签。
编辑 2
当然,我应该在个别帖子上定义 thumb
。我想我需要了解如何为特定页面类型定义自定义变量。
解决方法
假设您只需要前端变量,并且自定义标签的任何参数都将被忽略,这应该可以完成工作:
module Jekyll
class RenderThumbTag < Liquid::Tag
def render(context)
page = context.registers[:page]
"<img src='/images/thumbs/#{page.image}'>"
end
end
end
Liquid::Template.register_tag('thumb_for',Jekyll::RenderThumbTag)
你会像这样调用标签:
{% thumb_for %}
顺便说一句,我在我的博客上提供了 sample templates for Jekyll plugins。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。