杰基尔:在另一篇文章中包括一篇文章

时间:2015-05-13 04:02:44

标签: include markdown jekyll yaml-front-matter

Jekyll是否提供了在其他帖子中添加帖子的方法?我知道这听起来有点傻,但我正在将它用于烹饪/食谱网站。我的一些配方由组件或其他较小的配方组成。

我正在寻找一种方法,在里面添加一些帖子,另外还有模板和所有帖子。这可能吗?

我做了大量的谷歌搜索,发现我只能包含在一个页面中,而不是发布,并且它没有使用默认的液体模板,只是简单的降价。

想法?

2 个答案:

答案 0 :(得分:7)

我在网站上使用了Jekyll的Collections来解决与您类似的问题。

收藏品在Jekyll中仍然是一个实验性的功能,我使用的解决方案本身就很简陋,但如果你不太疯狂,它就足够可管理。

有关收藏品的更详细和友好的介绍,here's a great post about getting started with them

我们需要记住的一件事是,我们应该放弃这类案件的帖子。

正如Ben Balter在上面的链接中提到的,“如果人们使用博客文章来发表非博客帖子,那么Jekyll已经失败了”食谱不是帖子,如果可以,我们应该避免使用它们。

话虽如此,我的方法分三步进行:

  1. 创建两个集合(我们的自定义帖子类型) - 让我们说这些是“食谱”和“成分”

  2. 找到一种方法将它们相互联系起来 - 确保“生菜”列在“沙拉”下

  3. 在“食谱”中加入相关的“成分” - 添加液体代码,实际显示“沙拉”页面某处“生菜”的信息。

  4. 第1步

    为每个集合创建_ingredients_recipes个文件夹(确保将其命名为复数形式)并将其添加到 _config.yml 文件中:

        collections:
          ingredients:
            output: true 
          recipes: 
            output: true  
            permalink: /recipes/:path/  
    

    output: true参数为集合中的每个项目创建单独的HTML页面,permalink(可选)允许您控制URL。

    第2步

    将这样的元数据添加到lettuce.md集合项的YAML前端:

        ---        
        parent-collection: salad
        ---
    

    如果lettuce.md属于多个食谱,则可以添加多个食谱。如果您需要说明,请务必在元数据下添加内容:

        ---
        parent-collection: 
         - salad
         - hamburguer
         - taco
        ---
    
        Lettuce is really good for your health, but it kinda sucks as a food.
    

    请注意,saladhamburguertaco的名称应与配方网址标题完全相同,否则无法正常工作(即greatrecipes.com/recipes/ {{1} })。如果您的食谱名称是一个句子,则用引号括起来。

    此变量稍后将被屏蔽,因此salad之类的名称将匹配parent-collection: The Amazing Souflè Français。然而,奇怪的事情发生了:当有疑问时,只需编写小型的the-amazing-soufle-francais

    这是 hacky 部分。

    第3步

    为您的食谱创建一个特定的布局(如salad)并添加下面的代码 - 这是我们将配料包含在配方页面中的地方。

    请记住您的食谱(_layout/recipe-page.html和朋友)应指向此布局。

    salad.md

    在这里,我们从URL中捕获配方的名称,并将其分配给 {% capture current_collection %}{{ page.url | remove: "recipes" | remove: "/" | remove: " " }}{% endcapture %} 变量。确保将其放在一行中,因为将其设置为多行将为捕获的字符串添加一堆空格并将代码分解为10/10次。 疯狂。

    current_collection

    匹配此配方的成分,并将其中的每一个都包含在布局中。云南省社会科学院!

    每种食材都应该出现在食谱文本的正下方。

    请注意,您不会像在问题中描述的那样在食谱文本中拉 成分,而是将其包含在布局之后。据我所知,你可以在你的帖子/收藏文本的中间中添加 - 除非你通过Jekyll的自定义插件破解你的方式。

    这样做的方法肯定不那么简单,但这就是我的工作方式。如果您在为自己尝试此操作时遇到任何问题,请告诉我 - 其他任何人都可以随意纠正我。

    我在我的网站上进行了此设置 - 请自行查看the layout where I pull in my child collection itemsthe metadata on the child collection items

答案 1 :(得分:0)

我在寻找解决此问题的方法时偶然发现了这个问题,这就是我最终做的事情。我想我会发布它,以防其他人正在寻找一种方法来一次性完成此操作并且不想创建整个集合。

在您想要包含其他帖子的帖子中,您可以使用 Jekyll 的 where 过滤器来获取对您其他帖子的引用,然后打印该帖子的内容:

---
layout: whatever
---

Your original post's content here.

{% assign myOtherPost = site.posts | where:"url", "/other/post/url" | first %}

{{ myOtherPost.content }}

Some more content here.