如何在Jekyll中调整特定页面/帖子的布局?

如何在Jekyll中调整特定页面/帖子的布局?,jekyll,Jekyll,我想对杰基尔的布局做些改变。变化很小,也很不同。例如,链接其他CSS或JavaScript文件。或者在标题中添加一些信息。或调整页面标题。 重要的是,这些更改取决于页面/帖子 由于变化小且多样,为每个变化创建一个特殊的布局似乎成本太高 我试图创建自己的解决方案,但遇到了问题 有人解决过类似的问题吗?例如,将一个特殊的CSS链接到一个特定的帖子?您可以使用它来调整任何帖子/页面的任何内容。您提供的任何信息都可以在版面中访问,并包含在页面变量下或任何列表中的特定帖子下 这听起来像是针对您的案例的解决

我想对杰基尔的布局做些改变。变化很小,也很不同。例如,链接其他CSS或JavaScript文件。或者在标题中添加一些信息。或调整页面标题。 重要的是,这些更改取决于页面/帖子

由于变化小且多样,为每个变化创建一个特殊的布局似乎成本太高

我试图创建自己的解决方案,但遇到了问题

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

您可以使用它来调整任何帖子/页面的任何内容。您提供的任何信息都可以在版面中访问,并包含在
页面
变量下或任何列表中的特定帖子下

这听起来像是针对您的案例的解决方案:您可以使用YAML front matter,如下所示:

---
extra_css:
  - foo.css
  - dir/bar.css
  - /s/baz.css
---
{% for css_name in page.extra_css %}
    <link rel="stylesheet" href="{{ css_name }}">
{% endfor %}
---
layout: custom
---
<aside class="sidebar">
    {% include comments.html %}
    {% include sidebar.html %}
</aside>
<div class="content" role="main">
    Foo bar baz
</div>
然后在布局的标题中使用如下内容:

---
extra_css:
  - foo.css
  - dir/bar.css
  - /s/baz.css
---
{% for css_name in page.extra_css %}
    <link rel="stylesheet" href="{{ css_name }}">
{% endfor %}
---
layout: custom
---
<aside class="sidebar">
    {% include comments.html %}
    {% include sidebar.html %}
</aside>
<div class="content" role="main">
    Foo bar baz
</div>
{page.extra\u css%}
{%endfor%}
通过这种方式,您可以根据YAML front matter中的帖子提供的数据添加任何逻辑

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

是的,Jekyll不允许在includes中使用变量,因此如果您想有条件地包含某些内容,您需要在某个地方列出所有可用的includes,然后在需要时创建所有插入条件


另一种解决方案是将版面中的所有内容划分为包含,并以不同的复杂度制作版面-通过这种方式,您可以为post设置任何基本版面,然后编写包含基本版面中所需的任何块的额外代码,因此您的post可以如下所示:

---
extra_css:
  - foo.css
  - dir/bar.css
  - /s/baz.css
---
{% for css_name in page.extra_css %}
    <link rel="stylesheet" href="{{ css_name }}">
{% endfor %}
---
layout: custom
---
<aside class="sidebar">
    {% include comments.html %}
    {% include sidebar.html %}
</aside>
<div class="content" role="main">
    Foo bar baz
</div>
---
布局:自定义
---
{%include comments.html%}
{%include sidebar.html%}
福吧巴兹酒店
在这里,您可以使用自定义布局,该布局不包括页面的基本布局,也不包括侧边栏和注释,因此您可以在每篇文章中决定所需的布局级别,然后重新定义需要重新定义的任何内容

此外,如果您需要调整不同的位置,但内容未知,您可以将YAML front matter与块一起使用,如

extra_head: |
    <style>
    * {background: red}
    </style>
extra_头:|
*{背景:红色}
然后您可以从head:
{{{page.extra_head}}
调用这样的变量,并获取放置在那里的任何内容。但是,您不能在YAML中使用任何液体标记,但是您可以在这些变量上使用任何YAML标记,这样您就可以通过简单的替换过滤器将它们标记下来,或者用任何其他内容替换其中的任何字符串


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

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

链接其他CSS只是一个例子。正如我所说的,有很多变化,它们是多样的。我无法预测在模板中会考虑到它们。但是我希望任何帖子/页面都能稍微改变一下布局。好吧,你的需求超出了Jekyll的范围,如果你不能预测要更改哪些地方,或者不能为新帖子的布局添加所需的逻辑,那么Jekyll将不适合你——它只是一个方便的静态博客引擎,可以稍微扩展一下。您需要的是一个复杂的可配置解决方案。然而,我怀疑是否有任何一种方法可以和杰基尔的博客一样好。因此,如果您同时需要这两种格式,我建议您不要只通过调整帖子来调整版面,每次需要不同的内容时都对版面进行适当的更改。有一种方法可以处理内联js或css?顺便说一句,在Jekyll版本之前,现在可以在includes中使用变量-
{%include{{variable}%}