web-dev-qa-db-fra.com

Comment puis-je récupérer le menu de navigation principal complet via JSON: API?

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

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"
    }
  }
}
2
lrkwz

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.

2
Jannis Hell

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. ????

0
jpschroeder

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.

0
Fabian de Rijk