Невозможно использовать concat для `nil` - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать соответствующий пост-файл для моего сайта Jekyll. Сайт основан на концепции участников, достопримечательностей и парков (каждый в виде коллекций). Каждый пост имеет много-много отношений. Я пытаюсь объединить массив каждого из атрибутов страницы (участников, достопримечательностей и парков) через массив oop и найти сообщения с общим количеством тегов.

Это довольно просто, но я Застревая с одним разделом, не у всех сообщений есть поля членов, достопримечательностей и парков, поэтому они возвращают nil, но для фильтра concat требуется массив. Я пытаюсь установить для переменной по умолчанию значение [], но оно всегда устанавливается на nil. Есть идеи?

Вот код:

<ul class="row">

    {% assign pageTags = [] %}{% if page.tags.first %}{% assign pageTags = page.tags %}{% endif %}
    {% assign pageAttractions = [] %}{% if page.attractions.first %}{% assign pageAttractions = page.attractions %}{% endif %}
    {% assign pageMembers = [] %}{% if page.members.first %}{% assign pageMembers = page.members %}{% endif %}
    {% assign pageParks = [] %}{% if page.parks.first %}{% assign pageParks = page.parks %}{% endif %}
    {% assign pageTagList = pageTags | concat: pageAttractions | concat: pageMembers | concat: pageParks %}

    {% for post in site.documents %}
        {% assign sameTagCount = 0 %}
        {% assign commonTags = '' %}
        {% assign postTags = [] %}{% if post.tags %}{% assign postTags = post.tags %}{% endif %}
        {% assign postAttractions = [] %}{% if post.attractions %}{% assign postAttractions = post.attractions %}{% endif %}
        {% assign postMembers = [] %}{% if post.members %}{% assign postMembers = post.members %}{% endif %}
        {% assign postParks = [] %}{% if post.parks %}{% assign postParks = post.parks %}{% endif %}

        {% assign postTageList =  postTags | concat: postAttractions | concat: postMembers | concat postParks %}

        {% if post.hidden == true %}
            {% break %}
        {% endif %}

        {% for tag in postTageList %}
            {% if post.url != page.url %}
                {% if pageTagList contains tag %}
                    {% assign sameTagCount = sameTagCount | plus: 1 %}
                    {% capture tagmarkup %} <span class="label label-default">{{ tag }}</span> {% endcapture %}
                    {% assign commonTags = commonTags | append: tagmarkup %}
                {% endif %}
            {% endif %}
        {% endfor %}

        {% if sameTagCount >= minCommonTags %}
                <li class="col-lg-4 col-md-12">
                    <div class="main-image">
                        <a href="{{ post.url }}" class="image" style="background-image: url('{{ post.image }}');"></a>
                    </div>
                    <h5>{{ post.categories | first }}</h5>
                    <h3><a href="{{ post.url }}">{{ post.title | replace: 'Review', '' }}</a></h3>
                    <p> 
                        {% if post.description %}
                            {{ post.description }}
                        {% else %}
                            {{ post.content | markdownify | strip_html | truncatewords: 20 }}
                        {% endif %}
                    </p>
                    <p>
                        <a href="{{ post.url }}" class="large">Read Article &rarr;</a>
                    </p>
                </li>
            {% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
            {% if maxRelatedCounter >= maxRelated %}
                {% break %}
            {% endif %}
        {% endif %}
    {% endfor %}
    </ul>

Репо можно посмотреть здесь: https://github.com/dtsn/jungleskipper/blob/feature/members/_includes/related-posts.html

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Из документации Liquid :

Вы не можете инициализировать массивы, используя только жидкость.

Однако вы можете использовать split фильтр для разбиения строки на массив подстрок.

0 голосов
/ 21 февраля 2020

Вы должны посмотреть на compact, который удаляет все значения nil из массива.

Вот ссылка на do c на shopify.

Пример из Документация по жидкости

Ввод:

{% assign site_categories = site.pages | map: "category" %}

{% for category in site_categories %}
- {{ category }}
{% endfor %}

Выход:

- business
- celebrities
-
- lifestyle
- sports
-
- technology

С компактом

Вход:

{% assign site_categories = site.pages | map: "category" | compact %}

{% for category in site_categories %}
- {{ category }}
{% endfor %}

Выход:

- business
- celebrities
- lifestyle
- sports
- technology
...