Генератор шаблонных страниц в Jekyll

следуя инструкциям по плагинам, я создаю свой собственный генератор, который создает шаблон страницы. Однако он ведет себя не так, как я. Сгенерированный шаблон не анализируется Liquid и не отображается после генерации.

Вы знаете, как я мог бы сделать?

В настоящее время генератор выглядит следующим образом:

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

Так, например, для тега free-software создается страница tags/free-software.html, которая выглядит так.

---
layout: tag_page
---
<ul>
<li>/link_to_my_post_relative_to_free_software.html</li>
<li>/another_amazing_post.html</li></ul>

Итак, если я хочу, чтобы ликвидная система отображала эту страницу? Есть ли способ убедиться, что Генератор действительно вызывается в начале создания сайта?

РЕДАКТИРОВАТЬ:

Согласно sисходному коду jekyll, generate является вызывается перед render (строка 80). Так что, если бы кто-нибудь мог сказать мне, что я делаю неправильно, это могло бы помочь.

РЕДАКТИРОВАТЬ 2:

Даже если render вызывается после generate, он не читает файлы с диска между этими двумя шагами, поэтому игнорирует сгенерированные файлы.


person Baptiste Pernet    schedule 24.01.2011    source источник


Ответы (2)


Я бы сделал это тегом жидкий тег. Это лучший способ сделать это.

person Chris Warrick    schedule 21.04.2011
comment
наконец, я заканчиваю его, используя rakefile, и генерирую мою шаблонную страницу в rake target. Этот метод описан здесь: justkez.com/generating-a- облако тегов в jekyll - person Baptiste Pernet; 21.04.2011

Чтобы разрешить эту древнюю загадку: generate действительно вызывается перед render, но вызывается после inventory. К моменту запуска вашего генератора Jekyll уже «знает» список файлов для обработки (и их содержимое), а вашего сгенерированного файла среди них нет (или, если где-то валялся старый, то старое содержимое известен, а созданное вами содержимое игнорируется).

Чтобы решить эту проблему, добавьте новый Jekyll::Page в site.pages, сбросив инвентаризированный, если он есть:

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
person jackr    schedule 09.10.2014
comment
Сейчас я не так много работаю с Джекилом, но спасибо за ответ. - person Baptiste Pernet; 10.10.2014