我希望有一个包含文章的源文件夹,并生成两个或更多输出变体。 (例如,打印/存档版本或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。这是中间人的一般限制吗,我不能生成多个变种?
答案 0 :(得分:1)
我认为您最好的行动方案如下:
gem 'middleman', '~> 4.1.7'
gem 'middleman-targets'
然后,您可以配置两个构建目标:default
和variant
,如下所示:
# 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