Попытка написать панировочные сухари для осьминога и неудачи - PullRequest
0 голосов
/ 30 марта 2012

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

Но почему мой призыв к разделению не удался?

{% capture path %}
  {{ page.url | remove: ".html" | remove_first:"/" }}
{% endcapture %}
{% capture breadcrumbs %}
  {{ path | split:'/' }}
{% endcapture %}
{% for crumb in breadcrumbs %}
  {{ crumb }} » 
{% endfor %} 

Я загружаю это в github и просто ничего не получаю.

1 Ответ

1 голос
/ 30 марта 2012

Мне так и не удалось заставить 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:"&hellip;"}}{% endcapture %}
  {{ first_word }} &#187;
  {% 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 }} &#187;{% 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-файл, поэтому проблема с новыми строками, создающими абзацы, отсутствует).

...