J W*_*J W 4 ruby yaml liquid jekyll
这个让我难过......
我想从其他一些Jekyll页面中的单个文件中共享一个YAML哈希.
我知道你可以把它放在Front Matter(这需要重复它),我知道你可以通过一个插件生成(写)页面(但我在几个不同类型的页面中使用它,这将是复杂的).这也不是我要找的.
我想在我的页面中使用Liquid循环哈希,但我似乎无法从插件中获取哈希到Liquid.{% capture %}只适用于字符串,{% assign %}不会让你调用它自己内部的标记,就像{% assign projects = gethash %}这里gethash是一个自定义标签的液体.
基本上,我想使用单独的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...
Run Code Online (Sandbox Code Playgroud)
插件正在调用(它给出了YAML的Ruby Hash):
def...
YAML::load(File.read('projects.yml'))
end...
Run Code Online (Sandbox Code Playgroud)
在模板中,我想:
{% for p in projects %}
...
Run Code Online (Sandbox Code Playgroud)
这应该是非常简单的,但它是那些令人痛苦的液体之一.
如何从插件中获取用于{% for %}循环的Liquid哈希?
这是我提出的解决方案:
一个Jekyll插件,创建一个液体标签:yaml_to_liquid.此插件将yaml文件解析为哈希,然后将其添加到Jekyll page变量中.
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)
Run Code Online (Sandbox Code Playgroud)
使用它.将你的顶部的标签.html或.md页面正下方的YAML接待物质,然后访问yml变量如常.这个循环只输出code散列(允许你访问整个散列或只是子散列):
---
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>
Run Code Online (Sandbox Code Playgroud)
示例work/_projects.yml:
projects:
code:
- title:
url:
- title:
url:
websites:
- title:
url:
- title:
url:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1744 次 |
| 最近记录: |