Jsonapiを介して完全なメインナビゲーションメニューを取得するにはどうすればよいですか?
私はもう試した:
curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/
そして
curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e
どこ 232fc942-51f3-4478-8535-e5dc482a166e
はメインナビゲーションメニューのid
ですが、最初のレベルのノードのみが返されます。
{
"data": {
"type": "menu--menu",
"id": "232fc942-51f3-4478-8535-e5dc482a166e",
"attributes": {
"label": "Main navigation"
},
"links": {
"self": {
"href": "https://cms.garanteasy.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e"
}
}
},
"jsonapi": {
"version": "1.0",
"meta": {
"links": {
"self": {
"href": "http://jsonapi.org/format/1.0/"
}
}
}
},
"links": {
"self": {
"href": "https://cms.garanteasy.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e"
}
}
}
JSON:APIで実行できませんでした。長年の問題がいくつかあります...
ただし、RESTメニューツリー モジュールを追加でインストールすると、実行できます。
これにはいくつかの直接的および間接的な依存関係があることに注意してください。
メニューノーマライザ に直接依存しており、 この問題 に従って、たとえば REST UI モジュールを使用して、そのエンドポイントをアクティブにする必要があります。次に core REST module をアクティブにします。
次に、サイトで/admin/config/services/rest
のRest UIを介してエンドポイントをアクティブにします。
その後、/admin/people/permissions#module-rest
を使用して、すべてのユーザーがこのエンドポイントを取得できるようにすることもできます。
そして最後に、/entity/menu/main/tree
にJSON配列を取得します。または、/entity/menu/{internal_menu_name}/tree
を使用して別のメニューをクエリします。
JSON:APIのみを使用してすべてのメニュー項目をプルすることが可能です。主な「長期にわたる問題」は、管理者以外のユーザーがリンクを使用できないことであり、これはおそらくほとんどのユーザーの目的を無効にします。ただし、これを可能にするパッチがいくつかあります。
https://www.drupal.org/project/drupal/issues/2915792
そして、urlプロパティを追加するには:
https://www.drupal.org/project/drupal/issues/3066751
これにより、このエンドポイントにアクセスできます。
/jsonapi/menu_link_content/your-menu-machine-name
そして、標準のJSON:API結果を取得します。
重要なポイント:Drupalのヘッドレスメニューフェッチの状態はひどいです。 ????
rest_menu_items モジュールもあります。これには依存関係はなく、必要なのはエンドポイントを有効にすることだけです。これにより、必要な値を指定したり、ツリーの深さを指定したりすることもできます。