Path DocPad';s文档元数据?
DocPad文档元数据中所有这些路径之间的区别是什么 每个文档都有一组元数据,其中包含许多不同类型的路径和文件名,下面是一个示例列表:Path DocPad';s文档元数据?,path,metadata,docpad,Path,Metadata,Docpad,DocPad文档元数据中所有这些路径之间的区别是什么 每个文档都有一组元数据,其中包含许多不同类型的路径和文件名,下面是一个示例列表: fullPath: '/Users/kizu/Projects/docpad-test/src/documents/pages/page2_en/index.html.md', relativePath: 'pages/page2_en/index.html.md', basename: 'index', outBasename: 'index', filena
fullPath: '/Users/kizu/Projects/docpad-test/src/documents/pages/page2_en/index.html.md',
relativePath: 'pages/page2_en/index.html.md',
basename: 'index',
outBasename: 'index',
filename: 'index.html.md',
fullDirPath: '/Users/kizu/Projects/docpad-test/src/documents/pages/page2_en',
outPath: '/Users/kizu/Projects/docpad-test/out/en/pages/page2/index.html',
outDirPath: '/Users/kizu/Projects/docpad-test/out/pages/page2_en',
outFilename: 'index.html',
relativeOutPath: 'en/pages/page2/index.html',
relativeDirPath: 'pages/page2_en',
relativeOutDirPath: 'en/pages/page2_en',
relativeBase: 'pages/page2_en/index',
relativeOutBase: 'pages/page2_en/index',
name: 'index.html',
slug: 'pages-page2-en-index',
url: '/en/pages/page2/index.html',
urls: [ '/en/pages/page2/index.html' ],
我只知道其中两个元数据的用途:
outPath
设置文件系统中的输出路径,因此在renderBefore
事件之前更改它将更改输出路径和文件名url
是站点根目录的绝对url,它主要用于链接到其他文档这个问题的上下文与以下问题的答案类似:我想重写文档的输出路径和文件名,因此我需要知道需要更改哪些元数据。现在我只更改了
输出路径
和url
,但这是否足够?或者,也许有一种方法可以使用一种神奇的方法来更改输出路径,这样它就可以自动将所有这些路径更改为正确的新路径,所以我根本不需要为此费心了?我认为大多数路径都是相对于根路径的Docpad.coffee文件配置的路径(其中Docpad.coffee文件是),outPath
(生成的网站所在地)、srcPath
(网站源文件所在地)、documentsPath
(要呈现的文件所在地)和filepath
(不需要呈现的网站资产等)。看
Docpad使用存储各种路径,因此它不需要在每次需要对文件执行某些操作时重新计算这些路径-从这里渲染文件并在那里输出
好消息是,此元数据的计算取决于Docpad将文件加载到其数据库(然后重新生成网站)时文件的保存位置
另一个好消息是documentsPath
是一个数组,因此您可以在多个位置保存要渲染和输出的文档
但我认为你的问题的答案是,你不需要更改元数据-它取决于文件保存的位置。这有意义吗
编辑
只是想了个办法来测试一下。在documents文件夹下创建两个名为“loc1”和“loc2”的文件夹。在“loc1”中放置一个包含以下内容的“index.html.eco”文件
---
layout: 'default'
title: 'Home'
---
<h3><%-@document.title%></h3>
<ul>
<% for key, val of @document: %>
<li>
<span><%-key%> = <%-val%></span>
</li>
<% end %>
</ul>
这里的想法是根据帖子的URL将文件写入不同的位置。因此,保存的文件将具有相应的元数据。如果我们以保存不同语言文件为例,我们可以在这里使用逻辑将多个文件保存在不同的位置,或者根据每种语言保存文件名
现在,如果您想根据某些标准提供不同的文档,可以执行以下操作:
server.get 'someurllogic', (req,res,next) ->
#do something with the url logic
document = docpad.getCollection('documents')
.findOne({relativeOutPath: resultOfUrlLogic+'index.html'});
docpad.serveDocument({
document: document,
req: req,
res: res,
next: next,
statusCode: 200
});
以语言为例,您可能有一些逻辑来确定要提供的语言(可能是用户代理),并提供要匹配的适当文档
另一种可能性是,您可以在保存文档时将元数据添加到文档中,这将帮助您在server.get处理程序中选择适当的文档。这可能与在标记文件中包含元数据的方式相同,如下所示:
# Server Extend
serverExtend: (opts) ->
safefs = require('safefs')
server.post '/listentry', (req,res,next) ->
safefs.writeFile outFile, content, (err) ->
return next(err) if err
---
layout: 'default'
title: 'My title'
tags: ['news','node']
mySelectionCriteria: 'selectionCriteria'
---
您可以添加的元数据确实没有限制。“您不需要更改元数据”,但是有没有一种方法可以根据文件的某些属性,在不更改其元数据的情况下更改插件中文档的保存位置?简短的回答是肯定的。我现在实际上也在做类似的事情。我刚刚又看了你的评论,我不明白不改变文档元数据的部分,不管它保存在哪里。这没有道理。@kizu我已经猜到了你想要达到的目标,并对我的文章进行了适当的编辑。我猜您并不是真的想更改docpad生成的默认元数据,而是根据一些标准提供不同版本的文档