微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jekyll/Liquid:我如何将帖子前端内容传递给自定义标签?

如何解决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 举报,一经查实,本站将立刻删除。