Как использовать Jekyll для сортировки сообщений по пользовательской переменной YAML? - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь создать страницу на своем сайте Jekyll, которая будет отображать пользовательскую переменную и перечислять сообщения, содержащие эту пользовательскую переменную.

Я создал блог с обзором фильмов, используя шаблон, созданный Тиаго Россенером: Шаблон Тиаго: https://github.com/thiagorossener/jekflix-template Мой сайт: https://www.howdareyoureview.com/

в каждом посте я определил пользовательские переменные в области YAML, которые относятся к деталям фильма (например, актер, режиссерская оценка и т. Д.)

например:

---
layout: post
title: "Baby Driver"
image: 'https://res.cloudinary.com/how-dare-you-review/image/upload/c_fill,h_399,w_760/v1529865791/baby-driver.png'
tags:
- action
score: 72
director: Edgar Wright
written-by: Edgar Wright
staring: 
- Ansel Elgort
- Lily James
- Eiza González
- Jon Hamm
- Jamie Foxx
---

Я хочу создать страницы в точности как страницы тегов, которые уже существуют в этом шаблоне: https://www.howdareyoureview.com/tags/

за исключением того, что я хотел бы сортировать по директорам, по ролям и т. Д. Вместо тегов. страница тегов создается с использованием следующего кода в файле tags.html:

---
layout: minimal
title: "#Tags"
permalink: /tags/index.html
description: "Procure por sua #tag favorita."
---

<div class="tags">
{% assign tags_list = site.tags %}
  {% if tags_list.first[0] == null %}
    {% for tag in tags_list %}
        <a href="#{{ tag | slugify }}">{{ tag }}</a>
    {% endfor %}
  {% else %}
    {% for tag in tags_list %}
        <a href="#{{ tag[0] | slugify }}">{{ tag[0] }}</a>
    {% endfor %}
  {% endif %}
{% assign tags_list = nil %}
</div>

{% for tag in site.tags  %}
    <div class="tag-wrapper">
    <span class="tag-title" id="{{ tag[0] | slugify }}">{{ tag[0] }}</span>
    <ul class="post-list">
        {% assign pages_list = tag[1] %}
        {% for post in pages_list reversed %}
            {% if post.title != null %}
            {% if group == null or group == post.group %}
            <li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
            {% endif %}
            {% endif %}
        {% endfor %}
        {% assign pages_list = nil %}
        {% assign group = nil %}
    </ul>
</span>
</div>
{% endfor %}

Чтобы добиться этого для пользовательских переменных, которые я создал, я попытался заменить «tag / tags» на Director и сохранить файл в корневой каталог как «directors.html», но страница пуста.

---
layout: minimal
title: "#Directors"
permalink: /directors/index.html
description: "Procure por sua director favorita."
---
<div class="directors">
{% assign directors_list = site.director %}
  {% if directors_list.first[0] == null %}
    {% for director in directors_list %}
        <a href="#{{ tag | slugify }}">{{ director }}</a>
    {% endfor %}
  {% else %}
    {% for director in directors_list %}
        <a href="#{{ director[0] | slugify }}">{{ director[0] }}</a>
    {% endfor %}
  {% endif %}
{% assign directors_list = nil %}
</div>

{% for director in site.director  %}
    <div class="director-wrapper">
    <span class="director-title" id="{{ tag[0] | slugify }}">{{ director[0] }}</span>
    <ul class="post-list">
        {% assign pages_list = director[1] %}
        {% for post in pages_list reversed %}
            {% if post.title != null %}
            {% if group == null or group == post.group %}
            <li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
            {% endif %}
            {% endif %}
        {% endfor %}
        {% assign pages_list = nil %}
        {% assign group = nil %}
    </ul>
</span>
</div>
{% endfor %}

Поскольку код и концепция точно такие же, как и при заполнении тегов - я не могу понять, почему это не работает - я надеюсь, что кто-то может помочь!

Вот мой каталог для справки: https://github.com/howdareyoureview/howdareyoureview.github.io

1 Ответ

0 голосов
/ 01 июля 2018

На странице тегов используется site.tags, который представляет собой массив site.posts, сгруппированный по тегам, созданный Jekyll во время генерации.

Вы пытаетесь выполнить репликацию с таргетингом на site.directors, но этот ожидаемый массив не существует. Но вы можете использовать фильтр group_by для достижения своей цели.

<div class="directors">
  {% assign directors = site.posts | group_by: 'director' | sort: "name" %}
  {% for director in directors %}
    {% if director.name == "" %}
      {% assign name = "Anonymous" %}
    {% else %}
      {% assign name = director.name %}
    {% endif %}
    <a href="#{{ name | slugify }}">{{ name }}</a>
  {% endfor %}
</div>

{% for director in directors %}
<div class="director-wrapper">
  {% if director.name == "" %}
    {% assign name = "Anonymous" %}
  {% else %}
    {% assign name = director.name %}
  {% endif %}
  <span class="director-title" id="{{ name | slugify }}">{{ name | debug }}</span>
    <ul class="post-list">
      {% assign pages_list = director.items %}
      {% for post in pages_list reversed %}
        <li><a href="{{ site.url }}{{ post.url }}">{{ post.title }}<span class="entry-date"><time datetime="{{ post.date | date_to_xmlschema }}" itemprop="datePublished">{{ post.date | date: "%m/%d/%Y" }}</time></a></li>
      {% endfor %}
    </ul>
  </span>
</div>
{% endfor %}

Совет. Вы можете использовать фильтр проверки для отладки ваших переменных. {{ myvar | inspect }}

...