Прокладка URL-адрес 1 слово в Jekyll


Я создаю блог Jekyll, и я столкнулся с проблемой с постоянными ссылками.

Мои постоянные ссылки на сообщения в блоге устанавливаются следующим образом: _конфигурация.yml:

permalink: /:page/:categories/:title

Он выводится следующим образом при переходе к сообщению в блоге:

http://localhost:4000/blog/travel/netherlands-trip-prequesites/

У меня есть несколько статических страниц на сайте: Блог, путешествия

Переменная page.url выводит этот url: /blog/travel/netherlands-trip-prequesites

Код, который моя панель навигации использует для выделения текущей страницы (придавая ей" активный " класс):

          {% assign url = page.url|remove:'index.html' %}
          {% for nav in site.navigation %}
            {% if nav.href == url %}
              <li class="active"><a href="{{nav.href}}">{{nav.name}}</a></li>
            {% else %}
              <li><a href="{{nav.href}}">{{nav.name}}</a></li>
            {% endif %}
          {%endfor%}

Это работает отлично подходит при переходе на статические страницы, однако, когда я нажимаю на сообщение в блоге, оно не выделяет правильную статическую страницу. (экс.: Если я перейду к сообщению в блоге с url /blog/smth/title, он должен автоматически выделить "блог" в моей навигации. Когда я перейду к /travel/smth/title, он должен выделить "путешествие")

То, что я хотел бы сделать, - это удалить выходные данные страницы .url к его первой части. Например, я хотел бы сделать следующий вывод

/blog/travel/netherlands-trip-prequesites

Вниз to

/blog/

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

4 6

4 ответа:

Мне удалось решить ее с помощью трех фильтров:

{{ page.url | replace:'/',' ' | truncatewords: 1 | remove:'...' }}

page.url выходные данные: /page/cat/title, затем replace удаляет прямые косые черты, производящие: page cat title. truncatewords усекает строку до одного слова, производя: page... (по какой-то причине после оставшегося слова вставляются три точки). После всего этого мне нужно было только удалить эти точки с remove и вуаля, моя последняя строка: page.

Надеюсь, что это помогает кто-то.

Самый простой способ-использовать split:

{{ page.url | split:'/' | first }}

Это даст вам содержимое URL-адреса до первого символа /.

Ответ, предоставленныйPeterInvincible , был почти идеальным, однако нет необходимости подключать трубопровод к remove...

Следующее также произведет желаемый результат

{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}

И сохранить его в переменной используйте capture перенаправление

 {{ capture url_base }}{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}{{ endcapture }}

, который может быть вызван через {{url_base}} или смешан с другими вызовами обработки.

Также для путей к файлам вместо URL-адресов page.dir хорошо работает, если вы не используете настройки permalink для макета, проверьте gh-pages филиал (в частности _includes/nav_gen.html for functional, though rough'round the Edge, example) для размещенных примеров аналогичных примеров кода, связанных с жидким синтаксисом и другой магией.

Правки И Обновления

Вышеупомянутый связанный скрипт теперь живой/в основном работающий/модульный и автоматически обслуживающий разбираемые подкаталоги, просматриваемые в настоящее время на соответствующем сайте проекта https://s0ands0.github.io/Perinoid_Pipes/, предоставляющем примеры рекурсивного разбора каталогов. В том числе и моддинг практически на любую тему должен возможно, просто проверьте раздел комментариев вверху для распознанных в данный момент команд, которые могут быть переданы при вызове включения... на этой ноте включения и модуляризации вот как превратить приведенный выше пример кода для разбора каталогов в функцию

{% comment %}
    # Save this to _include/dir_path_by_numbers.html
    # import with the following assigning arguments if needed
    # {% include dir_path_by_numbers.html directory_argument_path="blog" directory_argument_depth=1 %}
{% endcomment %}
{% assign default_arg_directory_path = page.url %}
{% assign default_arg_directory_depth = 1 %}
{% if directory_argument_path %}
    {% assign directory_to_inspect = directory_argument_path %}
{% else %}
    {% assign directory_to_inspect = default_arg_directory_path %}
{% endif %}
{% if directory_argument_depth %}
    {% assign directory_to_inspect_depth = directory_argument_path %}
{% else %}
    {% assign directory_to_inspect_depth = default_arg_directory_depth %}
{% endif %}
{% comment %}
    # Defaults read and assigned now to output results
{% endcomment %}
{{ directory_to_inspect_depth | replace:'/',' ' | truncatewords: directory_to_inspect_depth,"" | remove_first: '/' | replace:' ','/' }}

Вышеупомянутые должны выводить длины пути к каталогу любого желаемого размера и, возможно, включать, как показано ранее, или, если вы чувствуете себя смелым, попробуйте то, что показано ниже; хотя для циклического и рекурсивного особенности посмотрите на связанный скрипт для того, как я работал вокруг ограничений размера стека.

{% capture dir_sub_path %}{{include dir_path_by_numbers.html directory_argument_path="blog" directory_argument_depth=1}}{% endcapture %}
Примечание выше - это просто предположение, непроверенное и, возможно, более ошибочное, чем сценарии, протестированные и размещенные публично... другими словами, вдохновение.

Простейшим способом было бы использование

if page.url contains

Пример:

<li class="{% if page.url contains '/docs/' %}current{% endif %}">
<a href="/docs/home/">Docs</a>