Jekyll的新手,想知道是否可以在Jekyll Front Matter中包含自定义变量.它对嵌套布局很有用,例如:
布局/ artist.html
----
layout: default
title: {{ page.artist }} (Artist)
----
Run Code Online (Sandbox Code Playgroud)
我试错了.
目前,Jekyll 不支持前面提到的 Liquid 变量,唯一的方法是通过插件,例如jekyll-conrefifier。
或者,您可以做的是创建在同一文件上重复使用的变量:
{% assign new_title = page.title | append: " (Artist)" %}
<h1>{{ new_title }}</h1>
Run Code Online (Sandbox Code Playgroud)
您还可以将变量传递给包含的文件。例如,包含一个_includes\display-post.html将修改后的标题作为参数传递的文件:
{% assign new_title = page.title | append: " (Artist)" %}
{% include display-post.html post_title=new_title %}
Run Code Online (Sandbox Code Playgroud)
然后获取传入的值的值(示例内容_includes\display-post.html):
{% assign title_received = include.post_title %}
<h1>Title that as passed in: {{ title_received }}</h1>
Run Code Online (Sandbox Code Playgroud)
我不确定是否有办法正确执行此操作(即服务器端),但权宜之计可能是使用一小段 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>
Run Code Online (Sandbox Code Playgroud)
的替换page.artist是在 HTML 中而不是在 Javascript 中执行的,因为引用任何 HTML 特殊字符(通过escape)而不是 Javascript 特殊字符'or "or \(没有内置过滤器可以执行此操作)。
人们还可以将pagetitle跨度移动到页面顶部,以便它靠近另一个 YAML 前面的内容。
不幸的是,这是实现这一目标的一种非常糟糕的方法,但看起来这可能是除了编写插件之外的唯一方法。