Comment puis-je récupérer le menu de navigation principal complet via jsonapi?
J'ai essayé:
curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/
et
curl --header 'Accept: application/vnd.api+json' https://cms.example.com/jsonapi/menu/menu/232fc942-51f3-4478-8535-e5dc482a166e
où 232fc942-51f3-4478-8535-e5dc482a166e
est le id
du menu de navigation principal MAIS seuls les nœuds de premier niveau sont retournés:
{
"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"
}
}
}
Je ne l'ai pas fait fonctionner avec JSON: API, il y a plusieurs problèmes de longue date ...
Cependant vous pouvez le faire fonctionner si vous installez en plus le module REST Menu Tree .
Sachez que cela a plusieurs dépendances directes et indirectes:
Il dépend directement de Menu Normalizer et selon ce problème vous devez ensuite activer ce point de terminaison par exemple avec le module REST UI - qui à son tour activera le core REST .
Ensuite, dans votre site, activez le point de terminaison via l'interface utilisateur Rest dans /admin/config/services/rest
.
Ensuite, vous pouvez également autoriser tout le monde à obtenir ce point de terminaison via /admin/people/permissions#module-rest
Et enfin, vous obtenez un tableau JSON dans /entity/menu/main/tree
. Ou interrogez un menu différent via /entity/menu/{internal_menu_name}/tree
.
Il est possible d'extraire tous les éléments de menu en utilisant exclusivement l'API JSON :. Le principal "problème de longue date" est que les liens ne sont pas disponibles pour les utilisateurs non administrateurs, ce qui va probablement à l'encontre de l'objectif de la plupart des utilisateurs. Il existe cependant quelques correctifs qui permettent ceci:
https://www.drupal.org/project/drupal/issues/2915792
Et pour ajouter la propriété url:
https://www.drupal.org/project/drupal/issues/3066751
Cela vous permet d'atteindre ce point de terminaison:
/jsonapi/menu_link_content/your-menu-machine-name
Et obtenez un résultat JSON: API standard.
À retenir: l'état de l'extraction du menu sans tête de Drupal est épouvantable. ????
Il y a aussi le module rest_menu_items . Cela n'a pas de dépendances, la seule chose que vous devez faire est d'activer le point de terminaison. Cela vous permet également de spécifier les valeurs souhaitées et de spécifier la profondeur de l'arborescence.