Comment modifier les pages d'ordre par défaut dans Jekyll?
mon blog est construit avec Jekyll sur Github. Dans la barre de navigation, L'ordre par défaut est Pages, Messages, About, Archives. Je veux changer la liste des Pages, des Archives, des Propos, des Messages. Que dois-je faire?
je pense que c'est lié au code ci-dessous
{% assign pages_list = site.pages %}
je pense que site.pages
est ce que je devrais changer, mais je ne sais pas comment.
9 réponses
l'ordre de votre menu navbar est déterminé par le modèle HTML dans _layout
(qui peut tirer des fragments HTML de _includes
.
on dirait que votre navbar est générée programmatiquement à partir de la liste des pages fournies dans le site.pages utilisant le code liquide
{% assign pages_list = site.pages %}
si vous avez seulement un petit nombre de pages, vous pouvez préférer écrire la liste manuellement. site.pages
est la liste alphabétique de Jekyll de toutes les pages. Rien ne vous empêche de juste coder en dur plutôt ceci:
<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>
alors que je devine qu'en ce moment vous avez cette liste générée programmatiquement, peut-être en suivant la façon dont Jekyll-bootstrap fait avec du code liquide:
<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>
le code liquide dans ce second exemple est pratique si vous voulez vraiment déterminer le menu à chaque fois, mais si vous avez un menu statique dans un ordre statique, vous êtes probablement mieux le coder à la main comme dans mon premier exemple, plutôt que de modifier le code liquide pour trier.
si vous pouviez faire un lien vers la source Jekyll, plutôt que vers le blog publié, nous pourrions être plus précis.
vous pouvez créer l'ordre personnalisé de vos éléments de menu comme ceci:
1) dans vos pages avant ajouter le champ de commande (vous pouvez le nommer comme vous le présentez)
---
layout: default
published: true
title: Page title
order: 1
---
2) pour obtenir des pages, appliquez le filtre' sort'
{% assign sorted_pages = site.pages | sort:"order" %}
{% for node in sorted_pages %}
<li><a href="{{node.url}}">{{node.title}}</a></li>
{% endfor %}
vous finirez avec une liste de pages ordonnées (ASC), basée sur la valeur du champ 'order' que vous ajoutez à chaque page.
mise à jour: certaines fonctionnalités de commande semblent avoir été ajoutées à Jekyll: https://github.com/plusjade/jekyll-bootstrap/commit/4eebb4462c24de612612d6f4794b1aaaa08dfad4
mise à Jour: découvrez commentaire par Andy Jackson ci – dessous - "nom" peut être changé de "chemin".
Cela semble fonctionner pour moi:
{% assign sorted_pages = site.pages | sort:"name" %}
{% for node in sorted_pages %}
<li><a href="{{node.url}}">{{node.title}}</a></li>
{% endfor %}
name
est le nom du fichier. J'ai renommé pages en 00-index.md
,01-about.md
etc. Le tri a fonctionné, mais les pages ont été générées avec ces préfixes, qui avait l'air moche surtout pour 00-index.HTML.
Pour corriger que je remplace permaliens:
---
layout: default
title: News
permalink: "index.html"
---
malheureusement, cela ne fonctionnera pas avec les attributs personnalisés, parce qu'ils ne sont pas accessibles en tant que méthodes dans la classe de Page:
{% assign sorted_pages = site.pages | sort:"weight" %} #bummer
j'ai fait des pages.fichier yml dans le répertoire _data il est similaire:
- url: pages/test.html
title: Pages
group: navigation
- url: pages/front.html
title: Front
group: navigation
Et j'ai changé la valeur par défaut.html (à partir du site.les pages du site.données.pages):
<ul class="nav">
{% assign pages_list = site.data.pages %}
{% assign group = 'navigation' %}
{% include JB/pages_list %}
</ul>
Et maintenant je peux utiliser ce fichier yml pour le menu.
Vous avez pu voir la documentation: http://jekyll.conseils/jekyll-moulages de navigation//
il y a de bons exemples et explications avec navigation_weight.
---
layout: page
title: About
permalink: /about/
navigation_weight: 10
---
pour les minima:
<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>
J'utilise Jekyll v2.5.3 et vous pouvez également numéroter vos fichiers de markdown réels (les ordonner de cette façon) et puisque vous utilisez le bloc de matière de devant vous pouvez toujours garder les titres et permalinks que vous les voulez.
L'analyseur commandera les liens de votre page de cette façon.
I. e.:
01_about.md
02_photos.md
03_projects.md
99_contact.md
Jekyll Bootstrap 3 modèle exige d'inclure group navigation
dans L'en-tête Jekyll. En s'appuyant sur la réponse de @Wojtek, vous pouvez modifier pages_list de JB3 pour utiliser ce group
champ à filtrer et à trier.
avant d'appeler pages_list, Trier par groupe:
{% assign sorted_pages = site.pages | sort:"group" %}
alors, changez simplement une ligne dans pages_list:
{% if group == null or group == node.group %}
-> {% if group == null or node.group contains group %}
vous pouvez Maintenant spécifier le groupe navigation-00
,navigation-01
, sans avoir à renommer vos fichiers ou de configurer les permaliens, et vous obtenez le tri gratuitement.
Vous étiez sur la bonne voie. Vous pouvez sélectionner une variable personnalisée nommée, disons, 'ordre'.
Dans l'en-tête.code html d'insertion et de ligne supplémentaire:
{% assign pages_list = (site.pages | sort: 'order') %}
puis remplacer le site.pages avec pages_list dans l'instruction 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 %}
puis Ajouter 'ordre' dans la partie frontale de YAML pour chaque page, et lui donner une valeur appropriée:
---
layout: page
title: About
permalink: /about/
order: 0
---
j'ai fait un simple plugin il y a quelque temps pour trier les pages selon un page_order
tableau vous pouvez définir votre _config.yml
:
pages_order: ['index', 'summary', 'overview', 'part1', 'part2', 'conclusion', 'notes']
Il expose page.prev
et page.next
dans les gabarits pour permettre la navigation:
{% 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 %}
Note: ne fonctionne pas sur les Pages Github.