Относительный URL-фильтр Jekyll / Liquid разрывает ссылки - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь использовать relative_url в большинстве ссылок моей темы Jekyll, поэтому, если кто-то хочет, чтобы эта тема работала в подкаталоге, он может это сделать. У меня проблема со списком категорий поста, каждая из которых должна ссылаться на архив.

В _layouts / post. html У меня такой код:

{% if site.data.settings.categories.active %}
  {% include categories.html %}
{% endif %}

категории. html имеет этот код:

<div class="categories">
    <span><p>Categories:</p>
    {% if post %}
      {% assign categories = post.categories %}
    {% else %}
      {% assign categories = page.categories %}
    {% endif %}
    {% for category in categories %}
      <a href="{{ "/categories/#{{category | slugify}}" | relative_url}}">{{category}}</a>
      {% unless forloop.last %}&nbsp;{% endunless %} 
    {% endfor %}
  </span>
</div>

Вот проблема:

 <a href="{{ "/categories/#{{category | slugify}}" | relative_url}}">{{category}}</a>

Каким-то образом это возвращает URL-адрес текущего сообщения.

<a href="/categories/#{{category | slugify}}">{{category}}</a>

Это возвращает правильную ссылку, но не работает, если сайт находится в подкаталоге.

Почему он возвращает URL-адрес сообщения?

1 Ответ

1 голос
/ 25 мая 2020

Здесь есть несколько проблем.

Во-первых, Liquid не оценивает вложенные конструкции. Следовательно, следующий код:

{{ "/categories/#{{category | slugify}}" | relative_url}}

необходимо переписать в:

{% capture url %}/categories/{{ category | slugify }}{% endcapture %}
{{ url | relative_url }}

Во-вторых, нет глобального объекта post. Поэтому {% if post %} всегда будет оценивать отрицательно. т.е. он избыточен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...