在 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
。
在前端声明一个帖子布局还不够吗?如果您的帖子使用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>
这是我解决问题的方法:
_layouts/post
从→创建符号链接_layouts/main
将帖子的布局更改为post
:
---
layout: post
---
像这样添加一个 if 语句_layouts/main
:
{% if page.layout == 'post' %}
<h2>{{ page.title }}</h2>
{% endif %}
解决这个问题的更好方法可能是使用包含并有两个独立的布局,就像@dafi 说的那样。
帖子带有date
变量,而页面则没有。
虽然不是防弹的,但此解决方案不需要额外的配置:
{% if page.date %}
<h2>{{ page.title }}</h2>
{% endif %}
您可以设置类型,_config.yml
默认为所有类型:
defaults:
- scope:
path: ""
type: "pages"
values:
type: "pages"