web-dev-qa-db-fra.com

Obtenir l'alias de chemin à partir du NID (ou de l'objet nœud)

J'ai un objet nœud, et j'essaie de l'utiliser pour obtenir un chemin donné dans Drupal 8.

Il y avait drupal_lookup_path() dans Drupal 7 mais je ne vois aucun équivalent ou documentation pour Drupal 8.

Quelle est la nouvelle façon "Drupal" d'obtenir un chemin à partir d'un objet nœud?

Serait-ce quelque chose de simple comme $node->get('path')?

Cela semble être une question simple, mais je ne trouve absolument aucune documentation à ce sujet.

Remarquez que je ne veux pas l'alias de chemin pour le chemin actuel; Je veux l'alias de chemin pour un nœud arbitraire, étant donné un objet de nœud ou un ID de nœud.

27
Jack Ryan

Pour obtenir le chemin d'accès d'un identifiant de nœud, utilisez AliasManager :: getAliasByPath :

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
54
4k4

Qu'en est-il de l'utilisation rl :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
20
Kevin

Si vous n'avez que le nid, la solution de 4k4 de

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

Fonctionne très bien. Mais si vous avez déjà un objet nœud, vous pouvez ignorer une étape ou deux. Les nœuds ont en fait des méthodes intégrées pour obtenir des URL.

$node->toUrl()->toString();

Renvoyer l'URL aliasée du nœud.

toUrl () renvoie un objet url. Voir ici https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

et toString () est une méthode de l'objet url qui renvoie la représentation sous forme de chaîne de l'url.

16
Matt

Meilleure façon d'obtenir l'URL du nœud à partir de l'objet nœud

  • Chemin absol: $ node-> toUrl () -> setAbsolute () -> toString ();
  • Chemin relatif: $ node-> toUrl () -> toString ();

Il gérera également le langage du nœud.

3
Prem Patel

Vous pouvez également utiliser la méthode de chargement de path.alias_storage Pour renvoyer un tableau des détails de l'alias ou booléen false s'il n'y a pas de chemin trouvé pour ce nœud.

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);

2
rchaplin

Si vous voulez obtenir l'url de l'alias de nœud par languages n'oubliez pas d'utiliser la langue comme celle-ci.

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

Si vous l'utilisez dans une classe n'oubliez pas d'utiliser correctement l'injection de dépendances.

1
Diosbel Mezquía