24

我想对 Jekyll 的布局进行一些更改。变化很小而且不同。例如,链接附加的 CSS 或 JavaScript 文件。或者在标题中添加一些信息。或调整页面标题。 重要的是,这些更改取决于页面/帖子。

由于变化小而多样,为每个变化创建一个特殊的布局似乎太昂贵了。

我试图创建自己的解决方案,但无法在包含指令中使用变量

有没有人解决过类似的问题?例如,将特殊的 CSS 链接到特定的帖子?

4

2 回答 2

40

您可以使用YAML 前端来为任何帖子/页面调整您想要的任何内容。您在那里提供的任何信息都可以通过布局访问,并包括在page变量或任何列表中的特定帖子下。

这听起来像是您的案例的解决方案:您可以像这样使用 YAML 前端:

---
extra_css:
  - foo.css
  - dir/bar.css
  - /s/baz.css
---

然后在布局的标题中使用它,如下所示:

{% for css_name in page.extra_css %}
    <link rel="stylesheet" href="{{ css_name }}">
{% endfor %}

通过这种方式,您可以根据您在 YAML 前端中的帖子中提供的数据添加任何逻辑。

如果您想将其中一些逻辑抽象到模块中,您可以对包含使用 hack,在包含之前分配一个变量,然后在内部使用它。这是一个链接,其中描述了它是如何在 Jekyll Bootstrap 项目中制作的(顺便说一句,它的网站上有很多关于 Jekyll 的好信息)。

而且,是的,Jekyll 不允许在包含中使用变量,因此,如果您想有条件地包含某些内容,则需要在某处列出所有可用包含的列表,然后创建所有条件以在您插入时插入一个或另一个会需要它们。


另一种解决方案是将布局中的所有内容划分为包含,并制作具有不同复杂程度的布局 - 这样您可以为发布设置任何这些基本布局,然后编写任何额外的代码,其中包含您需要的任何基本块布局,因此您发布的内容可能如下所示:

---
layout: custom
---
<aside class="sidebar">
    {% include comments.html %}
    {% include sidebar.html %}
</aside>
<div class="content" role="main">
    Foo bar baz
</div>

在那里,您可以使用不包含页面基本布局且不包含侧边栏和评论的自定义布局,因此您可以根据帖子决定所需的布局级别,然后重新定义需要重新定义的任何内容。

此外,如果您需要调整不同的地方但内容未知,您可以使用带有块的 YAML 前端,例如

extra_head: |
    <style>
    * {background: red}
    </style>

然后您可以从 head: 调用此类变量{{ page.extra_head }}并获取您放置在那里的任何内容。但是,您不能在 YAML 中使用任何液体标签,但是您可以在此类变量上使用任何 YAML 标签,因此您可以对它们进行降价或通过简单的替换过滤器将其中的任何字符串替换为其他任何内容。

如果这些都不适合你,那么 Jekyll 就不适合你——正如我在评论中所写的,Jekyll 只是一个博客引擎,你不应该等待它变得像 XSLT 一样复杂。

于 2013-01-04T17:49:35.537 回答
0

我曾经尝试在 jekyll-bootstrap 静态站点中创建一个独立的页面。例如my_cv.html需要独立的 css 样式。我没有用 gh-pages(对不起 GitHub)创建一个新的 github 存储库,而是简单地将所有最终的 html 内容填充到一个帖子中my_cv.md,因为markdown格式实际上与html我认为是兼容的,幸运的是它可以工作。

于 2014-01-26T23:26:38.797 回答