#jekyll #github-pages #liquid
#jekyll #github-страницы #жидкость
Вопрос:
На главной странице моего сайта я показываю несколько последних сообщений:
{% for post in posts limit: 6 %}
...
{% endfor %}
Это работает нормально.
Недавно я вернулся и отредактировал несколько старых постов, и я хочу, чтобы они отображались в этом списке на главной странице.
Я не хочу менять их дату. Вместо этого я добавлял новую lastUpdated
переменную к каждой записи по мере ее редактирования с указанием даты, когда я ее редактировал.
layout: example
lastUpdated: 2020-09-07
---
Итак, теперь я хочу изменить код на моей главной странице, чтобы он сортировался по lastUpdated
, если он есть в публикации, а в противном случае он должен сортироваться по date
.
Я попробовал это:
{% assign posts = site.posts
| reverse
| sort: "lastUpdated"
| reverse %}
{% for post in posts limit: 6 %}
...
{% endfor %}
Я думал, что это сработало, но оказывается, что он сортирует все отредактированные записи (записи, содержащие lastEdited
переменные) на начало, за которыми следуют вновь созданные записи. Я хочу, чтобы отредактированные записи и вновь созданные записи отображались в этом списке в зависимости от даты их «изменения».
Я попробовал это:
{% assign posts = site.posts
| sort: "lastUpdated or date" %}
{% for post in posts limit: 6 %}
...
{% endfor %}
Но это дает мне сообщения в порядке по умолчанию, предположительно потому, что "lastUpdated or date"
это недопустимое свойство.
Я также пробовал это:
{% assign posts = site.posts
| sort: "lastUpdated" or "date" %}
{% for post in posts limit: 6 %}
...
{% endfor %}
Но неудивительно, что это синтаксическая ошибка.
Есть ли простой способ сделать это, которого мне не хватает?
Ответ №1:
Как только я написал это, я поднаторел в создании решения, которое создает два массива, а затем объединяет их вместе на основе переменных lastUpdated
и date
.
{% assign createdPosts = site.posts %}
{% assign updatedPosts = site.posts | sort: "lastUpdated" | reverse %}
{% assign createdIndex = 0 %}
{% assign updatedIndex = 0 %}
{% for i in (1..10) %}
{% assign createdDate = createdPosts[createdIndex].date | date: "%Y-%m-%d" %}
{% assign updatedDate = updatedPosts[updatedIndex].lastUpdated | date: "%Y-%m-%d" %}
{% if createdDate > updatedDate or updatedDate == nil %}
// HTML for createdPosts[createdIndex]
{% assign createdIndex = createdIndex | plus:1 %}
{% else %}
// HTML for updatedPosts[updatedIndex]
{% assign updatedIndex = updatedIndex | plus:1 %}
{% endif %}
{% endfor %}
Следует отметить, что я не мог сравнить date
и lastUpdated
напрямую, потому что я получил эту ошибку: comparison of Date with Time failed
, поэтому мне пришлось преобразовать их оба в строки.
Это кажется довольно сложным, поэтому я мог бы в конечном итоге вернуться и заполнить каждый пост lastUpdated
, чтобы все было просто.