Мой breadcrumbs в шаблоне по умолчанию
Код, который построит breadcrumb, расположим в _includes/breadcrumb.htm, и подключим его к шаблону _layouts/default.html:
{% include breadcrumb.htm %}
Вот содержимое файла breadcrumb.htm:
[ 1]{% if page.url != "/" %}
[ 2] {% assign arr_pages = page.url | split: "/" %}
[ 3] {% assign last_page = page.url | split: "/" | last %}
[ 4] <p>
[ 5] {% for item in arr_pages %}
[ 6] {% if item == '' %}
[ 7] {% assign full_url = site.baseurl %}
[ 8] <a href="{{ full_url }}">home</a>
[ 9] {% else %}
[10] {% capture full_url %}{{ full_url }}/{{ item }}{% endcapture %}
[11] {% assign dir = item | remove: ".html" %}
[12] {% if dir == last_page %}
[13] / <span class="text-gray">{{ dir }}</span>
[14] {% else %}
[15] / <a href="{{ full_url }}">{{ dir }}</a>
[16] {% endif %}
[17] {% endif %}
[19] {% endfor %}
[20] </p>
[21]{% endif %}
Несколько слов для ясности
Итак, пусть, например, наш путь к текущей странице выглядит так: /reponame/first/second/third
Наш breadcrumb (цепочка страниц) будет выглядеть так:
home / first / second / third
, где каждая страничка, кроме последней, будет в виде ссылки на саму себя.
При этом, в служебной переменной site.baseurl
будет находиться /reponame (т.е. home), а в служебной переменной page.url
- цепочка пути /first/second/third.
Конечно же, вместо “home”, можно указывать, что угодно: “index”, “root”, изобразить в виде домика, или присвоить имя репозитория. Но в этом примере - это home.
Как работает код
- Проверяем, если это не первая (главная) страница, то выполняем код.
- Разделяем текущий URL страницы по слешу “/” и создаем массив
arr_pages=['','first','second','third']
. Важно, что первый элемент будет всегда пустой, т.к. мы разбиваем URL по слешам, а URL начинается со слеша! - В переменную
last_page
мы заносим имя последней страницы в цепочке, т.е. third. - Начинаем формировать и выводить код breadcrumb’а.
- Для каждого элемента массива
arr_pages
проверяем… - … пустой ли он? А первый элемент будет всегда пустым (см. п.2)
- Подготавливаем переменную
full_url
. Она будет поочередно принимать значение пути к каждой странице и ее первое значение всегда будетsite.baseurl
. Если мы укажем его как/
, то попадем в корень username.github.io, а нужно попасть на username.github.io/reponame, поэтому и корень для нас -site.baseurl
- Формируем и выводим первую ссылку - “home”.
- Если же текущий элемент массива
arr_pages
не пустой… - …мы продолжаем наращивать наш
full_url
: через слеш добавляем к нему имя текущей страницы. - Если она окажется последней - к ней будет добавлено расширениие “.html”, которое нам не нужно и будет только мешать при сравнении с
last_page
, поэтому, удаляем его, если оно есть. А имя текущей страницы записываем в переменнуюdir
. - Сравниваем, если текущая страница - последняя…
- … выводим только ее имя (без ссылки)
- Если нет…
- … формируем и выводим очередную ссылку
После перебора всех елементов массива arr_pages
, завершаем наш breadcrumb: п.20.