9阅网

您现在的位置是:首页 > 知识 > 正文

知识

headless-cms - Gentics Mesh - 多语言支持 - 节点列表中的跨语言 - GraphQL查询。

admin2022-10-29知识25

Gentics Mesh版本:v1.5.1

介紹

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

  • 的实例。B 节点已被创建 (b1-EN)在语言上 和(b1-DE)在 .
  • 一个实例 B 节点已被创建 (b2-EN)的语言。.
  • 一个实例 A 节点已被创建 (a1-DE)在语言上 b1-DEb2-EN 被添加到节点列表中 (Bs) a1.

因此,当选择 Gentics Mesh CMS中的语言,Node。a1-DE ()有一个2个节点的列表 b1-DE, b2-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-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): Schema

{
    "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.iodocsgraphql#_multilanguage_support。



【回答】:

当通过GraphQL加载节点时,有一些已知的问题和不一致的行为。请看这个问题。https:/github.comgenticsmeshissues971)。

在你的例子中,被查询的节点列表将始终使用配置的默认语言(在 mesh.yml). 在您的情况下,这似乎是 de. 这就是为什么只有英文的节点没有结果的原因。

在这个问题解决之前,你可以通过加载节点列表的所有语言来解决这个问题。

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

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