Comment puis-je obtenir l'ID de nœud à partir d'un alias de chemin?


16

Je veux pouvoir obtenir le nid mais la seule information dont je dispose est http://example.com/this-is-the-alias .

Existe-t-il un moyen d'obtenir le chemin interne de / node / * pour cet alias si je ne suis pas sur la page? Ou existe-t-il un moyen d'obtenir immédiatement le nid de cet alias?

Réponses:


25

Je ne sais pas s'il y a une fonction directe, mais une route consiste à utiliser le service de gestionnaire d'alias de chemin pour rechercher le chemin interne, puis à le regex pour un identifiant de nœud valide pour effectuer un chargement d'objet sur:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
Pour une raison quelconque, $pathest parfois égal à /this-is-the-alias. Il était une fois lorsque le chemin racine ( node/{id}) était un autre alias #migrationstruggles, mais il était également présent avec d'autres alias.
Chris Happy

7

Vous pouvez utiliser le code suivant pour obtenir et charger une entité et avoir accès à ses valeurs.

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

Les références


1

Installez le module de développement, puis utilisez l'élément de la barre d'outils de développement Informations sur l'itinéraire actuel .

Il en résulte cette URL, que vous pouvez saisir directement et fournir n'importe quel chemin connu de votre installation Drupal en tant que paramètre de requête:

/devel/routes/item?path=alias

Lorsqu'il s'agit d'un nœud, vous trouvez l'ID de nœud dans les paramètres bruts à la fin des variables d'itinéraire répertoriées.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.