Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nanoc and multiple layouts

Tags:

ruby

nanoc

is it possible to use multiple layouts for a specific (or all) item(s)? For example, I have a couple of items, and I want to apply two different layouts to it. One with a green and one with a blue background (however). And I want to compile them in two different folders in my output directory (e.g. v1 and v2).

I was playing with the rules and the compile blocks, but I couldn't figure out how this could work. Because, every item gets compiled only one time during the compile process, I can't tell nanoc to compile it the first time with layout1 and the second time with layout2. I tried sth like this, but it led to broken output files.

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

Hope I made myself clear and somebody can help.

thx, tux

like image 704
23tux Avatar asked Aug 23 '11 14:08

23tux


1 Answers

Item representations are meant for this purpose. You can create two different representations, e.g. the default one and an alternative one, and then apply compilation and routing rules to them, like this:

# 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
like image 151
Denis Defreyne Avatar answered Nov 25 '22 23:11

Denis Defreyne