Добавить активный класс на текущую страницу архива выбранной категории в Jekyll

Я использую плагин для архивирования категорий для своего проекта Jekyll. Я хочу иметь меню списка категорий для каждой страницы архива категорий, чтобы пользователь мог перемещаться между различными архивами категорий. Я хотел бы добавить class="active" к ссылке на список категорий для текущей просматриваемой страницы архива категорий. У меня есть что-то подобное для навигации по сайту, сравнивая page.url с navitem.url, разница в том, что для навигации по сайту я указываю список navitem.urls в config.yml, а для архива категорий список имен категорий создается на основе категорий, указанных в самом сообщении, и у меня возникают проблемы с использованием {{ категория | первая переменная }} в операторе {% if %}, чтобы я мог либо проверить "==", либо "содержит"

Это то, что у меня есть на данный момент, но это не работает

<ul class="product-categories">
{% for category in site.categories %}
  {% if page.url == {{ category | first }} %}
    {% assign class = "active" %}
  {% else %}
    {% assign class = "" %}
  {% endif %}
<li>
  <a href="/{{ category | first }}/" class="{{ class }}">{{ category | first }}</a>
</li>
{% endfor %}

Please help =)


person ntnlbd    schedule 04.01.2017    source источник


Ответы (1)


Переменная класса ликвидности находится внутри цикла for, поэтому, когда вы используете ее за пределами области видимости, она также должна быть «содержит» вместо ==, потому что путь содержит больше символов, которых нет в категории.

<ul class="product-categories"> 
{% assign class = "" %}
{% for category in site.categories %}
{% assign cat=category|first %} 
{% if page.url contains cat %}
 {% assign class = "active" %} 
{% endif %} 
<li> 
<a href="/{{ category | first }}/" class="{{ class }}">{{ category | first }}</a>
 </li> 
{% endfor %}
person marcanuy    schedule 04.01.2017
comment
Боюсь, это не решит проблему. Неожиданный символ { в page.url содержит {{ category | first }} в /_layouts/category_archive.html - это предупреждение, которое я получаю, к текущей ссылке на страницу не добавляется активный класс. кажется, он не может прочитать {{ категория | first }} внутри оператора или, может быть, потому, что для содержимого требуется строка? Могу ли я преобразовать это в строку? - person ntnlbd; 05.01.2017
comment
@ntnlbd мой плохой, это должно выходить за пределы оператора if: {% assign cat=category|first %} then {% if page.url contains cat %} .. - person marcanuy; 05.01.2017
comment
легенда это сработало! {% for category in site.categories %} {% assign cat = category | first %} {% if page.url contains cat %} {% assign class = "active" %} {% else %} {% assign class = "" %} {% endif %} <li> <a href="/{{ category | first }}/" class="{{ class }}">{{ category | first }}</a> </li> {% endfor %} - person ntnlbd; 05.01.2017