В макете 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, вы можете использовать Стандартные настройки по умолчанию:
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
---
Добавьте оператор if в _layouts/main
так:
{% if page.layout == 'post' %}
<h2>{{ page.title }}</h2>
{% endif %}
Лучшим способом решить эту проблему может быть использование включает и имеет два отдельных макета, например, @dafi.
Сообщения имеют переменную date
, а страницы - нет.
Хотя это не пуленепробиваемое, это решение не требует дополнительной настройки:
{% if page.date %}
<h2>{{ page.title }}</h2>
{% 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>
вы можете установить тип в _config.yml
значения по умолчанию для всех типов:
defaults:
- scope:
path: ""
type: "pages"
values:
type: "pages"