Jekyll - 如果页面是帖子,更改布局?

时间:2013-09-07 16:45:52

标签: jekyll liquid

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

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

6 个答案:

答案 0 :(得分:26)

自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

答案 1 :(得分:10)

在前面宣布一个帖子布局是不够的? 如果您的帖子使用post布局,则您确定该页面是帖子,而您无需添加额外的逻辑

---
layout: post
---
BTW一种快速而肮脏(非常脏)的方式来确定页面类型包括检查页面路径,一般帖子都在_posts目录下,所以你可以查看它

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

答案 2 :(得分:7)

以下是我解决问题的方法:

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

    ---
    layout: post
    ---
    
  4. _layouts/main中添加if语句,如下所示:

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

  5. 解决这个问题的一个更好的方法可能是使用包含两个单独的布局,比如@dafi说。

答案 3 :(得分:5)

确定其网页或帖子是否使用{% if page.id %} This is a post {% endif %} 的最简单,最直接的方法。

<!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 / default.html中

def permutations(lot):
    if not lot:
        yield []
    else:
        item, start, end = lot[0]
        for prefix_length in range(start, end+1):
            for perm in permutations(lot[1:]):
                yield [item]*prefix_length + [None] * (end - prefix_length) + perm

答案 4 :(得分:1)

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

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

{% if page.date %}
    <h2>{{ page.title }}</h2>
{% endif %}

答案 5 :(得分:-1)

您可以设置所有类型的_config.yml默认值类型:

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