2015-03-25 1 views
2

Я работаю над проектом, который имеет как статические веб-страницы, так и HTML-шаблоны электронной почты.Предатель с Jekyll

Как вы, наверное, знаете, HTML-письма требуют, чтобы все CSS были встроены, что является огромной болью для управления. Большинство людей используют Premailer для обработки этого автоматически - https://github.com/premailer/premailer

Как я могу использовать предварительную версию с Jekyll для определенного макета?

Можно ли использовать premailer через плагин?

ответ

3

Да, вы можете!

После установки premailer вы можете сделать jekyll plugin как это одна:

require 'premailer' 

module Jekyll 
    class Site 

    # create an alias for the overriden site::write method 
    alias orig_write write 

    # we override the site::write method 
    def write 

     # first call the overriden write method, 
     # in order to be sure to find generated css 
     orig_write 

     # layout name we are looking for in pages/post front matter 
     # this can come from site config 
     @layout = 'post' 

     # this the css that will be inlined 
     # this can come from site config 
     @css_path = '/css/main.css' 

     # look for generated css file content 
     @cssPages = pages.select{ |page| 
     page.destination(dest).include? @css_path 
     } 

     # look again in pages and posts 
     # to generate newsletters with premailer 
     newsletters = [posts, pages].flatten.select{ |page_or_post| 
     page_or_post.data['layout'] == @layout 
     } 

     newsletters.each do |newsletter| 

     newsletter.output = Premailer.new(
      newsletter.output, 
      { 
       # declare that we pass page html as a string not an url 
       :with_html_string => true, 
       # also pass css content as a string 
       :css_string  => @cssPages.join, 
      } 
     ).to_inline_css; 

     # rewrite the newsletter with inlined css 
     newsletter.write(dest) 

     end 
    end 
    end 
end 

Это общее представление о том, как интегрировать premailer с Джекила. Код, безусловно, может быть улучшен.

Примечание: Я решил не использовать Generator plugin, потому что, когда вызываются генераторы, sass и scss-файлы все еще не разобраны, а сгенерированный css недоступен.

+0

Спасибо, это сработало отлично! –