这个让我难过……
我想从其他一些Jekyll页面中的单个文件中共享一个YAML哈希.
我知道你可以把它放在Front Matter(这需要重复它),我知道你可以通过一个插件生成(写)页面(但我在几个不同类型的页面中使用它,这将是复杂的).这也不是我要找的.
我想在我的页面中使用Liquid循环哈希,但我似乎无法从插件中获取哈希到Liquid. {%capture%}仅适用于字符串,{%assign%}不允许您在其自身内调用标记,例如{%assign projects = gethash%}其中gethash是自定义Liquid标记.
YAML文件中有这个:
projects: category1: - title: Project 1 desc: Description etc... - title: Project 2 etc... category2: - title: Project 3 desc: Description etc... - title: Project 4 etc...
def... YAML::load(File.read('projects.yml')) end...
在模板中,我想:
{% for p in projects %} ...
这应该是非常简单的,但它是那些令人痛苦的液体之一.
解决方法
这是我提出的解决方案:
一个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: