web-dev-qa-db-fra.com

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

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?

18
BrandenB171

Je ne suis pas sûr qu'il y ait 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]);
}
25
Shawn Conn

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);

Références

7

Installez le module devel puis utilisez l'élément de la barre d'outils devel Current route info.

Il en résulte cette URL, que vous pouvez saisir directement et fournir tout chemin connu de votre installation drupal comme 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.

1
4k4