簡體   English   中英

Gentics Mesh - 多語言支持 - 節點列表中的跨語言 - GraphQL 查詢

[英]Gentics Mesh - Multilanguage support - Cross language in a list of node - GraphQL query

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

通過 GraphQL 加載節點時存在一些已知問題和不一致的行為。 看到這個問題: https://github.com/gentics/mesh/issues/971

在您的情況下,查詢的節點列表將始終使用配置的默認語言(在mesh.yml中)。 在您的情況下,這似乎是de 這就是僅英語節點不產生結果的原因。

在解決此問題之前,您可以通過加載節點列表的所有語言來解決此問題:

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

您將節點列表中所有語言的內容。 這意味着您必須在收到響應后過濾代碼中所需的語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM