Middleman博客扩展:同一来源的两个输出变体

时间:2016-05-01 09:54:20

标签: middleman

我希望有一个包含文章的源文件夹,并生成两个或更多输出变体。 (例如,打印/存档版本或A / B测试的特殊移动版本,以及与一个变体的规范链接。)

有这样的配置时

activate :blog do |blog|
  blog.name = "variant"
  blog.sources = "news/{year}-{month}-{day}-{title}.html"
  blog.layout = "news/variant-layout"
  blog.permalink = "variant/{year}/{title}.html"
  ...
end
...
activate :blog do |blog|
  blog.name = "news"
  blog.sources = "news/{year}-{month}-{day}-{title}.html"
  blog.layout = "news/layout"
  blog.permalink = "news/{year}/{title}.html"
  ...
end

请注意blog.permalink配置与生成网址的区别。

布局混乱,链接错误(始终指向配置文件中最后出现的版本)和页面丢失。

我添加了一个自定义扩展以挂钩到中间人生命周期,将缺少的资源添加到站点地图中。 (我认为这是一个黑客...)至少丢失的页面出现在那之后,但布局错误,链接总是指向错误的版本。 由于博客扩展本身会生成动态代理页,因此似乎阻止尝试proxy使用不同的模板。 由于中间人4的asciidoc扩展尚未发布,我目前仍处于中间人3.4。这是中间人的一般限制吗,我不能生成多个变种?

1 个答案:

答案 0 :(得分:1)

我认为您最好的行动方案如下:

  • 升级到gem 'middleman', '~> 4.1.7'
  • 使用gem 'middleman-targets'

然后,您可以配置两个构建目标:defaultvariant,如下所示:

# config.rb

set :target, :default

set :targets, {
  default: {
     layout: 'layout-one',
     build_dir: 'build/default',
     target_specific_config: 'foo',
     features : {
        feature_one: true 
     }  
  },
  variant: {
     layout: 'layout-two',
     build_dir: 'build/variant',
     target_specific_config: 'bar',
     features : {
        feature_one: false 
     }  
  }

现在你应该能够像这样切换完整的布局:

# layout.erb

<% wrap_layout(target_value(:layout)) do %>
  <%= yield %>
<% end %>

或者您可以在各个页面中使用功能标记或特定配置值,如下所示:

# page.erb

<% if target_feature?(:feature_one) %>
  <p>Feature One Is ON</p>
  <p>Value is: <%= target_value(:target_specific_config) %>
<% else %>
  <p>Feature One Is OFF</p>
  <p>Value is: <%= target_value(:target_specific_config) %>
<% end %>

目前文档有点稀缺,因此最好阅读“帮助者”#39;这里是源代码的一部分:https://github.com/middlemac/middleman-targets/blob/master/lib/middleman-targets/extension.rb