Include 杰基尔:把一篇文章放在另一篇文章里
Jekyll是否提供了将一篇文章包含在另一篇文章中的方法?我知道这听起来有点愚蠢,但我正在将其用于烹饪/食谱网站。我的一些食谱是由成分组成的,或者其他更小的食谱 我正在寻找一种方法,包括在另一个帖子,模板和所有完整的帖子一小撮。这可能吗 我在谷歌上搜索了很多次,发现我只能在一个页面中包含内容,而不是帖子,而且它没有使用默认的液体模板,只是简单的标记 想法?我在我的网站上用Jekyll的解决方案解决了一个与你类似的问题 集合在Jekyll中仍然是一个实验性的特性,我使用的解决方案本身就非常粗糙,但是如果你不太疯狂的话,它是可以管理的 欲了解更详细、更友好的收藏介绍 我们需要记住的一件事是,对于这种情况,我们应该远离帖子 正如Ben Balter在上面的链接中提到的那样,“如果人们将博客帖子用于非博客帖子,那么Jekyll已经失败了”。食谱不是帖子,如果可以的话,我们应该避免使用它们 话虽如此,我的方法分为三个步骤:Include 杰基尔:把一篇文章放在另一篇文章里,include,markdown,jekyll,yaml-front-matter,Include,Markdown,Jekyll,Yaml Front Matter,Jekyll是否提供了将一篇文章包含在另一篇文章中的方法?我知道这听起来有点愚蠢,但我正在将其用于烹饪/食谱网站。我的一些食谱是由成分组成的,或者其他更小的食谱 我正在寻找一种方法,包括在另一个帖子,模板和所有完整的帖子一小撮。这可能吗 我在谷歌上搜索了很多次,发现我只能在一个页面中包含内容,而不是帖子,而且它没有使用默认的液体模板,只是简单的标记 想法?我在我的网站上用Jekyll的解决方案解决了一个与你类似的问题 集合在Jekyll中仍然是一个实验性的特性,我使用的解决方案本身就非常粗糙,但
步骤1 为每个收藏创建
\u配料
和\u食谱
文件夹(确保以复数形式命名),并将其添加到_config.yml文件中:
output:true
参数为集合中的每个项目创建一个单独的HTML页面,permalink
(可选)允许您控制URL
步骤2 向您的
莴苣.md
集合项的YAML前端添加如下元数据:
---
parent-collection: salad
---
如果莴苣.md
属于多个配方,则可以添加多个。如果需要说明,请确保在元数据下方添加内容:
---
parent-collection:
- salad
- hamburguer
- taco
---
Lettuce is really good for your health, but it kinda sucks as a food.
请注意,沙拉
、汉堡
和塔可
的名称应与食谱URL slug完全相同,否则这将不起作用(即greatrecipes.com/recipes/沙拉
)。如果你有一个食谱名称,那就是一个句子,你可以用引号把它括起来
这个变量将在稍后使用,因此类似于parent collection:The Azing SouflèFrançais
的名称将与The Azing soufle francais
匹配。然而,奇怪的事情还是发生了:当有疑问的时候,就写些小大写的沙拉吧
这是令人讨厌的部分
步骤3 为你的食谱创建一个特定的布局(如
\u layout/recipe page.html
)并添加下面的代码-这就是我们将成分包含到食谱页面中的地方
记住你的食谱(salar.md
和朋友)应该指向这个布局
{% capture current_collection %}{{ page.url | remove: "recipes" | remove: "/" | remove: " " }}{% endcapture %}
在这里,我们从URL中捕获配方的名称,并将其分配给current\u集合
变量。请确保这是在一行中进行的,因为将其设置为多行将在捕获的字符串中添加一堆空格,并将代码中断10/10次疯狂。
{{content}——这是集合中当前配方的内容,即您的“post text”。
{site.Components%中成分的百分比}
{%capture capture_parent_collection%}{{component.parent-collection | slugify}{%endcapture%}--此捕获只是为了通过slugify过滤器并清理parent.collection,以确保它与URL slug匹配
{%if captured_parent_collection==当前_collection%}
{{component.name}--“莴苣”
{{component.content}-“莴苣对你的健康很有好处,但作为一种食物它有点不好吃。”
{%endif%}
{%endfor%}
匹配此配方的配料,并将每种配料都包含在布局中。亚斯
你的每种配料都应该出现在食谱文本的正下方
请注意,您并没有像您在问题中所描述的那样在配方文本中提取成分,而是将它们包含在后面的布局中。据我所知,你不能在你的文章/收藏品文本中间添加东西——除非你通过Jekyll的自定义插件来破解。
当然,有一些不太老套的方法可以做到这一点,但我就是这样做的。让我知道,如果你发现任何困难尝试这为自己-和任何其他人,请随时纠正我
我在我的网站上进行了这个设置-看看和他们自己。好的,通过阅读这个,它真的非常接近我所需要的。我甚至都不知道收藏的存在,这就是为什么这些帖子一开始就存在的原因。我以前从未使用过Jekyll(来自WP背景)。我唯一要做的事情就是把“家长”的东西从配料前的事情中抽出来。我不想每次有新的父配方需要使用时都要更新配料。md。我想我所需要做的就是将当前配方URL捕获为当前的_集合,而不是自己提供一个蛞蝓列表,然后将其与“配料”集合中的蛞蝓进行比较,仅呈现匹配项。我想您可以列出配方元数据中的所有成分,然后将它们与成分名称匹配(在对它们进行分段之后)。这样做的一个问题是,在元数据列表中循环不会像处理数组一样返回单个项,而是返回一个包含所有项的字符串
{% capture current_collection %}{{ page.url | remove: "recipes" | remove: "/" | remove: " " }}{% endcapture %}
<div class="recipe-content">
<p>{{ content }}</p> -- This is the content of the current recipe in the collection, your "post text".
</div>
{% for ingredient in site.ingredients %}
{% capture captured_parent_collection %}{{ ingredient.parent-collection | slugify }}{% endcapture %} -- This capture is just to pass the slugify filter and sanitize parent.collection to make sure it matches the URL slug
{% if captured_parent_collection == current_collection %}
<div class="recipe-ingredient">
<h3>{{ ingredient.name }}</h3> -- "<h3>Lettuce</h3>"
<p>{{ ingredient.content }}</p> -- "<p>Lettuce is really good for your health, but it kinda sucks as a food.</p>"
</div>
{% endif %}
{% endfor %}