繁体   English   中英

Jekyll:在另一篇文章中包含一篇文章

[英]Jekyll: including a post inside another post

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

我正在寻找一种方法,将一些帖子包含另一篇帖子中,包括模板和所有内容。 这可能吗?

我进行了大量的谷歌搜索,发现我只能包含到页面中,不能发布,而且它没有使用默认的 liquid 模板,只是普通的 markdown。

想法?

我在网站上使用Jekyll的收藏来解决与您相似的问题。

收集仍然是Jekyll的一项试验性功能,而我使用的解决方案本身就是很棘手的,但是如果您对它不感兴趣的话,它是可以管理的。

有关收藏的更详细和友好的介绍, 这是一篇关于如何开始使用它们的好文章

我们需要记住的一件事是,对于这种情况,我们应该远离帖子。

正如本·巴尔特(Ben Balter)在上面的链接中提到的那样: “如果人们将博客文章用于非博客文章,那么Jekyll已经失败了” 食谱不是帖子 ,我们应尽可能避免使用它们。

话虽如此,这是我分三步走的方法:

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

  2. 找到一种将它们彼此关联的方法-确保“生菜”将列在“沙拉”下

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


第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应与食谱URL slug完全相同,否则将不起作用(即greatrecipes.com/recipes/ salad )。 如果您的食谱名称是句子,则将其用引号引起来。

稍后将对该变量进行标记,因此使用类似于parent-collection: The Amazing Souflè Français的名称parent-collection: The Amazing Souflè Français将匹配the-amazing-soufle-francais 尽管如此,还是发生了奇怪的事情:有疑问时,只要写些小粒salad

这是hacky部分。


第三步

为您的食谱创建特定的布局(例如_layout/recipe-page.html ),然后添加以下代码-这是我们将成分包括在食谱页面中的地方。

记住您的食谱( salad.md和朋友)应该指向此布局。

    {% capture current_collection %}{{ page.url | remove: "recipes" | remove: "/" | remove: " " }}{% endcapture %}

在这里,我们从URL捕获配方的名称,并将其分配给current_collection变量。 确保在一行中执行此操作,因为将其设置为多行将为捕获的字符串添加一堆空格,并破坏代码10/10次。 疯。

    <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 %}

匹配此食谱的成分,并将其中的每个成分都放入布局中。 好!

您的每种成分都应出现在您的食谱文字下方。

请注意,你不拉的配方里面的文字成分,如你在你的问题描述,但包括他们在之后的布局。 据我所知,您无法真正帖子/收藏夹文本的中间添加内容-除非您通过Jekyll的自定义插件来破解自己的方式。


当然,这样做的方式不那么简单,但这就是我的工作方式。 如果您发现自己尝试执行此操作遇到任何麻烦,请告诉我-其他任何人,请随时纠正我。

我将在我的站点中进行此设置-查看放置子集合项的布局以及子集合项本身的元数据

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

在您想包含其他帖子的帖子中,您可以使用 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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM