Мне так и не удалось заставить split
работать должным образом, но панировочные сухари все еще возможны .Следующее адаптировано из моего кода в этом ответе (обратите внимание на раздел, который должен быть изменен в операторе if
и что он является читаемой версией и работает не совсем так, как ожидалось).
{% capture url_parts %} {{ page.url | remove: "/index.html" | replace:'/'," " }}{% endcapture %}
{% capture num_parts %}{{ url_parts | number_of_words }}{% endcapture %}
{% assign previous="" %}
{% if num_parts == "0" %}
<Handle being at the top of the site (i.e. "site.com/") here>
{% else %}
{% for unused in page.content limit:num_parts %}
{% capture first_word %}{{ url_parts | truncatewords:1 | remove:"…"}}{% endcapture %}
{{ first_word }} »
{% capture url_parts %}{{ url_parts | remove_first:first_word }}{% endcapture %}
{% endfor %}
{% endif %}
Если пользователь находится на /a/b/c.html
, это напечатает a » b » c »
, если они на /a/b/
(или эквивалентно /a/b/index.html
), он просто напечатает a » b »
.
По крайней мере, он будет закрытк тому же: для файла Markdown между каждым выводом first_word
слишком много новых строк, поэтому они считаются отдельными абзацами, и вывод будет (это не проблема в файле HTML, но тогда нужно больше теговдля правильной работы):
a »
b »
c »
Эту проблему можно решить, поместив весь цикл for в одну строку (это код, который следует использовать):
{% capture url_parts %} {{ page.url | remove: "/index.html" | replace:'/'," " }}{% endcapture %}
{% capture num_parts %}{{ url_parts | number_of_words }}{% endcapture %}
{% assign previous="" %}
{% if num_parts == "0" %}
<Handle being at the top of the site (i.e. "site.com/") here>
{% else %}
{% for unused in page.content limit:num_parts %}{% capture first_word %}{{ url_parts | truncatewords:1 | remove:"..."}}{% endcapture %}{{ first_word }} »{% capture url_parts %}{{ url_parts | remove_first:first_word }}{% endcapture %}{% endfor %}
{% endif %}
(Обратите внимание: page.content
в цикле for - это просто дать что-то для перебора, волшебство делает limit:num_parts
. Однако это означает, что если page.content
имеет меньше абзацев, чем num_parts
, не все хлебные крошки появятся, если это вероятноможно определить переменную сайта в _config.yml
, например breadcrumb_list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
, и использовать site.breadcrumb_list
в качестве заполнителя вместо page.content
.(Поднято из моего другого ответа.))
Вот пример (он не использует точно такой же код, как указано выше, но это всего лишь несколько небольших модификаций, и он находится вHTML-файл, поэтому проблема с новыми строками, создающими абзацы, отсутствует).