我想对Jekyll的布局做一些改变.变化很小而且不同.例如,链接其他CSS或JavaScript文件.或者在标题中添加一些信息.或调整页面标题. 重要的是,这些更改取决于页面/帖子.
由于变化很小且多样化,因此为每个变化创建一个特殊的布局似乎太昂贵了.
我试图创建自己的解决方案,但在包含指令时使用变量是不可能的.
有没有人解决类似的问题?例如,将特殊CSS链接到特定帖子?
kiz*_*izu 39
您可以使用YAML前端内容来调整任何帖子/页面所需的内容.您在那里提供的任何信息都可以通过布局访问,并包含page在任何列表中的变量或特定帖子下.
这听起来像是你的案例的解决方案:你可以像这样使用YAML前面的事情:
---
extra_css:
- foo.css
- dir/bar.css
- /s/baz.css
---
Run Code Online (Sandbox Code Playgroud)
然后在你的布局标题中使用它,如下所示:
{% for css_name in page.extra_css %}
<link rel="stylesheet" href="{{ css_name }}">
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以根据您在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>
Run Code Online (Sandbox Code Playgroud)
在那里,您可以使用不包含页面基本布局的自定义布局,并且不包括侧边栏和注释,因此您可以根据需要确定所需的布局级别,然后重新定义需要重新定义的任何内容.
此外,如果您需要调整不同的地方,但内容未知,您可以使用YAML前面的内容,如块
extra_head: |
<style>
* {background: red}
</style>
Run Code Online (Sandbox Code Playgroud)
然后你可以从头部调用这样的变量:{{ page.extra_head }}并获得你放在那里的任何内容.但是,您不能在YAML中使用任何液体标签,但是您可以在这些变量上使用任何YAML标签,因此您可以通过简单的替换过滤器对它们进行标记或用其他任何内容替换任何字符串.
如果没有这些适合你,那么Jekyll将不适合你 - 正如我在评论中写的那样,Jekyll只是一个博客引擎,你不应该等它像XSLT一样复杂.