web-dev-qa-db-ja.com

Jekyll —ページが投稿の場合、レイアウトを変更しますか?

Jekyllレイアウトで、ページが通常のページか投稿かを検出する方法はありますか?投稿のタイトルは表示したいが、ページのタイトルは表示したくない。このような:

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

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を設定しない理由はわかりません。

26
kavinyao

フロントマターで投稿レイアウトを宣言するだけでは不十分ですか?投稿がpostレイアウトを使用している場合、ページは投稿であり、ロジックを追加する必要はありません。

---
layout: post
---

ところで、ページタイプを特定するための迅速でダーティな(非常にダーティな)方法は、ページパスをチェックすることです。通常、投稿は_postsディレクトリ。これを確認できます。

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

これが私が問題を解決した方法です:

  1. _layouts/post_layouts/mainからシンボリックリンクを作成します
  2. 投稿のレイアウトをpostに変更します。

    ---
    layout: post
    ---
    
  3. 次のように_layouts/mainにifステートメントを追加します。

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


これを解決するより良い方法は、インクルードを使用して、@ dafiが言ったように2つの個別のレイアウトを用意することです。

7
Zaz

ページまたは投稿が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>
5
kimbaudi

投稿にはdate変数が付いていますが、ページにはありません。

完全ではありませんが、このソリューションでは追加の構成は必要ありません。

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