2016-05-01 19 views
1

Ich möchte einen einzigen Quellordner mit Artikeln und generieren zwei oder mehr Varianten der Ausgabe. (Zum Beispiel kann eine Druck/Archivversion oder eine spezielle mobile Version für A/B-Tests mit einem kanonischen Link zu einer Variante.)Middleman Blog-Erweiterung: Zwei Ausgabe-Varianten der gleichen Quelle

Wenn eine Config mit wie diese

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 

Beachten Sie den Unterschied in den blog.permalink Konfiguration zum Generieren der URLs.

Das Layout wird durcheinander gebracht, die Links sind falsch (zeigt immer auf die zuletzt in der Konfigurationsdatei erscheinenden Versionen) und die Seiten fehlen.

Ich habe eine benutzerdefinierte Erweiterung hinzugefügt, um den MiddleMan-Lebenszyklus anzubinden und die fehlenden Ressourcen zur Sitemap hinzuzufügen. (Was ich für einen Hack halte ...) Wenigstens erscheinen danach die fehlenden Seiten, aber mit dem falschen Layout und Links zeigen immer auf die falsche Version. Versuchen, proxy mit einer anderen Vorlage zu versuchen scheint verhindert werden, da die Blog-Erweiterung selbst dynamische Proxy-Seiten generiert. Ich bin derzeit mit Zwischenhändler 3.4 stecken, da die Asciidoc-Erweiterung für Zwischenhändler 4 noch nicht veröffentlicht ist. Ist das eine generelle Einschränkung im Zwischenhandel, dass ich nicht mehrere Varianten erzeugen kann?

Antwort

1

Ich denke, Ihre beste Vorgehensweise ist folgende:

  • Upgrade auf gem 'middleman', '~> 4.1.7'
  • Verwendung gem 'middleman-targets'

Sie könnten dann zwei Build-Ziele konfigurieren: default und variant, wie folgt aus:

# 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 
    } 
    } 

Nun sollten Sie komplette Layouts wie folgt wechseln können:

# layout.erb 

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

Oder können Sie Feature-Flags oder bestimmte Konfigurationswerte in den einzelnen Seiten verwenden, etwa so:

# 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 %> 

Dokumentation ein wenig knapp ist Im Moment ist es wahrscheinlich am besten, den "Helfer" -Teil des Quellcodes hier zu lesen: https://github.com/middlemac/middleman-targets/blob/master/lib/middleman-targets/extension.rb