Есть ли способ установить класс CSS на основе имени текущей страницы с использованием операторов Liquid и conditional?

#if-statement #jekyll #liquid #nav

#if-statement #jekyll #liquid #навигация

Вопрос:

Я пытаюсь преобразовать HTML-шаблон сайта (https://html5up.net/massively ) для темы, готовой к Jekyll, для использования на страницах GitHub (https://pages.github.com /) и в других местах, и у меня возникли небольшие проблемы с «Jekyllizing» панелью навигации темы.

В теме HTML был класс CSS под названием «active», который присваивается странице, которую просматривает пользователь (т. Е. если пользователь просматривал «/index.html «, навигация <li> по URL»/index.html «был бы класс «active», который выделял бы фон «текстового поля» белым на панели навигации и оставлял другие текстовые поля навигации в их первоначальных цветах).

Однако на сайте Jekyll мне не нужно (и не хочется) дублировать код навигации ( <ul><li></li></ul> ) и ссылки для каждой страницы, поэтому вместо этого все навигационные ссылки удобно расположены в «_includes/nav.html «где я могу вставить файл в любые HTML-макеты, используя Liquid (« {% include nav.html %} «).

Поскольку я включаю все навигационные ссылки в один HTML-файл, который в настоящее время доступен для всех страниц моего сайта (я «включил» nav.html в моем default.html макет, который я использую как минимум для двух страниц), я изо всех сил пытаюсь найти способ выделить страницу, на которой находится пользователь, изменив цвет фона элемента.

Я уже пробовал использовать условный оператор с Liquid, но я не знаю, что я делаю неправильно (возможно, я неправильно понимаю синтаксис или какая-то другая ошибка).

Вот исходный код (до того, как я его подделал):

 <nav id="nav">
    <ul class="links">
        <li><a href="{{ site.baseurl }}/index">Home</a></li>
        <li class="active"><a href="{{ site.baseurl }}/about">About</a></li>
    </ul>
    {% include social.html %}
</nav>
  

Я попытался «исправить» свою проблему, создав, как я надеялся, безошибочный условный оператор с Liquid, который проверял бы, был ли пользователь на странице с тем же именем, что и страница, которую я хотел выделить (т. Е. Находится ли пользователь на странице с именем / URL «index») (как показано здесьhttps://jekyllrb.com/docs/variables / в официальных документах Jekyll). Если да, то он представил бы ссылку с «активным» классом, а если нет, то он представил бы ссылку в {% else %} , у которого не было «активного» класса:

 <nav id="nav">
    <ul class="links">
        {% if page.name == /index.md %}
        <li class="active"><a href="{{ site.baseurl }}/index">Home</a></li>
        {% else %}
        <li><a href="{{ site.baseurl }}/index">Home</a></li>
        {% endif %}

        {% if page.name == /about.md %}
        <li class="active"><a href="{{ site.baseurl }}/about">About</a></li>
        {% else %}
        <li><a href="{{ site.baseurl }}/about">About</a></li>
        {% endif %}
    </ul>
    {% include social.html %}
</nav>
</nav>
  

Цель состоит в том, чтобы, например, слово «Home» выделялось, когда пользователь находится на странице «Home», и чтобы слово «About» выделялось, когда пользователь находится на странице «About», и так далее.

Заранее благодарю вас и приношу извинения, если этот вопрос сбивает с толку. Я в замешательстве, но я был бы рад уточнить.

РЕДАКТИРОВАТЬ Когда я модифицировал файл подобным образом, ссылки исчезли:

 <nav id="nav">
    <ul class="links">
        {% if page.name == index.html %}
        <li class="active"><a href="{{ site.baseurl }}/index">Home</a></li>
        {% endif %}
        {% if page.name == about.html %}
        <li class="active"><a href="{{ site.baseurl }}/about">About</a></li>
        {% endif %}
    </ul>
    {% include social.html %}
</nav>
  

Возможно, это потому, что я не вызываю файл index.html или about.html правильно? Я уже пробовал такие варианты, как index.md (файл на самом деле называется index.md , но я думал, что Jekyll изменит его на index.html ), /index.md , /index.html , index, /index , но ни один из них, похоже, не запускает оператор if.

Ответ №1:

Ура! Итак, что бы я ни делал, следующий код решает мою проблему:

 <nav id="nav">
    <ul class="links">
        {% if page.title == "Home" %}
        <li class="active"><a href="{{ site.baseurl }}/index">Home</a></li>
        {% else %}
        <li><a href="{{ site.baseurl }}/index">Home</a></li>
        {% endif %}
        {% if page.title == "About" %}
        <li class="active"><a href="{{ site.baseurl }}/about">About</a></li>
        {% else %}
        <li><a href="{{ site.baseurl }}/about">About</a></li>
        {% endif %}
    </ul>
    {% include social.html %}
</nav>
  

Я полагаю, что предыдущие if инструкции не сработали, потому что я не поместил index.html в кавычках («»). Вместо этого я проверил, совпадает ли заголовок страницы (на языке YAML) с заголовком, который я хотел изменить для класса на «active», и это сработало.