Подтвердить что ты не робот

Jekyll - Изменить макет, если страница - это сообщение?

В макете Jekyll есть ли способ определить, является ли страница нормальной страницей или почтой? Я хочу отображать заголовки сообщений, но не названия страниц. Вот так:

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

Ответ 1

Начиная с 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 по умолчанию.

Ответ 2

Объявление макета сообщения в переднем деле недостаточно? Если в вашем сообщении используется макет post, вы уверены, что страница - это сообщение, и вам не нужно добавлять дополнительную логику

---
layout: post
---

Кстати, быстрый и грязный (очень грязный) способ определения типа страницы заключается в проверке пути к странице, обычно сообщения находятся в каталоге _posts, поэтому вы можете проверить его

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

Ответ 3

Вот как я решил проблему:

  • Создайте символическую ссылку из _layouts/post_layouts/main
  • Измените раскладку сообщений на post:

    ---
    layout: post
    ---
    
  • Добавьте оператор if в _layouts/main так:

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


Лучшим способом решить эту проблему может быть использование включает и имеет два отдельных макета, например, @dafi.

Ответ 4

Сообщения имеют переменную date, а страницы - нет.

Хотя это не пуленепробиваемое, это решение не требует дополнительной настройки:

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

Ответ 5

Самый простой и простой способ определить, использовать ли его страницу или сообщение 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>

Ответ 6

вы можете установить тип в _config.yml значения по умолчанию для всех типов:

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