0

Gentics Mesh 版本:v1.5.1

介绍:

假设我们的模式A具有类型字段:列表和列表类型:节点和允许的模式:B。(见(1))。

  • 已在语言en中创建了B节点的实例( b1-EN ),在de中创建了( b1-DE ) 。
  • 已使用en语言创建了B节点的实例( b2-EN ) 。
  • 已使用de语言创建了A节点的实例( a1-DE ),并将b1-DEb2-EN添加到a1的节点列表 ( Bs ) 中。

结果,当在 Gentics Mesh CMS 中选择de语言时,节点a1-DE ( de ) 具有 2 个节点b1-DEb2-EN的列表。

当应用以下 GraphQL 查询时:

{
  node(path: "/a1-DE") {
      ... on A {
        path
        uuid
        availableLanguages
        fields {
          Bs {
            ... on B {
              path
              fields {
                id
              }
            }
          }
       }
    }
  }
}

结果是:

{
  "data": {
    "node": {
      "path": "/a1-DE",
      "uuid": "30dfd534cdee40dd8551e6322c6b1518",
      "availableLanguages": [
        "de"
      ],
      "fields": {
        "Bs": [
          {
            "path": "/b1-DE",
            "fields": {
              "id": "b1-DE"
            }
          },
          {
            "path": null,
            "fields": null
          }
        ]
      }
    }
  }
}

问题:

为什么结果没有在节点列表中显示 b2-EN 节点?查询错了吗?我想得到的结果是节点的默认语言版本(b2-EN),因为b2-DE尚未贡献。所以预期的结果:

{
  "data": {
    "node": {
      "path": "/a1-DE",
      "uuid": "30dfd534cdee40dd8551e6322c6b1518",
      "availableLanguages": [
        "de"
      ],
      "fields": {
        "Bs": [
          {
            "path": "/b1-DE",
            "fields": {
              "id": "b1-DE"
            }
          },
          {
            "path": "/b2-EN",
            "fields": {
              "id": "b2-EN"
            }
          }
        ]
      }
    }
  }
}

在文档 (2) 中:

如果未找到其他匹配内容,将应用回退到配置的默认语言。如果这也失败,将返回 Null。

有人可以启发我吗?

(1):架构

{
    "name": "A",
    "container": false,
    "autoPurge": false,
    "displayField": "id",
    "segmentField": "id",
    "urlFields": [
        "id"
    ],
    "fields": [
        {
            "name": "Bs",
            "type": "list",
            "label": "Bs",
            "required": false,
            "listType": "node",
            "allow": [
                "B"
            ]
        },
        {
            "name": "id",
            "type": "string",
            "label": "id",
            "required": true
        }
    ]
}

(2) https://getmesh.io/docs/graphql/#_multilanguage_support

4

1 回答 1

1

通过 GraphQL 加载节点时存在一些已知问题和不一致的行为。看到这个问题:https ://github.com/gentics/mesh/issues/971

在您的情况下,查询的节点列表将始终使用配置的默认语言(in mesh.yml)。在您的情况下,这似乎是de. 这就是仅英语节点不产生结果的原因。

在解决此问题之前,您可以通过加载节点列表的所有语言来解决此问题:

{
  node(path: "/a1-DE") {
      ... on A {
        path
        uuid
        availableLanguages
        fields {
          Bs {
            ... on B {
              languages {
                path
                language
                fields {
                  id
                }
              }
            }
          }
       }
    }
  }
}

您将节点列表中所有语言的内容。这意味着您必须在收到响应后过滤代码中所需的语言。

于 2020-05-26T06:53:17.600 回答