【问题标题】:In Middleman how do I access the file Renderer?在 Middleman 中,我如何访问文件 Renderer?
【发布时间】:2026-01-31 07:10:01
【问题描述】:

在 Middleman 中,我想从目录中读取一些降价文件并渲染它们。这样,当外行人添加文件时,他们只需添加 markdown 文件,而无需担心其他任何事情。

除了没有解析 YAML 之外,我一切正常。我想如果我可以访问 Middleman 的 FileRendererTemplateRenderer,那么代码就可以工作了。

但是我不知道如何访问它们:(

这是我的代码。

主要部分:

<% @photos = Dir["source/_partials/feature-pieces/*.md"] %>
<%= partial "/feature-pieces/homepageslider", :collection => @photos %>

然后在我的

主页滑块

<div class="item featured<%=homepageslider_counter%>">
  <div class="slider-content">
    <% markdown = File.read(homepageslider) %>
    <%= Kramdown::Document.new(markdown).to_html %>
  </div>
</div>

<% content_for :cssScreen do %>
  .owl-carousel .item.featured<%=homepageslider_counter%> {
    background: url("/images/horizontal-medium1.jpg");
  }
<% end %>

最后是一个markdown文件:

---
background: /images/horizontal-medium1.jpg
---

## Featured Heading from md.

md
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

<div class="center">
<input type="button" class="btn btn-med" value="Call To Action">
</div>

【问题讨论】:

    标签: ruby renderer middleman


    【解决方案1】:

    这比我想象的要容易得多。

    我在homepageslider 中使用了render_individual_file 方法,如下所示:

    <div class="item featured<%=homepageslider_counter%>">
      <div class="slider-content">
        <%= render_individual_file root + "/" + homepageslider %>
      </div>
    </div>
    

    完美呈现。

    我通过使用Middleman Console

    require 'pp'
    pp ::Middleman::Application.instance_methods
    

    我还想出了如何获取frontmatter。在这种情况下,它帮助我浏览了 Middleman 的源代码,而不是查看实例方法。

    就我而言,我想要背景

    <div class="item featured<%=homepageslider_counter%>">
      <div class="slider-content">
        <%= render_individual_file root + "/" + homepageslider %>
      </div>
    </div>
    
    <% content_for :cssScreen do %>
      .owl-carousel .item.featured<%=homepageslider_counter%> {
        background: url(
        <%= self.extensions[:frontmatter].data(homepageslider.gsub(config.source + "/", ""))[0][:background] %>);
      }
    <% end %>
    

    重要的部分是

    然后我在config.rb做了一个辅助方法

    def getData(filePath, symbol)
      fm = extensions[:frontmatter]
      localFilePath = filePath.gsub(config.source + "/", "")
      parsedData  = fm.data(localFilePath)
      fmData = parsedData[0]
      fmData[symbol]
    end
    

    我这样称呼:

    <%= getData('source/_partials/feature-pieces/slider-1.md', :background) %>
    

    【讨论】: