ruby - new - liquid jekyll
¿Incluir datos de plantilla jekyll/líquido en una variable YAML? (2)
Hoy me encontré con un problema similar. Como solución, creé el siguiente complemento simple de filtro Jekyll que permite expandir las plantillas líquidas anidadas (por ejemplo, variables líquidas en la parte frontal de YAML):
module Jekyll
module LiquifyFilter
def liquify(input)
Liquid::Template.parse(input).render(@context)
end
end
end
Liquid::Template.register_filter(Jekyll::LiquifyFilter)
Los filtros se pueden agregar a un sitio Jekyll colocándolos en el subdirectorio ''_plugins'' del directorio de raíz del sitio. El código anterior se puede pegar simplemente en un archivo yoursite / _plugins / liquify_filter.rb.
Después de eso una plantilla como ...
---
layout: default
first_name: Harry
last_name: Potter
greetings: Greetings {{ page.first_name }} {{ page.last_name }}!
---
{{ page.greetings | liquify }}
... debería mostrar alguna salida como "¡Saludos Harry Potter!". La expansión también funciona para estructuras anidadas más profundas, siempre que el filtro de licuar también se especifique en los bloques de salida de líquido internos. Algo como {{site.url}} también funciona, por supuesto.
Actualización : parece que esto ahora está disponible como una gema de Ruby: https://github.com/gemfarmer/jekyll-liquify .
Estoy usando el encabezado YAML de un archivo de reducción para agregar una variable de excerpt
a las publicaciones del blog que puedo usar en otro lugar. En uno de estos extractos me refiero a una publicación de blog anterior a través del marcado del enlace de reducción, y uso la variable de datos de la plantilla líquida {{ site.url }}
en lugar de la URL base del sitio.
Así que tengo algo como (recortado un poco)
---
title: "Decluttering ordination plots in vegan part 2: orditorp()"
status: publish
layout: post
published: true
tags:
- tag1
- tag2
excerpt: In the [earlier post in this series]({{ site.url }}/2013/01/12/
decluttering-ordination-plots-in-vegan-part-1-ordilabel/ "Decluttering ordination
plots in vegan part 1: ordilabel()") I looked at the `ordilabel()` function
----
Sin embargo, a jekyll y Maruku md parser no les gusta esto, lo que me hace sospechar que no puedes usar el marcado de líquidos en el encabezado YAML.
¿Es posible utilizar el marcado de líquidos en el encabezado YAML de las páginas que maneja jekyll?
- Si es así, ¿qué estoy haciendo mal en el ejemplo que se muestra?
- Si no está permitido, ¿a quién más puedo lograr lo que pretendía? Actualmente estoy desarrollando mi sitio en mi computadora portátil y no quiero codificar la URL base ya que tendrá que cambiar cuando esté listo para implementarme.
Los errores que estoy recibiendo de Maruku son:
| Maruku tells you:
+---------------------------------------------------------------------------
| Must quote title
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-o
| --------------------------------------|-------------------------------------
| +--- Byte 40
y
| Maruku tells you:
+---------------------------------------------------------------------------
| Unclosed link
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
y
| Maruku tells you:
+---------------------------------------------------------------------------
| No closing ): I will not create the link for ["earlier post in this series"]
| ---------------------------------------------------------------------------
| the [earlier post in this series]({{ site.url }}/2013/01/12/decluttering-or
| --------------------------------------|-------------------------------------
| +--- Byte 41
No creo que sea posible anidar variables líquidas dentro de YAML. Al menos, no he descubierto cómo hacerlo.
Un enfoque que funcionará es usar un filtro de reemplazo de líquido . Específicamente, defina una cadena que desee usar para el reemplazo de la variable (por ejemplo, !SITE_URL!
). Luego, use el filtro de reemplazo para cambiar eso a la variable Jekyll deseada (por ejemplo, site.url
) durante la salida. Aquí hay un archivo .md reducido que se comporta como se espera en mi instalación jekyll 0.11:
---
layout: post
excerpt: In the [earlier post in this series](!SITE_URL!/2013/01/12/)
---
{{ page.excerpt | replace: ''!SITE_URL!'', site.url }}
Probando eso en mi máquina, la URL se inserta correctamente y luego se traduce de markdown a un enlace HTML como se esperaba. Si tiene más de un elemento para reemplazar, puede encadenar varias llamadas de reemplazo.
---
layout: post
my_name: Alan W. Smith
multi_replace_test: ''Name: !PAGE_MY_NAME! - Site: [!SITE_URL!](!SITE_URL!)''
---
{{ page.multi_replace_test | replace: ''!SITE_URL!'', site.url | replace: ''!PAGE_MY_NAME!'', page.my_name }}
Una nota importante es que debe establecer explícitamente el valor de site.url . No consigues eso gratis con Jekyll. Puede configurarlo en su archivo _config.yml
con:
url: http://alanwsmith.com
O bien, defínelo cuando llames jekyll:
jekyll --url http://alanwsmith.com