【问题标题】:Custom Variables in Jekyll Front MatterJekyll Front Matter 中的自定义变量
【发布时间】:2012-04-30 10:03:01
【问题描述】:

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

layouts/artist.html

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

我尝试这样做时出错。

【问题讨论】:

  • YAML(这是最重要的问题,Liquid 不会在那里执行替换,我不认为)支持references,但我无法让它们在布局中工作(虽然它们在页面中本地工作)。
  • 我有一个类似的问题,我需要标题中的分页变量。这里给出了一个解决方案:stackoverflow.com/a/29729309/599477

标签: jekyll


【解决方案1】:

目前,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>

【讨论】:

    【解决方案2】:

    我不确定是否有办法正确执行此操作(即服务器端),但权宜之计可能是在用户浏览器中设置正确标题的 JavaScript 小 sn-p。例如

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

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

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

    【讨论】:

    • 我最终使用了这个,因为我发布到 GitHub Pages 并且 GitHub Pages 不允许 Jekyll 插件(officially supported 除外)。所以,插件解决方案不是一种选择,但这个可行。
    • 这不安全。这是通过 DOM 操作进行的客户端更改,Google 将看到“默认标题等等”,这可能会损害您的 SEO 排名
    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 2017-06-19
    • 1970-01-01
    • 2018-06-25
    • 2015-05-12
    • 2014-10-23
    • 2015-08-17
    • 2019-01-27
    相关资源
    最近更新 更多