Rei*_*son 35 ruby yaml liquid jekyll
我正在使用markdown文件的YAML标题将excerpt
变量添加到我可以在其他地方使用的博客帖子中.在其中一个摘录中,我通过降价链接标记引用了早期的博客文章,我使用液体模板数据变量{{ site.url }}
代替网站的基本URL.
所以我有类似的东西(有点修剪)
---
title: "Decluttering ordination plots in vegan part 2: orditorp()"
status: publish
layout: post
published: true
tags:
- tag1
- tag2
excerpt: In the [earlier post in this series]({{ site.url }}/2013/01/12/
decluttering-ordination-plots-in-vegan-part-1-ordilabel/ "Decluttering ordination
plots in vegan part 1: ordilabel()") I looked at the `ordilabel()` function
----
Run Code Online (Sandbox Code Playgroud)
但是,jekyll和Maruku md解析器不喜欢这个,这让我怀疑你不能在YAML头中使用液体标记.
是否可以在jekyll处理的页面的YAML标题中使用液体标记?
我从Maruku得到的错误是:
| Maruku tells you:
+---------------------------------------------------------------------------
| Must quote title
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-o
| --------------------------------------|-------------------------------------
| +--- Byte 40
Run Code Online (Sandbox Code Playgroud)
和
| Maruku tells you:
+---------------------------------------------------------------------------
| Unclosed link
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
Run Code Online (Sandbox Code Playgroud)
和
| Maruku tells you:
+---------------------------------------------------------------------------
| No closing ): I will not create the link for ["earlier post in this series"]
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
Run Code Online (Sandbox Code Playgroud)
blu*_*ing 44
今天我遇到了类似的问题.作为一个解决方案,我创建了以下简单的Jekyll过滤器插件,它允许扩展嵌套的液体模板(例如YAML前端物质中的液体变量):
module Jekyll
module LiquifyFilter
def liquify(input)
Liquid::Template.parse(input).render(@context)
end
end
end
Liquid::Template.register_filter(Jekyll::LiquifyFilter)
Run Code Online (Sandbox Code Playgroud)
可以将过滤器添加到站点根目录的"_plugins"子目录中,从而将过滤器添加到Jekyll站点.上面的代码可以简单地粘贴到yoursite/_plugins/liquify_filter.rb文件中.
之后是一个像...的模板
---
layout: default
first_name: Harry
last_name: Potter
greetings: Greetings {{ page.first_name }} {{ page.last_name }}!
---
{{ page.greetings | liquify }}
Run Code Online (Sandbox Code Playgroud)
......应该呈现一些像"问候哈利波特!"的输出.扩展也适用于更深层次的嵌套结构 - 只要在内部液体输出块上指定了液化过滤器.像{{site.url}}之类的东西当然也有用.
更新 - 看起来现在可以作为Ruby gem使用:https://github.com/gemfarmer/jekyll-liquify.
Ala*_*ith 27
我不相信将液体变量嵌入YAML中是可能的.至少,我还没弄明白怎么做.
一种可行的方法是使用Liquid的替换过滤器.具体来说,定义要用于变量替换的字符串(例如!SITE_URL!
).然后,site.url
在输出期间使用替换过滤器将其切换到所需的Jekyll变量(例如).这是一个减少的.md文件,在我的jekyll 0.11安装上表现得如预期:
---
layout: post
excerpt: In the [earlier post in this series](!SITE_URL!/2013/01/12/)
---
{{ page.excerpt | replace: '!SITE_URL!', site.url }}
Run Code Online (Sandbox Code Playgroud)
在我的机器上测试,正确插入URL,然后按预期从markdown转换为HTML链接.如果要替换多个项目,可以将多个替换调用串在一起.
---
layout: post
my_name: Alan W. Smith
multi_replace_test: 'Name: !PAGE_MY_NAME! - Site: [!SITE_URL!](!SITE_URL!)'
---
{{ page.multi_replace_test | replace: '!SITE_URL!', site.url | replace: '!PAGE_MY_NAME!', page.my_name }}
Run Code Online (Sandbox Code Playgroud)
一个重要的注意事项是您必须显式设置site.url值.你不能和杰基尔一起免费获得.您可以使用以下命令在_config.yml
文件中进行设置:
url: http://alanwsmith.com
Run Code Online (Sandbox Code Playgroud)
或者,在调用jekyll时定义它:
jekyll --url http://alanwsmith.com
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10665 次 |
最近记录: |