我试图遍历我的内容树并从各种降价文件中提取元数据。我看到了Paginator插件示例,但我觉得我的用例比Paginator需要的要简单得多。
如果我的内容目录结构如下:
projects/
project-name-1/
index.md
project-name-2/
index.md
project-name-3/
index.md
我想循环浏览我的内容并检索所有"标题"元数据属性。如果我在jade中尝试一个简单的循环,例如:
each project in content.projects
- console.log(project.metadata.title);
我记录未定义。
我尝试将这种逻辑转换为一个简单的插件,受到Paginator的启发(用js编写):
module.exports = function(env, callback){
_ = require('underscore');
var options = {projects: 'projects'};
function getProjects(contents) {
//helper that returns a list of projects found in *contents*
//note that each article is assumed to have its own directory in the articles directory
// console.dir(contents[options.projects]);
_.each(contents[options.projects], function(i){console.log(i);});
var projects = {};//@todo create a new collection containing each metadata object
return projects;
}
//add the article helper to the environment so we can use it later
env.helpers.getProjects = getProjects;
//tell the plugin manager we are done
callback();
};
虽然我能够在记录的对象中看到我的元数据,但我并不完全确定如何从此处访问它。是否有更简单的方法从内容树中提取元数据?非常感谢任何帮助!
答案 0 :(得分:0)
您遇到的问题是您正在迭代对象而不是数组。
你可以用两种方式解决它,要么使用wintersmith" s"内容组"这是阵列。
each project in contents.projects._.directories
- console.log(project.index.metadata.title)
请注意,我们正在迭代这里的目录,因为这反映了您的设置,如果您的项目只在一个目录中,我们将遍历这些页面'内容组。
另一种选择是使用' for in'列举。在玉中它看起来像这样:
each name, content in contents.projects
- console.log(content.index.metadata.title)
这种方法的问题在于,如果你把一个目录以外的东西放在' projects'它会破裂。