加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 从插件中获取一个Jekyll Liquid模板的哈希值,以便在FOR

发布时间:2020-12-17 02:39:08 所属栏目:百科 来源:网络整理
导读:这个让我难过…… 我想从其他一些Jekyll页面中的单个文件中共享一个YAML哈希. 我知道你可以把它放在Front Matter(这需要重复它),我知道你可以通过一个插件生成(写)页面(但我在几个不同类型的页面中使用它,这将是复杂的).这也不是我要找的. 我想在我的页面中
这个让我难过……

我想从其他一些Jekyll页面中的单个文件中共享一个YAML哈希.

我知道你可以把它放在Front Matter(这需要重复它),我知道你可以通过一个插件生成(写)页面(但我在几个不同类型的页面中使用它,这将是复杂的).这也不是我要找的.

我想在我的页面中使用Liquid循环哈希,但我似乎无法从插件中获取哈希到Liquid. {%capture%}仅适用于字符串,{%assign%}不允许您在其自身内调用标记,例如{%assign projects = gethash%}其中gethash是自定义Liquid标记.

基本上,我想使用单独的YAML文件,就像基于文本的数据库.

YAML文件中有这个:

projects:

  category1:
     -
       title: Project 1
       desc: Description
       etc...
     -
       title: Project 2
       etc...

    category2:
     -
       title: Project 3
       desc: Description
       etc...
     -
       title: Project 4
       etc...

插件正在调用(它给出了YAML的Ruby Hash):

def...
  YAML::load(File.read('projects.yml'))
end...

在模板中,我想:

{% for p in projects %}
  ...

这应该是非常简单的,但它是那些令人痛苦的液体之一.

如何从插件中获取用于{%for%}循环的Liquid的哈希值?

解决方法

这是我提出的解决方案:

一个Jekyll插件,创建一个液体标签:yaml_to_liquid.此插件将yaml文件解析为哈希,然后将其添加到Jekyll页面变量中.

module Jekyll

  class YamlToLiquid < Liquid::Tag
    def initialize(tag_name,arg,tokens)
      super

      if arg.length == 0
        raise 'Please enter a yaml file path'
      else
        @yml_path = arg
      end
    end

    def render(context)

      yml = YAML::load(File.read(@yml_path))
      context.registers[:page]['yml'] = yml
    end
  end
end

Liquid::Template.register_tag('yaml_to_liquid',Jekyll::YamlToLiquid)

使用它.将标记放在Yaml Front Matter正下方的.html或.md页面的顶部,然后像往常一样访问yml变量.此循环仅输出代码哈希(允许您访问整个哈希或只是子哈希):

---
layout: page
---
{% yaml_to_liquid work/_projects.yml %}

<ul>
  {% for n in page.yml.projects.code %}
    <li>
    <a href="{{ n.url }}">{{ n.title }}</a>
    </li>
  {% endfor %}
</ul>

work / _projects.yml的示例:

projects:

  code:
    - title:
      url:

    - title:
      url:

  websites:
    - title:
      url:

    - title:
      url:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读