2

我在 nanoc 规则中使用以下测试来编译多个目录中的各种内容(包括部分内容),方法是将它们与其同名布局匹配。

现在我已将索引文件添加到每个内容目录,但这些需要默认布局。如果我在 'index.md' 文件中的元数据中添加一个名为 'index:' 的项目,这显然可以正常工作......</p>

---
title: 'This page title'
index: 'y'
---

…但是检查if @item[:index]似乎有点笨拙,所以我一直在尝试(好吧,到处乱搞)找到一种方法从元数据中省略“索引:”并通过 nanoc 代表名称或标识符进行测试 - 请参阅注释掉的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/content/dir_name.md

4

1 回答 1

2

nanoc.yaml之后你变了nanoc create-site吗?因为我记得默认情况下,标识符nanoc不包含index源文件名的最后一部分。

说,文件content/dirA/index.markdown将有标识符/dirA/或其他东西,并编译为content/dirA/index.html. 这可能是您的index正则表达式没有命中的原因。

是的,有点棘手,但 nanoc 很棒。

更新

我找到了一种告诉内容文件名的方法:item.raw_filename.

该文档说它仅适用于二进制文件,而在我的实验中它也适用于文本文件。

# in compile block of Rules
item.identifier
# => "/aaa/"
item.raw_filename
# => "content/aaa.markdown"
于 2013-11-15T13:15:07.873 回答