15

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

布局/艺术家.html

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

我尝试这样做时出错。

4

2 回答 2

3

目前,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>
于 2016-06-14T00:28:50.363 回答
2

我不确定是否有办法正确地做到这一点(即服务器端),但权宜之计可能是在用户浏览器中设置正确标题的一小段 Javascript。例如

---
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 特殊字符'"\(没有内置过滤器来执行此操作)更容易。

也可以将pagetitlespan 移到页面顶部,使其靠近另一个 YAML 前端。

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

于 2012-04-25T04:09:48.777 回答