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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top