gpt4 book ai didi

ruby - nanoc:通过项目名称或标识符测试编译规则时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:34 24 4
gpt4 key购买 nike

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

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

---
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 文件。

最佳答案

nanoc create-site 之后,您是否更改了 nanoc.yaml?因为我记得默认情况下,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"

关于ruby - nanoc:通过项目名称或标识符测试编译规则时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19999196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com