Jekyll Front Matter中的自定义变量

时间:2012-04-18 22:07:13

标签: jekyll

Jekyll的新手,想知道是否可以在Jekyll Front Matter中包含自定义变量。它对嵌套布局很有用,例如:

布局/ artist.html

----
layout: default
title: {{ page.artist }} (Artist)
----

我在尝试时遇到错误。

2 个答案:

答案 0 :(得分:2)

我不确定是否有办法正确地做到这一点(即服务器端),但是一个止损措施可能是有一小段Javascript在用户浏览器中设置正确的标题。 e.g。

---
title: Default title blah blah
---

[... content ...]

<span id="pagetitle" style="display: none">{{ page.artist | escape }} (Artist)</span>

<script type="text/javascript">
    var pagetitle = document.getElementById("pagetitle");
    if (pagetitle) {
        document.title = pagetitle.textContent;
    }
</script>

注意:

page.artist的替换是在HTML而不是在Javascript中执行的,因为它更容易引用任何HTML特殊字符(通过escape)而不是Javascript特殊字符'"\(没有内置过滤器来执行此操作)。

还可以将pagetitle范围移动到页面顶部,使其接近另一个YAML前端。

不幸的是,这是实现这一目标的一种非常糟糕的方式,但看起来它可能是除了编写插件之外的唯一方法。

答案 1 :(得分:2)

目前,Jekyll不支持前面的Liquid变量,唯一的方法是通过插件,例如 jekyll-conrefifier

或者,您可以做的是创建可在同一文件上重复使用的变量:

{% assign new_title = page.title | append: " (Artist)" %}
<h1>{{ new_title }}</h1>

您还可以将变量传递给包含的文件。例如,包括来自_includes\display-post.html的文件,将修改后的标题作为参数传递:

{% assign new_title = page.title | append: " (Artist)" %}
{% include display-post.html post_title=new_title %}

然后获取传入的值的值(_includes\display-post.html的示例内容):

{% assign title_received = include.post_title %}

<h1>Title that as passed in: {{ title_received }}</h1>