2

nanoc ルールで次のテストを使用して、複数のディレクトリ内のさまざまな種類のコンテンツ (パーシャルを含む) をコンパイルし、それらを同じ名前のレイアウトと照合します。

各コンテンツ ディレクトリにインデックス ファイルを追加しましたが、これらには既定のレイアウトが必要です。「index:」という名前のアイテムを「index.md」ファイルのメタデータに追加すると、これは明らかに正常に機能します…</p>

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

…しかし、チェックif @item[:index]は少し不格好に思えるので、メタデータから '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

コメントアウトされた行の構文/ロジックの何が問題になっていますか?

編集:

私はここで盲目的に明白なことを見逃していました: create and と/content/dir_name.md同じレベルでaddし、それらのファイルにルールを適用するだけです。/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 に答える