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 %}
これが私が問題を解決した方法です:
_layouts/post
→_layouts/main
からシンボリックリンクを作成します投稿のレイアウトをpost
に変更します。
---
layout: post
---
次のように_layouts/main
にifステートメントを追加します。
{% if page.layout == 'post' %}
<h2>{{ page.title }}</h2>
{% endif %}
これを解決するより良い方法は、インクルードを使用して、@ dafiが言ったように2つの個別のレイアウトを用意することです。
ページまたは投稿が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>
投稿にはdate
変数が付いていますが、ページにはありません。
完全ではありませんが、このソリューションでは追加の構成は必要ありません。
{% if page.date %}
<h2>{{ page.title }}</h2>
{% endif %}