Прокладка 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 ответа:
Мне удалось решить ее с помощью трех фильтров:
{{ 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 %}