我在nanoc规则中使用以下测试,通过将它们与具有相同名称的布局进行匹配来编译多个目录中的各种内容(包括部分内容)。
现在我已经为每个内容目录添加了索引文件,但这些文件需要默认布局。如果我将一个名为'index:'的项添加到'index.md'文件中的元数据中,这显然可行。
---
title: 'This page title'
index: 'y'
---
...但是检查if @item[:index]
似乎有点笨拙,所以我一直在尝试(好吧,黑客攻击)找到一种方法从元数据中省略'index:'并通过nanoc rep name或identifier进行测试 - 请参阅以下代码中已注释掉的if
语句:
layouts = ['layoutone','layouttwo','layoutetc']
layouts.each do |dir|
compile "/#{dir}/*" do
# if item.identifier == "/#{dir}/index/"
# if item.identifier =~ %r{/\w/index/}
# if @item.rep_named(:index)
if @item[:index]
filter :kramdown
layout "default"
elsif @item[:inc]
filter :erb
filter :kramdown
layout "#{dir}"
else
filter :kramdown
layout "#{dir}"
end
end
end
我注释掉的行中的语法/逻辑出了什么问题?
我在这里错过了令人眼花缭乱的显而易见:只需在与/content/dir_name.md
相同的级别添加/content/dir_name/*
即可创建/dir_name/index.html
和/dir_name/*.html
,并将规则应用于{{1}文件。
答案 0 :(得分:1)
您是否在nanoc.yaml
之后更改了nanoc create-site
?因为我记得默认情况下,nanoc
中的标识符不包含源文件名的最后index
部分。
假设,文件content/dirA/index.markdown
将具有标识符/dirA/
或其他内容,并编译为content/dirA/index.html
。这可能是您index
正则表达式没有命中的原因。
是的,有点棘手,但是nanoc很棒。
我找到了一种告诉内容文件名的方法:item.raw_filename
。
This document表示它仅适用于二进制文件,而且在我的实验中也适用于文本文件。
# in compile block of Rules
item.identifier
# => "/aaa/"
item.raw_filename
# => "content/aaa.markdown"