/ / Jekyll: paramétrico (¿parcial?) Incluye: ruby, templates, jekyll, parciales

Jekyll: paramétrico (¿parcial?) Incluye - ruby, plantillas, jekyll, parciales

En Jekyll, me gustaría incluir un bloque deCódigo HTML (creando una estructura bootstrap de múltiples pestañas) en mi página de salida. Dado que el contenido de cada pestaña es bastante largo, me gustaría seguir escribiéndolo en markdown, con soporte para enlaces con nombre.

Sin embargo, tengo diferentes páginas con un número diferente de pestañas, por lo que me gustaría pasar el contenido capturado como parámetros del include declaración. Por ejemplo, quiero mi .md archivos para ser algo como:

---
layout: default
title: Test
keywords: Test
description: Test
datecreated: 24 Apr 2014
---

# Test Page

{% capture content1 %}
Some content here.

I want to be able to render **markdown markup**, like _this_.
{% endcapture %}

{% capture content2 %}
Some more content.

I want to be able to have [links][google] as well.

[google]: http://www.google.it/
{% endcapture %}

{% include myparametrictemplate.html sections="content1,content2" %}

Hasta ahora, he creado lo siguiente myparametrictemplate.html:

## This is a test, to confirm that "content1" and "content2" are accessible

### Section1

<div class="mytab">
{{ content1 | markdownify }}
</div>

### Section2

<div class="mytab">
{{ content2 | markdownify }}
</div>

<hr/>


## Here is the part I would like to have working

Check that `include.sections = "content1,content2"`: {{ include.sections }}

{% assign arr = include.sections | split:"," %}

{% for item in arr %}

Here I got printed the string "content1" (or "content2"), not the actual content of that Liquid tag:

<div class="mytab">
{{ item | markdownify }}
</div>

{% endfor %}

<hr/>



## The ugly workaround

{% if content1 %}
### Section1

<div class="mytab">
{{ content1 | markdownify }}
</div>
{% endif %}


{% if content2 %}
### Section2

<div class="mytab">
{{ content2 | markdownify }}
</div>
{% endif %}


{% if content3 %}
### Section3

<div class="mytab">
{{ content3 | markdownify }}
</div>
{% endif %}

Como puedes ver, {{ item }} imprime el nombre (ya sea content1 o content2 en el ejemplo anterior), mientras que me gustaría generar el contenido de content1 o content2. ¿Es esto último alcanzable de alguna manera? No pude localizar nada en la documentación de Liquid.

La última parte del ejemplo muestra lo feoideé una solución alternativa, con la que no estoy satisfecho (porque de esa manera no puedo tener múltiples inclusiones --- cada una con un conjunto diferente de pestañas --- en la misma página).

EDITAR: una solución un poco menos fea (aún, aún no elegante) es la siguiente:

## The slightly less ugly workaround

{% assign arr = include.sections | split:"," %}

{% if arr contains "content1" %}
### Section1

<div class="mytab">
{{ content1 | markdownify }}
</div>
{% endif %}


{% if arr contains "content2" %}
### Section2

<div class="mytab">
{{ content2 | markdownify }}
</div>
{% endif %}


{% if arr contains "content3" %}
### Section3

<div class="mytab">
{{ content3 | markdownify }}
</div>
{% endif %}

Admito que soy bastante novato en Jekyll, por lo que podría estar tomando un camino equivocado para resolver mi problema. Se agradecerá cualquier dirección, gracias.

NOTA: Me gustaría evitar la solución propuesta en https://stackoverflow.com/a/14247353/2452440 (o http://wolfslittlestore.be/2013/10/rendering-markdown-in-jekyll/ ) porque me gustaría mantener las secciones de contenido en la misma página .md archivo.

Respuestas

0 para la respuesta № 1

Una forma sencilla de hacerlo sería:

# myparametrictemplate.html

<div class="mytab">
{{ content1 | markdownify }}
</div>

<div class="mytab">
{{ content2 | markdownify }}
</div>

<div class="mytab">
{{ content3 | markdownify }}
</div>

No es necesario pasar parámetros para incluir, ya que el archivo incluido heredará el alcance del archivo incluido.

Entonces puedes llamar a:

{% include myparametrictemplate.html %}

Desafortunadamente, no hay forma de pasar o crear una nueva matriz dentro de una plantilla líquida. Por lo tanto, no hay forma de que pueda recorrer sus "contenidos".