Generador de páginas templadas en Jekyll
Pregunta
siguiendo el Instrucciones de complementos, Construyo mi propio generador que crea una página de plantilla. Sin embargo, no se comporta como yo. La plantilla generada no se analiza con líquido y no se representan después de la generación.
¿Sabes cómo podría hacerlo?
Actualmente por Generator es así:
module Jekyll
class TagPages < Generator
safe true
priority :highest
def generate(site)
site.tags.each { |tag, posts|
html = ''
html << <<-HTML
---
layout: tag_page
---
<ul>
HTML
posts.each { |post| html << "<li>#{post.url}</li>" }
html << "</ul>"
File.open("tags/#{tag}.html", 'w+') do |file|
file.puts html
end
}
end
end
end
Entonces, por ejemplo para la etiqueta free-software
, crea la página tags/free-software.html
que se ve así.
---
layout: tag_page
---
<ul>
<li>/link_to_my_post_relative_to_free_software.html</li>
<li>/another_amazing_post.html</li></ul>
Entonces, si quiero que el sistema líquido rinde esta página? ¿Hay alguna manera de asegurarse de que el generador se llame realmente al comienzo de la generación del sitio?
EDITAR:
Según el Snuestro código de jekyll, generate
se llama antes render
(Línea 80). Entonces, si alguien pudiera decirme qué hago mal, podría ayudar.
Editar 2:
Incluso si render
se llama después generate
, no lee los archivos del disco entre estos dos pasos, por lo que ignora los archivos generados.
Solución
Yo lo haría un etiqueta líquida. Es una mejor manera de hacer eso.
Otros consejos
Para resolver este antiguo misterio: generate
de hecho se llama antes render
, pero se llama después inventario. Cuando se ejecuta su generador, Jekyll ya "sabe" la lista de archivos a procesar (y su contenido), y su archivo generado no está entre ellos (o, si había uno anterior, entonces los viejos contenidos son conocido y sus contenidos generados ignorados).
Para resolverlo, agregue una nueva página Jekyll :: a Site.Pages, descargando la inventaria si lo hay:
def generate(site)
site.static_files.select {|sf| sf.path.end_with?('/your_infile_name')}.each {|your_infile|
# generate your_new_file from your_infile
relative_dir = your_infile.relative_path[1..-15] # -length of your new_file_name
new_page = Jekyll::Page.new(site, Dir.pwd, relative_dir, new_file_name)
site.pages.delete_if {|p| p.path == relative_dir + file_name} << new_page