Include 杰基尔:把一篇文章放在另一篇文章里

Include 杰基尔:把一篇文章放在另一篇文章里,include,markdown,jekyll,yaml-front-matter,Include,Markdown,Jekyll,Yaml Front Matter,Jekyll是否提供了将一篇文章包含在另一篇文章中的方法?我知道这听起来有点愚蠢,但我正在将其用于烹饪/食谱网站。我的一些食谱是由成分组成的,或者其他更小的食谱 我正在寻找一种方法,包括在另一个帖子,模板和所有完整的帖子一小撮。这可能吗 我在谷歌上搜索了很多次,发现我只能在一个页面中包含内容,而不是帖子,而且它没有使用默认的液体模板,只是简单的标记 想法?我在我的网站上用Jekyll的解决方案解决了一个与你类似的问题 集合在Jekyll中仍然是一个实验性的特性,我使用的解决方案本身就非常粗糙,但

Jekyll是否提供了将一篇文章包含在另一篇文章中的方法?我知道这听起来有点愚蠢,但我正在将其用于烹饪/食谱网站。我的一些食谱是由成分组成的,或者其他更小的食谱

我正在寻找一种方法,包括在另一个帖子,模板和所有完整的帖子一小撮。这可能吗

我在谷歌上搜索了很多次,发现我只能在一个页面中包含内容,而不是帖子,而且它没有使用默认的液体模板,只是简单的标记

想法?

我在我的网站上用Jekyll的解决方案解决了一个与你类似的问题

集合在Jekyll中仍然是一个实验性的特性,我使用的解决方案本身就非常粗糙,但是如果你不太疯狂的话,它是可以管理的

欲了解更详细、更友好的收藏介绍

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

正如Ben Balter在上面的链接中提到的那样,“如果人们将博客帖子用于非博客帖子,那么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 %}