首页 > 解决方案 > 为所有帖子设置 URL 变量

问题描述

我正在尝试从 GitHub 页面帖子中引用图像。我一直在从布局中引用图像,为此我在我的 中使用了以下代码_layouts/default.html

{% assign custom_url = site.url | append: site.baseurl %}
{% assign full_base_url = custom_url | default: site.github.url %}
… href="{{ "/images/logo.png" | prepend: full_base_url }}" …

(我不确定我对前两行的理解如何,但它们似乎在实时页面和我的本地预览中都运行良好,所以我倾向于保留它们的语义。)

尝试仅复制帖子正文中的最后一行失败,导致没有任何附加内容。我假设该变量在帖子被渲染时不存在,只有当该渲染被插入布局时。在每篇文章中使用所有三行图像感觉有点重复。

我已经阅读了Jekyll Front Matter Defaults,它描述了如何为所有帖子执行设置,但这似乎只允许设置静态值,而不是像我在作业中所做的计算值。

我还阅读了如何在 Liquid 中定义全局变量?这似乎解决了同样的液体问题。但是这个问题非常简单,并且标记为 Shopify 而不是 Jekyll,所以有些答案对我来说并不适用。我从那里的答案中得到的要点是,也许我可以在某处以某种方式包含一些“片段”,但我不知道如何做到这一点,更不用说以不需要在每个帖子中添加行的方式做到这一点. 术语“片段”往往指代代码片段这一事实并没有使搜索指南变得更容易。

标签: jekyllgithub-pagesliquid

解决方案


在我的一个 Jekyll 项目中,我有同样的要求,和你一样,我没有找到一个非常明确的方法来做到这一点。

我挣扎了很长时间试图将它放入_config.yaml,但由于处理顺序,我意识到它永远不会起作用。

我最终得到的可能不是最干净的解决方案,我真的希望有人能提供比这个更好的解决方案,但它是:

_includes文件夹中,我创建了一个variables.html文件,其中包含我知道可以在所有页面上使用的所有全局变量。

在您的情况下,文件_includes/variables.html将是

{% assign custom_url = site.url | append: site.baseurl %}
{% assign full_base_url = custom_url | default: site.github.url %}

然后在所有需要这些变量的布局中,我只需在 _layouts/default.html 之后包含variables.html文件DOCTYPE,这是_layouts/default.html的简化示例:

<!DOCTYPE html>
{% include variables.html %}
<html>
    <head></head>
    <body>
        {{ content }}
        <a href="{{ '/images/logo.png' | prepend: full_base_url }}">Some image</a>
    </body>
</html>

这样,您的变量custom_url可以 在您使用默认布局的任何full_base_url地方全局访问。


推荐阅读