Wintersmith:通过内容树中页面外的循环进行简单的元数据访问

时间:2015-12-10 18:29:56

标签: wintersmith

我试图遍历我的内容树并从各种降价文件中提取元数据。我看到了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();
};

虽然我能够在记录的对象中看到我的元数据,但我并不完全确定如何从此处访问它。是否有更简单的方法从内容树中提取元数据?非常感谢任何帮助!

1 个答案:

答案 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'它会破裂。