5

我想知道我是否可以在 gatsby 静态站点中拥有多种帖子类型。

在 gatsby-config.js 我有以下代码。

{
resolve: `gatsby-source-filesystem`,
options: {
  path: `${__dirname}/content/books`,
  name: `books`,
}

{
resolve: `gatsby-source-filesystem`,
options: {
  path: `${__dirname}/content/posts`,
  name: `posts`,
}

这两个文件夹都有相关的降价文件,我找不到任何用于检索两者的 graphql 示例。

提前致谢。

4

3 回答 3

5

另请参阅 此 (1)此 (2)问题/评论,它澄清了一些事情:

1.

回想起来,将该字段添加到 gatsby-transformer-remark 是一个错误,将来会被删除

2.

使用正则表达式也是一个很好的解决方案,例如,我们在 gatsbyjs.org 上使用了很多。

示例:所以这是只获取帖子的方法:

{
   allMarkdownRemark(
    sort: { order: DESC, fields: [frontmatter___date]},
    filter: {fileAbsolutePath: {regex: "/(\/content\/posts)/.*\\.md$/"}}
  ) {
      edges {
        node {
          excerpt(pruneLength: 250)
          id
          frontmatter {
            title
            date(formatString: "MMMM DD, YYYY")
            path
          }
        }
      }
    }
}
于 2017-10-27T20:58:59.417 回答
1

一旦它们像您现在设置的那样位于 grapqhl(通过 gatsby-source-filesystem)中,gatsby-transformer-remark 会将它们全部拉入 AllMarkdownRemark 查询,无论它们来自何处。gatsbyjs.org 文档也做同样的事情,请在此处查看源代码

尝试为 Markdown 内容创建查询,如官方教程的第 4 部分,您应该可以访问这两个文件夹中的所有页面。现在,如果您想以某种方式拆分它们,则必须进行检查。gatsby-node.js有关外观的示例,请参见上面链接中的文件。

于 2017-10-10T15:01:03.737 回答
0

上述解决方案将起作用。但是还有另一种方法:

{
  allFile(sort: {order: DESC, fields: [name]}, filter: {internal: {mediaType: {eq: "text/markdown"}}, sourceInstanceName: {eq: "articles"}}) {
    edges {
      node {
        sourceInstanceName
        childMarkdownRemark {
          excerpt(pruneLength: 250)
          frontmatter {
            title
            date(formatString: "MMMM DD, YYYY")
          }
        }
      }
    }
  }
}
于 2018-04-08T09:01:39.623 回答