34

在 Jekyll 布局中,有什么方法可以检测页面是普通页面还是帖子?我想显示帖子标题,但不显示页面标题。像这样:

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

6 回答 6

33

从 Jekyll 2.0 开始,你可以使用Front Matter Defaults

defaults:
  -
    scope:
      path: ""      # empty string for all files
      type: posts   # limit to posts
    values:
      is_post: true # automatically set is_post=true for all posts

然后您可以使用{{ page.is_post }}检查页面是否已发布。

不知道为什么 Jekyll 默认不设置page.type

于 2014-05-09T02:25:14.623 回答
12

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

---
layout: post
---

顺便说一句,确定页面类型的一种快速而肮脏(非常肮脏)的方法包括检查页面路径,通常帖子在_posts目录下,因此您可以检查它

{% if page.path contains '_posts' %}
This page is a post
{% else %}
This page is a normal page
{% endif %}
于 2013-09-08T09:08:18.603 回答
11

确定它是页面还是帖子的最简单和最直接的方法是使用page.id.

{% if page.id %}
    This is a post
{% endif %}

我个人在我的布局页面中使用这种方法来确定它是一个页面还是一个帖子,这样我就可以仅在它是一个帖子时显示指向上一个/下一个帖子的链接。

_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>
于 2017-01-28T23:42:40.160 回答
8

这是我解决问题的方法:

  1. _layouts/post从→创建符号链接_layouts/main
  2. 将帖子的布局更改为post

    ---
    layout: post
    ---
    
  3. 像这样添加一个 if 语句_layouts/main

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


解决这个问题的更好方法可能是使用包含并有两个独立的布局,就像@dafi 说的那样。

于 2013-09-08T16:56:12.947 回答
1

帖子带有date变量,而页面则没有。

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

{% if page.date %}
    <h2>{{ page.title }}</h2>
{% endif %}
于 2016-11-03T05:13:28.047 回答
-1

您可以设置类型,_config.yml默认为所有类型:

defaults:
  - scope:
      path: ""
      type: "pages"
    values:
      type: "pages"
于 2017-11-11T20:33:20.033 回答