Как изменить страницы заказа по умолчанию в 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

Вы можете создать собственный порядок пунктов меню, например:

  1. В начале страницы добавьте поле заказа (вы можете назвать его по своему усмотрению)
    ---
    layout: default
    published: true
    title: Page title
    order: 1
    ---
    
  2. При получении страниц примените фильтр сортировки
    {% 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.