【问题标题】:How to render all Jekyll pages with a different layout?如何以不同的布局呈现所有 Jekyll 页面?
【发布时间】:2016-04-07 02:24:31
【问题描述】:

我正在尝试创建一个 Jekyll 插件,它应该遍历所有帖子并以不同的布局呈现它们。无法弄清楚如何做到这一点。这就是我目前所拥有的:

module Jekyll
  class MyGenerator < Generator
    priority :low
    def generate(site)
      site.posts.docs.each do |doc|
        page = Page.new(site, site.source, File.dirname(doc.relative_path), doc.basename)
        page.do_layout(
          site.site_payload,
          'post' => Layout.new(site, site.source, '_layouts/my.html')
        )
        page.write(?)
        site.pages << page
      end
    end
  end
end

此代码不起作用。

【问题讨论】:

  • 故障点在哪里 - 一个错误?没有错误?
  • @maxpleaner 哦,有很多失败。它根本不起作用,不渲染,不保存文件。我明白我做错了。我猜需要一位 Jekyll 贡献者的帮助
  • 我理解这种情绪。就个人而言,Jekyll 从未走远。您是否查看过另一个 Jekyll 插件的示例代码?或者尝试 fork Jekyll 并编辑源代码本身?
  • @maxpleaner 这就是我首先通过检查此插件获得此代码的方式:github.com/juusaw/amp-jekyll 但它不起作用...
  • 也许该插件是使用与您正在使用的版本不同的 Jekyll 构建的。顺便说一句,您的意思是 amp-jekyll 插件不起作用或您的代码不起作用?显然,您应该以一个工作插件为例。

标签: ruby jekyll


【解决方案1】:

在下面的代码中,我将使用null 布局再次渲染所有页面。生成的文件都有后缀“_BARE”

module Jekyll
  class BareHtml < Page
    def initialize(site, base, dest_dir, src_dir, page)

      @site = site
      @base = base
      @dir = dest_dir
      @dest_dir = dest_dir
      @dest_name = page.basename
      file_name = "#{page.basename}_BARE.html"
      self.process(file_name)
      self.read_yaml(base, page.path)
      self.data['layout'] = nil               ###      <-- set the layout name here
    end
  end

  class BareHtmlGenerator < Generator
    safe true
    priority :low

    def generate(site)

      # Converter for .md > .html
      converter = site.find_converter_instance(Jekyll::Converters::Markdown)

      dest = site.dest
      src = site.source

      # Create destination path
      FileUtils.mkpath(dest) unless File.exists?(dest)

      site_pages = site.pages.dup

      site_pages.each do |page|
        bare = BareHtml.new(site, site.source, dest, src, page)
        bare.content = converter.convert(bare.content)
        bare.render(site.layouts, site.site_payload)
        bare.write(site.dest)
        site.pages << bare
      end

    end

  end

end

【讨论】:

  • 我认为这已经过时了。 site_pages 最终成为 nil
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2015-05-07
  • 2017-11-13
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多