如何处理 GatsbyJS 中 markdown 帖子之间的父/子关系

Posted

技术标签:

【中文标题】如何处理 GatsbyJS 中 markdown 帖子之间的父/子关系【英文标题】:How to handle parent/child relationship between markdown posts in GatsbyJS 【发布时间】:2021-12-31 14:30:34 【问题描述】:

我想知道是否有一个优雅的解决方案来处理 Gatsby 中的两级父/子关系?

我正在建立一个展示产品的网站,其中一些产品有多种变体。

我的项目有以下两级文件夹结构:

src/posts
│
└───Product_A
│   │   index.md
│   │   image.png
│   │ 
│   └───Variants
│       └───Variant_1
│       │   index.md
│       │
│       └───Variant_2
│       │   index.md
│   
└───Product_B
│   │   index.md
│   
└───Product_C
│   │   index.md
│   │
│   └───Variants
...    

每个产品文件夹在 markdown、图像和可选的 Variants 文件夹中包含一篇文章(对于具有一个或多个变体的产品)。 我还使用 Markdown frontmatter 来描述父产品和子产品的产品属性。

我必须以“折叠”方式(同时显示产品及其变体数量)和展开方式(以扁平结构显示所有产品及其变体)在主页上显示产品及其变体,如下所示:

在产品页面上,我必须显示具有如下产品的产品变体:

我还必须确定产品是父产品还是子产品,并据此在产品页面上显示略有不同的设计/内容。

我目前正在尝试结合使用 GraphQL 过滤器和 fileAbsolutePath 来获取特定产品的变体:

  allMarkdownRemark( filter: fileAbsolutePath: glob: "**/Product_A/Variants/**")
    edges 
      node 
        fileAbsolutePath
        fields
          slug
        
        excerpt
        frontmatter 
          title
        
      
  

而且我必须依赖包含“/Variants/”文本的 fileAbsolutePathslug 字段来在代码中区分父级和子级(计算产品变体主页并在展开的视图中显示)。

之前看到有人问similar questions,建议使用GraphQL schema自定义,但是好像太复杂了。

我想知道是否有更简单的方法来完成我在 Gatsby 中所做的事情,或者是否有针对父子结构的现成解决方案?

我正在使用 Gatsby 2.3.23 和 MarkdownRemark。

【问题讨论】:

【参考方案1】:

我同意使用GraphQL schema customization 是最理想、更简洁、更优雅的解决方案,但是,如果您无法选择,我会为每个父产品考虑一种key 值,以便可以使用作为过滤器标识符。给定:

src/posts
│
└───Product_A
│   │   index.md

所以在 index.md 中:

---
key: product A
someField: Some value
someField2: Some value 2
---

然后,在您的查询字段中,您可以执行以下操作:

  allMarkdownRemark( filter: key: eq: "product A" )
    edges 
      node 
        fileAbsolutePath
        fields
          slug
        
        excerpt
        frontmatter 
          title
        
      
  

其余的以此类推。

【讨论】:

谢谢,这正是我所做的。我必须保持两级文件夹结构。所以在 gatsby-node.js onCreateNode() 我添加了父键(基于我从 fileAbsolutePath 读取的文件夹结构)。后来我在页面模板中使用该键。

以上是关于如何处理 GatsbyJS 中 markdown 帖子之间的父/子关系的主要内容,如果未能解决你的问题,请参考以下文章

markdown GIT中的多账号如何处理?1。同一台电脑多个GIT中(不同网站的)账号2.同一台电脑多个GIT中(同一个网站的比如github上的)多个账号

“不知道如何处理' nvcc 致命错误

如何处理片段和活动中的后压

如何处理 UsernameNotFoundException 春季安全

如何处理 MaxUploadSizeExceededException

如何处理警卫中显示的模态