Jekyll 杰基尔&x2014;如果页面是帖子,是否更改布局?

Jekyll 杰基尔&x2014;如果页面是帖子,是否更改布局?,jekyll,liquid,Jekyll,Liquid,在Jekyll布局中,是否有任何方法可以检测该页面是正常页面还是帖子?我想显示文章标题,但不是页面标题。像这样: {% if page.is_post? %} <h2>{{ page.title }}</h2> {% endif %} {{ content }} {%if page.is_post?%} {{page.title}} {%endif%} {{content}} 在前面声明帖子布局是不够的? 如果您的帖子使用了post布局,您可以确定该页面是帖子,

在Jekyll布局中,是否有任何方法可以检测该页面是正常页面还是帖子?我想显示文章标题,但不是页面标题。像这样:

{% if page.is_post? %}
    <h2>{{ page.title }}</h2>
{% endif %}
{{ content }}
{%if page.is_post?%}
{{page.title}}
{%endif%}
{{content}}

在前面声明帖子布局是不够的? 如果您的帖子使用了
post
布局,您可以确定该页面是帖子,并且不需要添加额外的逻辑

---
layout: post
---
顺便说一句,确定页面类型的一种快速而肮脏(非常肮脏)的方法是检查页面路径,通常帖子在
\u posts
目录下,因此您可以检查它

{% if page.path contains '_posts' %}
This page is a post
{% else %}
This page is a normal page
{% endif %}

下面是我如何解决这个问题的:

  • \u layouts/post
    → <代码>\u布局/main
  • 将帖子布局更改为
    post

    ---
    layout: post
    ---
    
  • \u layouts/main
    中添加if语句,如下所示:

    {% if page.layout == 'post' %}
        <h2>{{ page.title }}</h2>
    {% endif %}
    
    {%if page.layout='post%}
    {{page.title}}
    {%endif%}
    


  • 解决这个问题的更好方法可能是使用includes,并有两个单独的布局,如@dafi所说。

    自从Jekyll 2.0以来,您可以使用:

    然后您可以使用
    {{page.is_post}}
    检查页面是否为post


    不知道为什么Jekyll不设置
    页面。默认情况下键入

    帖子带有
    日期变量,而页面没有

    虽然不是防弹的,但此解决方案不需要额外配置:

    {% if page.date %}
        <h2>{{ page.title }}</h2>
    {% endif %}
    
    {%if page.date%}
    {{page.title}}
    {%endif%}
    
    确定是页面还是帖子的最简单、最直接的方法是使用
    page.id

    {% if page.id %}
        This is a post
    {% endif %}
    
    我个人在我的版面页面中使用这种方法来确定它是一个页面还是一篇文章,这样我就可以只在它是一篇文章的情况下显示到上一篇/下一篇文章的链接

    \u layouts/default.html

    <!DOCTYPE html>
    <html lang="en">
    
    {% include head.html %}
    
    <body>
    
    {% include header.html %}
    
    {{ content }}
    
    <!-- If this is a post, show previous/next post links -->
    {% if page.id %}
    
    {% if page.previous.url %}
    <a href="{{page.previous.url}}">{{page.previous.title}}</a>
    {% endif %}
    
    {% if page.next.url %}
    <a class="button is-link ellipsis" title="{{page.previous.title}}" href="{{page.next.url}}">{{page.next.title}}</a>
    {% endif %}
    
    {% endif %}
    
    {% include footer.html %}
    
    </body>
    </html>
    
    
    {%include head.html%}
    {%include header.html%}
    {{content}}
    {%if page.id%}
    {%if page.previous.url%}
    {%endif%}
    {%if page.next.url%}
    {%endif%}
    {%endif%}
    {%include footer.html%}
    
    您可以在
    \u config.yml
    中设置所有类型的默认值:

    defaults:
      - scope:
          path: ""
          type: "pages"
        values:
          type: "pages"
    

    我的布局是大约50行HTML,所以我不想要两个只相差一行的副本。谢谢你提供的信息,你给了我一个方法@乔希:你可以把一个版面应用到另一个版面上。帖子还带有一个
    id
    变量。我个人更喜欢使用
    page.id
    来检查它是否是一篇文章。在回答发布的问题时,它非常适合有条件地显示内容——谢谢!(不确定为什么需要否决此项,而有些人似乎喜欢这样做。)集合中的所有文档也都有id,因此,如果您的网站有非帖子的集合,则此方法不起作用。@kslstn您可以使用
    page.collection
    检查它是帖子还是集合。例如,如果它是一个集合,则以下条件为真;如果它是一篇文章,则以下条件为假:
    {%if page.id和page.collection%}
    @kimbaudi,除非你在集合中有文章:)我没有创建符号链接,步骤3对我来说很好:)
    defaults:
      - scope:
          path: ""
          type: "pages"
        values:
          type: "pages"