【发布时间】:2013-09-11 14:33:39
【问题描述】:
在 Jekyll 布局中,有什么方法可以检测页面是普通页面还是帖子?我想显示帖子标题,但不显示页面标题。像这样:
{% if page.is_post? %}
<h2>{{ page.title }}</h2>
{% endif %}
{{ content }}
【问题讨论】:
在 Jekyll 布局中,有什么方法可以检测页面是普通页面还是帖子?我想显示帖子标题,但不显示页面标题。像这样:
{% if page.is_post? %}
<h2>{{ page.title }}</h2>
{% endif %}
{{ content }}
【问题讨论】:
从 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。
【讨论】:
在front-matter中声明一个post layout还不够?
如果您的帖子使用post 布局,您可以确定该页面是帖子并且您不需要添加额外的逻辑
---
layout: post
---
顺便说一句,确定页面类型的一种快速而肮脏(非常肮脏)的方法是检查页面路径,通常帖子在_posts目录下,因此您可以检查它
{% if page.path contains '_posts' %}
This page is a post
{% else %}
This page is a normal page
{% endif %}
【讨论】:
确定是页面还是帖子的最简单直接的方法是使用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>
【讨论】:
page.collection 检查它是帖子还是集合。例如,如果是集合,则以下条件为真,如果是帖子,则为假:{% if page.id and page.collection %}
这是我解决问题的方法:
_layouts/post 创建符号链接 → _layouts/main
将帖子的布局改为post:
---
layout: post
---
在_layouts/main 中添加一个 if 语句,如下所示:
{% if page.layout == 'post' %}
<h2>{{ page.title }}</h2>
{% endif %}
解决这个问题的更好方法可能是使用包含并有两个独立的布局,就像 @dafi 说的那样。
【讨论】:
帖子带有date 变量,而页面则没有。
虽然不是防弹的,但这个解决方案不需要额外的配置:
{% if page.date %}
<h2>{{ page.title }}</h2>
{% endif %}
【讨论】:
id 变量。我个人更喜欢使用page.id 来检查它是否是一个帖子。
你可以设置类型,在_config.yml所有类型的默认值:
defaults:
- scope:
path: ""
type: "pages"
values:
type: "pages"
【讨论】: