Table des matières
Mettre en oeuvre la pagination avec Jekyll et Bulma.
Optimisez la navigation de votre site avec une pagination fluide et élégante.
11 nov 2024 · 2 min ·
Introduction
Mettre en place une pagination simple et efficace avec Jekyll et mis en forme avec Bulma.
Mon besoin est :
- Afficher systématiquement le lien vers la premiere et la dernière page, sous forme de numéro et sous forme d’icône
- Afficher les liens vers la page suivante et la page précédente
- Afficher quelques pages avant et quelques pages après la page courante
- Mettre en évidence la page courante
- Afficher des points de suspension pour combler les sauts dans la numérotation
- Ne pas afficher toutes les pages
- Afficher la barre de pagination uniquement lorsqu’elle est nécessaire
Le code Liquid pour Jekyll et le plugin jekyll-paginate
La configuration
Dans le fichier de configuration, il faut activer le plugin jekyll-paginate
et ajouter ces paramètres :
paginate: 12
pour indiquer le nombre d’items par page, ici12
paginate_path: "/page:num/"
pour indiquer le format de pagination souhaité (la 2ème page serapage2
, la 3ème serapage3
, etc.)- Attention, la première page n’est pas
page1
, mais l’URL originelle de la page.
paginate: 12
paginate_path: "/page:num/"
plugins:
- jekyll-paginate
Le code
{%- if paginator.total_pages > 1 %}
<section class="section">
<div class="container is-max-desktop">
<nav class="pagination is-centered" role="navigation" aria-label="pagination">
<a href="{{ site.paginate_path | relative_url | replace: 'page:num/', '' }}" title="Première page" class="pagination-previous {% if paginator.page == 1 %}is-link{% endif %}"><i class="fa-solid fa-backward-fast"></i></a>
<a href="{{ paginator.previous_page_path }}" class="pagination-previous">Page précédente</a>
<a href="{{ paginator.next_page_path }}" class="pagination-next">Page suivante</a>
<a href="{{ site.paginate_path | relative_url | replace: ':num', paginator.total_pages }}" title="Dernière page" class="pagination-next {% if paginator.total_pages == paginator.page %}is-link{% endif %}"><i class="fa-solid fa-forward-fast"></i></a>
{%- assign pagedebut = paginator.page | minus: 2 %}
{%- assign pagefin = paginator.page | plus: 2 %}
<ul class="pagination-list">
{% if pagedebut > 1 %}
<li><a href="{{ site.paginate_path | relative_url | replace: 'page:num/', '' }}" class="pagination-link">1</a></li>
<li><span class="pagination-ellipsis">…</span></li>
{% endif %}
{%- for i in (pagedebut..pagefin) %}
{%- if i >= 1 and i <= paginator.total_pages %}
{%- if i == 1 %}
<li><a href="{{ site.paginate_path | relative_url | replace: 'page:num/', '' }}" class="pagination-link {% if i == paginator.page %}is-current{% endif %}">{{ i }}</a></li>
{%- else %}
<li><a href="{{ site.paginate_path | relative_url | replace: ':num', i }}" class="pagination-link {% if i == paginator.page %}is-current{% endif %}">{{ i }}</a></li>
{%- endif %}
{%- endif %}
{%- endfor %}
{% if pagefin < paginator.total_pages %}
<li><span class="pagination-ellipsis">…</span></li>
<li><a href="{{ site.paginate_path | relative_url | replace: ':num', paginator.total_pages }}" class="pagination-link">{{ paginator.total_pages }}</a></li>
{% endif %}
</ul>
</nav>
</div>
</section>
{%- endif %}
Où:
{%- if paginator.total_pages > 1 %}
pour n’afficher la barre de navigation uniquement s’il y a plus d’une page{% if paginator.page == 1 %}is-link{% endif %}
pour mettre en évidence le bouton correspondant à la page en cours{{ site.paginate_path | relative_url | replace: 'page:num/', '' }}
pour supprimer tout indication de page de l’URL pour atteindre la 1ère page{%- assign pagedebut = paginator.page | minus: 2 %}
je me suis arraché les cheveux avant de découvrir que Liquid ne connaît pas la syntaxevariable + 2
mais uniquement| minus: 2
(minus
ouplus
;2
ou un autre nombre)minus
ouplus
pour afficher2
pages avant ou après la page courante{%- for i in (pagedebut..pagefin) %}
pour itérer depagedebut
àpagefin
,i
contient l’index en cours
Le résultat
On peut observer :
- Jusqu’à 16 pages à parcourir
- La page en cours est la 4ème page
- Affichage de la première et de la dernière page
- Affichage de “…”, si nécessaire
- Le bouton de la page courante est coloré
- Affichage de la barre de navigation uniquement s’il y a plusieurs pages à parcourir
Sources
Articles similaires
- Créer une table des matières automatique et masquable
14 nov 2024 · ≤ 1 min ·
- Partager simplement un article sur les réseaux sociaux avec Open Graph
12 nov 2024 · 2 min ·
- Intégrer un fil de discussion Mastodon à un blog
10 nov 2024 · 4 min ·
- Implémenter la numérotation automatique des titres via CSS.
29 oct 2024 · ≤ 1 min ·
- Mémo de syntaxe Markdown.
27 oct 2024 · 3 min ·
- Bulma, démarrage rapide.
18 oct 2024 · 2 min ·
Partage et commentaires
Vous pouvez commenter cet article grâce à ce fil de discussion sur Mastodon (avec Mastodon ou un autre compte ActivityPub/​Fediverse).