ruby – 从插件中获取一个Jekyll Liquid模板的哈希值,以便在FOR
这个让我难过……
我想从其他一些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: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |