2013-06-13 2 views
3

Мне нужны две версии каждого из моих сообщений в очень простой установке Jekyll: версия для публики и версия barebones с брендингом специально для встраивания.Две версии каждого сообщения в блоге в Jekyll

У меня есть один макет для каждого типа:

post.html 
post_embed.html 

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

Обновление: SO question covers creating JSON files for each post. Мне просто нужен генератор, чтобы прорезать каждый пост, изменить одно значение в фронте YAML (embed_page = True) и вернуть его в тот же шаблон. Таким образом, каждый пост отображается дважды, один раз с embed_page true и один с ним ложный. Все еще не имеют полного понимания генераторов.

ответ

2

Вот мой плагин Jekyll для этого. Это, наверное, абсурдно неэффективно, но я писал в Ruby все два дня.

module Jekyll 
    # override write and destination functions to taking optional argument for pagename 
    class Post 
    def destination(dest, pagename) 
     # The url needs to be unescaped in order to preserve the correct filename 
     path = File.join(dest, CGI.unescape(self.url)) 
     path = File.join(path, pagename) if template[/\.html$/].nil? 
     path 
    end 

    def write(dest, pagename="index.html") 
     path = destination(dest, pagename) 
     puts path 
     FileUtils.mkdir_p(File.dirname(path)) 
     File.open(path, 'w') do |f| 
     f.write(self.output) 
     end 
    end 
    end 

    # the cleanup function was erasing our work 
    class Site 
    def cleanup 
    end 
    end 

    class EmbedPostGenerator < Generator 
    safe true 
    priority :low 
    def generate(site) 
     site.posts.each do |post| 
     if post.data["embeddable"] 
      post.data["is_embed"] = true 
      post.render(site.layouts, site.site_payload) 
      post.write(site.dest, "embed.html") 
      post.data["is_embed"] = false 
     end 
     end 
    end 
    end 
end 
Смежные вопросы