2 votes

Comment passer une valeur frontale dans une boucle for ?

Je veux utiliser une valeur dans mon panneau frontal pour spécifier un fichier de données à parcourir en boucle, mais je n'arrive pas à le faire fonctionner.

J'ai un fichier de données dans _data/sidebars/sidebar1.yml. Il contient :

- first
- second
- third

Sur une page, j'ai ce message d'accueil :

---
title: My page
sidebar: site.data.sidebar.sidebar1
---

Je veux utiliser ce code :

{% for entry in page.sidebar %}
* {{entry}}
{% endfor %}

Cependant, cela ne fonctionne pas. J'ai essayé un certain nombre de choses (dont les suivantes assign y capture pour définir le contenu de la page.sidebar, mais rien ne semble fonctionner).

La seule chose qui fonctionne est de faire ça :

{% if page.sidebar == "site.data.sidebars.sidebar1" %}
{% assign sidebar = site.data.sidebars.sidebar1 %}
{% endif %}

{% for entry in sidebar %}
* {{entry}}
{% endfor %}

Cependant, j'aimerais éviter ce code supplémentaire avec l'option if car il est facile de l'oublier et j'aimerais l'automatiser davantage.

Des idées sur la façon de faire fonctionner ce système ?

3voto

David Jacquel Points 4752

Il y a une faute de frappe dans votre page d'accueil. C'est :

sidebar: site.data.sidebars.sidebar1

no

sidebar: site.data.sidebar.sidebar1

Vous pouvez même être moins bavard.

Dans votre page de garde : sidebar: sidebar1

Dans votre code :

{% assign sidebar = site.data.sidebars[page.sidebar]  %}

{% for entry in sidebar %}
  {{ entry | inspect }}
{% endfor %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X