Techioz Blog

nanoc と複数のレイアウト

概要

特定の(またはすべての)アイテムに複数のレイアウトを使用することはできますか? たとえば、いくつかのアイテムがあり、それに 2 つの異なるレイアウトを適用したいとします。 1 つは緑の背景、もう 1 つは青の背景です (ただし)。そして、それらを出力ディレクトリ内の 2 つの異なるフォルダー (例: v1 と v2) にコンパイルしたいと考えています。

ルールとコンパイルブロックをいじっていましたが、これがどのように機能するのか理解できませんでした。すべての項目はコンパイル プロセス中に 1 回だけコンパイルされるため、最初はlayout1でコンパイルし、2回目はlayout2でコンパイルするようにnanocに指示することはできません。このように sth を試しましたが、出力ファイルが破損しました。

compile '*' do
  if item.binary?
    # don’t filter binary items
  else
    filter :erb
    layout 'layout1'
    layout 'layout2'
  end
end

自分のことをはっきりさせて、誰かが助けてくれることを願っています。

THX、 タキシード

解決策

項目表現はこの目的を目的としています。 2 つの異なる表現を作成できます。デフォルトのものと代替のものを選択し、次のようにコンパイルとルーティングのルールをそれらに適用します。

# default rep, although you can pass
# :rep => :default explicitly too
compile '/stuff/*/' do
  filter :erb
  layout 'default'
end

route '/stuff/*/' do
  # /stuff/foo/ -> /boring/stuff/foo/
  # Just an example; you probably need something else
  '/boring' + item.identifier
end

compile '/stuff/*/', :rep => :special do
  filter :erb
  layout 'special' # this is different
end

route '/stuff/*/', :rep => :special do
  # /stuff/foo/ -> /special/stuff/foo/
  # Again, just an example
  '/special' + item.identifier
end