Как изменить страницы заказа по умолчанию в Jekyll?
Мой блог построен с помощью Jekyll на Github. В панели навигации порядок по умолчанию: Страницы, Сообщения, О, Архивы. Я хочу изменить список на Страницы, Архивы, О, Сообщения. Что мне делать?
Я думаю, что это связано с кодом ниже
{% assign pages_list = site.pages %}
Я думаю, что site.pages
- это то, что я должен изменить, но я не знаю как.
Ответы
Ответ 1
Порядок вашего навигационного меню определяется шаблоном HTML в _layout
(который может вытягивать фрагменты HTML из _includes
.
Похоже, что ваш навигатор программно генерируется из списка страниц, представленных на сайтах site.pages, используя код жидкости
{% assign pages_list = site.pages %}
Если у вас есть только небольшое количество страниц, вы можете просто написать список вручную. site.pages
- это алфавитный список всех страниц на Jekyll. Ничто не останавливает вас от просто жесткого кодирования:
<div class="navbar" id="page-top">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="/">EverCoding.net</a>
<ul class="nav">
<li><a href="/pages.html">Pages</a></li>
<li><a href="/archive.html">Archive</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/messages.html">Messages</a></li>
В то время как я предполагаю, что у вас есть этот список, сгенерированный программным путем, возможно, следуя тому, как Jekyll-bootstrap делает с кодом жидкости:
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="{{ HOME_PATH }}">{{ site.title }}</a>
<ul class="nav">
{% assign pages_list = site.pages %}
{% assign group = 'navigation' %}
{% include JB/pages_list %}
</ul>
</div>
</div>
</div>
Код жидкости в этом втором примере удобен, если вы действительно хотите каждый раз определять меню, но если у вас есть статическое меню в статическом порядке, вы, вероятно, лучше всего его кодируете вручную, как в моем первом примере, а не изменение кода жидкости для сортировки.
Если бы вы могли ссылаться на источник Jekyll, а не на опубликованный блог, мы могли бы быть более конкретными.
Ответ 2
Вы можете создать собственный порядок пунктов меню, например:
- В начале страницы добавьте поле заказа (вы можете назвать его по своему усмотрению)
---
layout: default
published: true
title: Page title
order: 1
---
- При получении страниц примените фильтр сортировки
{% assign sorted_pages = site.pages | sort:"order" %}
{% for node in sorted_pages %}
<li><a href="{{node.url}}">{{node.title}}</a></li>
{% endfor %}
Вы получите упорядоченный (ASC) список страниц, основанный на значении поля 'order', которое вы добавляете на каждую страницу.
Ответ 3
Обновление. Некоторые функции упорядочения, похоже, были добавлены в Jekyll: https://github.com/plusjade/jekyll-bootstrap/commit/4eebb4462c24de612612d6f4794b1aaaa08dfad4
Обновление: посмотрите комментарий Энди Джексона ниже - "имя", возможно, потребуется изменить на "путь".
Кажется, это работает для меня:
{% assign sorted_pages = site.pages | sort:"name" %}
{% for node in sorted_pages %}
<li><a href="{{node.url}}">{{node.title}}</a></li>
{% endfor %}
name
- имя файла. Я переименовал страницы в 00-index.md
, 01-about.md
и т.д. Сортировка работала, но страницы были сгенерированы с этими префиксами, которые выглядели уродливо, особенно для 00-index.html.
Чтобы исправить это, я переопределяю permalinks:
---
layout: default
title: News
permalink: "index.html"
---
К сожалению, это не будет работать с пользовательскими атрибутами, потому что они недоступны в качестве методов в классе Page:
{% assign sorted_pages = site.pages | sort:"weight" %} #bummer
Ответ 4
Я сделал файл pages.yml в каталоге _data, он похож на:
- url: pages/test.html
title: Pages
group: navigation
- url: pages/front.html
title: Front
group: navigation
И я изменил default.html(с сайта site.pages на site.data.pages):
<ul class="nav">
{% assign pages_list = site.data.pages %}
{% assign group = 'navigation' %}
{% include JB/pages_list %}
</ul>
И теперь я могу использовать этот файл yml для меню.
Ответ 5
Вы можете увидеть документацию: http://jekyll.tips/jekyll-casts/navigation/
Есть хорошие примеры и объяснения с navigation_weight.
---
layout: page
title: About
permalink: /about/
navigation_weight: 10
---
Для минимумов:
<div>
{% assign navigation_pages = site.pages | sort: 'navigation_weight' %}
{% for p in navigation_pages %}
{% if p.navigation_weight %}
{% if p.title %}
<a class="page-link" href="{{ p.url | relative_url }}">{{ p.title | escape }}</a>
{% endif %}
{% endif %}
{% endfor %}
</div>
Ответ 6
Я использую Jekyll v2.5.3, и вы также можете указать свои фактические файлы разметки (закажите их таким образом), и поскольку вы используете блок Front Matter, вы все равно можете сохранить заголовки и постоянные ссылки, как вы того захотите.
Синтаксический анализатор упорядочивает ссылки на страницы таким образом.
То есть:.
01_about.md
02_photos.md
03_projects.md
99_contact.md
Ответ 7
Ты был на правильном пути. Вы можете сортировать по пользовательской переменной с именем, например, "order".
В header.html вставить и дополнительную строку:
{% assign pages_list = (site.pages | sort: 'order') %}
Затем замените site.pages на pageslist в инструкции for:
{% for my_page in pages_list %}
{% if my_page.title %}
<a class="page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}</a>
{% endif %}
{% endfor %}
Затем добавьте "порядок" в передний элемент YAML для каждой страницы и установите для него подходящее значение:
---
layout: page
title: About
permalink: /about/
order: 0
---
Ответ 8
Шаблон Jekyll Bootstrap 3 требует включения group navigation
в заголовок Jekyll. Основываясь на ответе @Wojtek, вы можете изменить JB3 pages_list, чтобы использовать это поле group
для фильтрации и сортировки.
Перед вызовом pages_list сортируйте по группе:
{% assign sorted_pages = site.pages | sort:"group" %}
Затем просто измените одну строку в списке страниц:
{% if group == null or group == node.group %}
→ {% if group == null or node.group contains group %}
Теперь вы можете указать группу navigation-00
, navigation-01
, не переименовывать свои файлы или настраивать любые постоянные ссылки, и вы получите бесплатную сортировку.
Ответ 9
Я сделал простой плагин некоторое время назад для сортировки страниц в соответствии с массивом page_order
, который вы можете определить _config.yml
:
pages_order: ['index', 'summary', 'overview', 'part1', 'part2', 'conclusion', 'notes']
Он предоставляет page.prev
и page.next
в шаблонах, чтобы разрешить навигацию:
{% if page.prev %}
<a id="previous-page" href="{{page.prev}}.html">Previous</a>
{% endif %}
{% if page.next %}
<a id="next-page" href="{{page.next}}.html">Next</a>
{% endif %}
Примечание. Не работает на страницах Github.